/******************************************************************************* * 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 . * --------------------------------------------------------------------------- * 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; }