#include "IMaterialRenderer.h"\r
#include "IReadFile.h"\r
#include "IWriteFile.h"\r
-#include "EProfileIDs.h"\r
-#include "IProfiler.h"\r
\r
#include "os.h"\r
\r
-// We need this include for the case of skinned mesh support without\r
-// any such loader\r
-#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_\r
#include "CSkinnedMesh.h"\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_X_LOADER_\r
#include "CXMeshFileLoader.h"\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_OBJ_LOADER_\r
#include "COBJMeshFileLoader.h"\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_B3D_LOADER_\r
#include "CB3DMeshFileLoader.h"\r
-#endif\r
-\r
-#ifdef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_\r
#include "CBillboardSceneNode.h"\r
-#endif // _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_\r
#include "CAnimatedMeshSceneNode.h"\r
#include "CCameraSceneNode.h"\r
#include "CMeshSceneNode.h"\r
// TODO: now that we have multiple scene managers, these should be\r
// shallow copies from the previous manager if there is one.\r
\r
- #ifdef _IRR_COMPILE_WITH_X_LOADER_\r
MeshLoaderList.push_back(new CXMeshFileLoader(this, FileSystem));\r
- #endif\r
- #ifdef _IRR_COMPILE_WITH_OBJ_LOADER_\r
MeshLoaderList.push_back(new COBJMeshFileLoader(this, FileSystem));\r
- #endif\r
- #ifdef _IRR_COMPILE_WITH_B3D_LOADER_\r
MeshLoaderList.push_back(new CB3DMeshFileLoader(this));\r
- #endif\r
-\r
- IRR_PROFILE(\r
- static bool initProfile = false;\r
- if (!initProfile )\r
- {\r
- initProfile = true;\r
- getProfiler().add(EPID_SM_DRAW_ALL, L"drawAll", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_ANIMATE, L"animate", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_CAMERAS, L"cameras", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_LIGHTS, L"lights", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_SKYBOXES, L"skyboxes", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_DEFAULT, L"defaultnodes", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_SHADOWS, L"shadows", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_TRANSPARENT, L"transp.nodes", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_EFFECT, L"effectnodes", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_RENDER_GUI_NODES, L"guinodes", L"Irrlicht scene");\r
- getProfiler().add(EPID_SM_REGISTER, L"reg.render.node", L"Irrlicht scene");\r
- }\r
- )\r
}\r
\r
\r
video::SColor colorTop, video::SColor colorBottom\r
)\r
{\r
-#ifdef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_\r
if (!parent)\r
parent = this;\r
\r
node->drop();\r
\r
return node;\r
-#else\r
- return 0;\r
-#endif\r
}\r
\r
\r
//! registers a node for rendering it at a specific time.\r
u32 CSceneManager::registerNodeForRendering(ISceneNode* node, E_SCENE_NODE_RENDER_PASS pass)\r
{\r
- IRR_PROFILE(CProfileScope p1(EPID_SM_REGISTER);)\r
u32 taken = 0;\r
\r
switch(pass)\r
break;\r
}\r
\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- s32 index = Parameters->findAttribute("calls");\r
- Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);\r
-\r
- if (!taken)\r
- {\r
- index = Parameters->findAttribute("culled");\r
- Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);\r
- }\r
-#endif\r
-\r
return taken;\r
}\r
\r
//! draws all scene nodes\r
void CSceneManager::drawAll()\r
{\r
- IRR_PROFILE(CProfileScope psAll(EPID_SM_DRAW_ALL);)\r
-\r
if (!Driver)\r
return;\r
\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- // reset attributes\r
- Parameters->setAttribute("culled", 0);\r
- Parameters->setAttribute("calls", 0);\r
- Parameters->setAttribute("drawn_solid", 0);\r
- Parameters->setAttribute("drawn_transparent", 0);\r
- Parameters->setAttribute("drawn_transparent_effect", 0);\r
-#endif\r
-\r
u32 i; // new ISO for scoping problem in some compilers\r
\r
// reset all transforms\r
Driver->setAllowZWriteOnTransparent(Parameters->getAttributeAsBool(ALLOW_ZWRITE_ON_TRANSPARENT));\r
\r
// do animations and other stuff.\r
- IRR_PROFILE(getProfiler().start(EPID_SM_ANIMATE));\r
OnAnimate(os::Timer::getTime());\r
- IRR_PROFILE(getProfiler().stop(EPID_SM_ANIMATE));\r
\r
/*!\r
First Scene Node for prerendering should be the active camera\r
consistent Camera is needed for culling\r
*/\r
- IRR_PROFILE(getProfiler().start(EPID_SM_RENDER_CAMERAS));\r
camWorldPos.set(0,0,0);\r
if (ActiveCamera)\r
{\r
ActiveCamera->render();\r
camWorldPos = ActiveCamera->getAbsolutePosition();\r
}\r
- IRR_PROFILE(getProfiler().stop(EPID_SM_RENDER_CAMERAS));\r
\r
// let all nodes register themselves\r
OnRegisterSceneNode();\r
\r
//render camera scenes\r
{\r
- IRR_PROFILE(CProfileScope psCam(EPID_SM_RENDER_CAMERAS);)\r
CurrentRenderPass = ESNRP_CAMERA;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
\r
// render skyboxes\r
{\r
- IRR_PROFILE(CProfileScope psSkyBox(EPID_SM_RENDER_SKYBOXES);)\r
CurrentRenderPass = ESNRP_SKY_BOX;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
\r
// render default objects\r
{\r
- IRR_PROFILE(CProfileScope psDefault(EPID_SM_RENDER_DEFAULT);)\r
CurrentRenderPass = ESNRP_SOLID;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
for (i=0; i<SolidNodeList.size(); ++i)\r
SolidNodeList[i].Node->render();\r
\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- Parameters->setAttribute("drawn_solid", (s32) SolidNodeList.size() );\r
-#endif\r
SolidNodeList.set_used(0);\r
}\r
\r
// render transparent objects.\r
{\r
- IRR_PROFILE(CProfileScope psTrans(EPID_SM_RENDER_TRANSPARENT);)\r
CurrentRenderPass = ESNRP_TRANSPARENT;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
for (i=0; i<TransparentNodeList.size(); ++i)\r
TransparentNodeList[i].Node->render();\r
\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- Parameters->setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );\r
-#endif\r
TransparentNodeList.set_used(0);\r
}\r
\r
// render transparent effect objects.\r
{\r
- IRR_PROFILE(CProfileScope psEffect(EPID_SM_RENDER_EFFECT);)\r
CurrentRenderPass = ESNRP_TRANSPARENT_EFFECT;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
\r
for (i=0; i<TransparentEffectNodeList.size(); ++i)\r
TransparentEffectNodeList[i].Node->render();\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- Parameters->setAttribute("drawn_transparent_effect", (s32) TransparentEffectNodeList.size());\r
-#endif\r
+\r
TransparentEffectNodeList.set_used(0);\r
}\r
\r
// render custom gui nodes\r
{\r
- IRR_PROFILE(CProfileScope psEffect(EPID_SM_RENDER_GUI_NODES);)\r
CurrentRenderPass = ESNRP_GUI;\r
Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0);\r
\r
for (i=0; i<GuiNodeList.size(); ++i)\r
GuiNodeList[i]->render();\r
-#ifdef _IRR_SCENEMANAGER_DEBUG\r
- Parameters->setAttribute("drawn_gui_nodes", (s32) GuiNodeList.size());\r
-#endif\r
+\r
GuiNodeList.set_used(0);\r
}\r
clearDeletionList();\r
//! Get a skinned mesh, which is not available as header-only code\r
ISkinnedMesh* CSceneManager::createSkinnedMesh()\r
{\r
-#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_\r
return new CSkinnedMesh();\r
-#else\r
- return 0;\r
-#endif\r
}\r
\r
//! Returns a mesh writer implementation if available\r
IMeshWriter* CSceneManager::createMeshWriter(EMESH_WRITER_TYPE type)\r
{\r
- switch(type)\r
- {\r
- case EMWT_IRR_MESH:\r
- case EMWT_COLLADA:\r
- return 0;\r
- case EMWT_STL:\r
-#ifdef _IRR_COMPILE_WITH_STL_WRITER_\r
- return new CSTLMeshWriter(this);\r
-#else\r
- return 0;\r
-#endif\r
- case EMWT_OBJ:\r
-#ifdef _IRR_COMPILE_WITH_OBJ_WRITER_\r
- return new COBJMeshWriter(this, FileSystem);\r
-#else\r
- return 0;\r
-#endif\r
-\r
- case EMWT_PLY:\r
-#ifdef _IRR_COMPILE_WITH_PLY_WRITER_\r
- return new CPLYMeshWriter();\r
-#else\r
- return 0;\r
-#endif\r
-\r
- case EMWT_B3D:\r
-#ifdef _IRR_COMPILE_WITH_B3D_WRITER_\r
- return new CB3DMeshWriter();\r
-#else\r
- return 0;\r
-#endif\r
- }\r
-\r
return 0;\r
}\r
\r