povray/vfe/win/console/winconsole.cpp
Campbell Barton b3846f5723 quiet compiler warnings building with gcc and clang.
- define variables and functions as static when not declared by headers.
- remove some unused defines.
- other minor changes to quiet warnings.
2013-11-17 07:34:00 +11:00

133 lines
4.3 KiB
C++

/*******************************************************************************
* winconsole.cpp
*
* This file contains a basic proof-of-concept POV implementation using VFE.
*
* Author: Christopher J. Cason
*
* ---------------------------------------------------------------------------
* Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
* Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
*
* POV-Ray is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* POV-Ray is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------------
* POV-Ray is based on the popular DKB raytracer version 2.12.
* DKBTrace was originally written by David K. Buck.
* DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
* ---------------------------------------------------------------------------
* $File: //depot/public/povray/3.x/vfe/win/console/winconsole.cpp $
* $Revision: #1 $
* $Change: 6069 $
* $DateTime: 2013/11/06 11:59:40 $
* $Author: chrisc $
*******************************************************************************/
#include "vfe.h"
#ifndef _CONSOLE
#error You must define _CONSOLE in vfe\win\syspovconfig.h prior to building the console version, otherwise you will get link errors.
#endif
using namespace vfe;
using namespace vfePlatform;
namespace pov_frontend
{
////////////////////////////////
// Called from the shellout code
////////////////////////////////
bool MinimizeShellouts(void) { return false; } // TODO
bool ShelloutsPermitted(void) { return false; } // TODO
}
static void PrintStatus (vfeSession *session)
{
string str;
vfeSession::MessageType type;
static vfeSession::MessageType lastType = vfeSession::mUnclassified;
while (session->GetNextCombinedMessage (type, str))
{
if (type != vfeSession::mGenericStatus)
{
if (lastType == vfeSession::mGenericStatus)
fprintf (stderr, "\n") ;
fprintf (stderr, "%s\n", str.c_str());
}
else
fprintf (stderr, "%s\r", str.c_str());
lastType = type;
}
}
static void ErrorExit(vfeSession *session)
{
fprintf (stderr, "%s\n", session->GetErrorString());
session->Shutdown();
delete session;
exit (1);
}
// this is an example of a minimal console version of POV-Ray using the VFE
// (virtual front-end) library. it is NOT INTENDED TO BE A FULLY-FEATURED
// CONSOLE IMPLEMENTATION OF POV-RAY and is not officially supported. see
// the unix version for a example of a more comprehensive console build.
int main (int argc, char **argv)
{
char *s;
vfeWinSession *session = new vfeWinSession() ;
vfeStatusFlags flags;
vfeRenderOptions opts;
fprintf(stderr,
"This is an example of a minimal console build of POV-Ray under Windows.\n\n"
"Persistence of Vision Raytracer(tm) " POV_RAY_VERSION COMPILER_VER SSE2_INCLUDED "." PVENGINE_VER ".\n"
DISTRIBUTION_MESSAGE_1 "\n"
DISTRIBUTION_MESSAGE_2 "\n"
DISTRIBUTION_MESSAGE_3 "\n"
POV_RAY_COPYRIGHT "\n"
DISCLAIMER_MESSAGE_1 "\n"
DISCLAIMER_MESSAGE_2 "\n\n");
if (session->Initialize(NULL, NULL) != vfeNoError)
ErrorExit(session);
if ((s = getenv ("POVINC")) != NULL)
opts.AddLibraryPath (s);
while (*++argv)
opts.AddCommand (*argv);
if (session->SetOptions(opts) != vfeNoError)
ErrorExit(session);
if (session->StartRender() != vfeNoError)
ErrorExit(session);
bool pauseWhenDone = session->GetBoolOption("Pause_When_Done", false);
while (((flags = session->GetStatus(true, 1000)) & stRenderShutdown) == 0)
PrintStatus (session) ;
session->Shutdown() ;
PrintStatus (session) ;
delete session;
if (pauseWhenDone)
{
fprintf (stderr, "Press enter to continue ... ");
fflush(stderr);
getchar();
}
return 0;
}