1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/*******************************************************************************
* 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;
}
|