diff --git a/source/main.cpp b/source/main.cpp index 3de6ebe094..e9181d2836 100755 --- a/source/main.cpp +++ b/source/main.cpp @@ -17,9 +17,12 @@ #ifdef _M_IX86 #include "sysdep/ia32.h" #endif -#include "ps/Config.h" +#include "Config.h" #include "MapReader.h" #include "Terrain.h" +#include "TextureManager.h" +#include "ObjectManager.h" +#include "SkeletonAnimManager.h" #include "Renderer.h" #include "Model.h" #include "UnitManager.h" @@ -47,7 +50,10 @@ bool mouseButtons[5]; // flag to disable extended GL extensions until fix found - specifically, crashes // using VBOs on laptop Radeon cards static bool g_NoGLVBO=false; - +// flag to switch on shadows +static bool g_Shadows=false; +// flag to switch off pbuffers +static bool g_NoPBuffer=false; static bool g_VSync = false; static bool g_EntGraph = false; @@ -220,6 +226,19 @@ void RenderTerrain() } } } + +////////////////////////////////////////////////////////////////////////////////////////////////// +// SubmitModelRecursive: recurse down given model, submitting it and all it's descendents to the +// renderer +void SubmitModelRecursive(CModel* model) +{ + g_Renderer.Submit(model); + + const std::vector& props=model->GetProps(); + for (uint i=0;i& units=g_UnitMan.GetUnits(); - uint i; - for (i=0;im_Model->GetBounds())) { - g_Renderer.Submit(units[i]->m_Model); + for (uint i=0;iGetModel()->GetBounds())) { + SubmitModelRecursive(units[i]->GetModel()); } } } @@ -248,7 +266,7 @@ void RenderNoCull() uint i,j; const std::vector& units=g_UnitMan.GetUnits(); for (i=0;im_Model); + SubmitModelRecursive(units[i]->GetModel()); } u32 patchesPerSide=g_Terrain.GetPatchesPerSide(); @@ -353,7 +371,7 @@ void UpdateWorld(float time) { const std::vector& units=g_UnitMan.GetUnits(); for (uint i=0;im_Model->Update(time); + units[i]->GetModel()->Update(time); } g_EntityManager.updateAll( time ); @@ -387,6 +405,15 @@ void ParseArgs(int argc, char* argv[]) if (strncmp(argv[i]+1,"novbo",5)==0) { g_NoGLVBO=true; } + else if (strncmp(argv[i]+1,"nopbuffer",9)==0) { + g_NoPBuffer=true; + } + break; + + case 's': + if (strncmp(argv[i]+1,"shadows",7)==0) { + g_Shadows=true; + } break; } } @@ -504,8 +531,21 @@ int main(int argc, char* argv[]) font = font_load("fonts/verdana.fnt"); + // create renderer + new CRenderer; + // set renderer options from command line options - NOVBO must be set before opening the renderer - g_Renderer.SetOption(CRenderer::OPT_NOVBO,g_NoGLVBO); + g_Renderer.SetOptionBool(CRenderer::OPT_NOVBO,g_NoGLVBO); + g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS,g_Shadows); + g_Renderer.SetOptionBool(CRenderer::OPT_NOPBUFFER,g_NoPBuffer); + + // create terrain related stuff + new CTextureManager; + + // create actor related stuff + new CSkeletonAnimManager; + new CObjectManager; + new CUnitManager; // terr_init actually opens the renderer and loads a bunch of resources as well as setting up // the terrain @@ -619,5 +659,16 @@ if(!g_MapFile) delete &g_EntityManager; delete &g_EntityTemplateCollection; + // destroy actor related stuff + delete CUnitManager::GetSingletonPtr(); + delete CObjectManager::GetSingletonPtr(); + delete CSkeletonAnimManager::GetSingletonPtr(); + + // destroy terrain related stuff + delete CTextureManager::GetSingletonPtr(); + + // destroy renderer + delete CRenderer::GetSingletonPtr(); + return 0; }