]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CSceneManager.cpp
Merging r6107 through r6116 from trunk to ogl-es branch
[irrlicht.git] / source / Irrlicht / CSceneManager.cpp
index 0d1f7c9d39d9bfb0dfd41120ec5125e0ae3879a6..e49e0a930ace34d19eab2ffb0c3d59105bf37348 100644 (file)
@@ -357,6 +357,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
                        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
@@ -1403,6 +1404,13 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode* node, E_SCENE_NODE_RENDE
                }\r
                break;\r
 \r
+       case ESNRP_GUI:\r
+               if (!isCulled(node))\r
+               {\r
+                       GuiNodeList.push_back(node);\r
+                       taken = 1;\r
+               }\r
+\r
        case ESNRP_NONE: // ignore this one\r
                break;\r
        }\r
@@ -1430,6 +1438,7 @@ void CSceneManager::clearAllRegisteredNodesForRendering()
        TransparentNodeList.clear();\r
        TransparentEffectNodeList.clear();\r
        ShadowNodeList.clear();\r
+       GuiNodeList.clear();\r
 }\r
 \r
 //! This method is called just before the rendering process of the whole scene.\r
@@ -1711,6 +1720,36 @@ void CSceneManager::drawAll()
                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
+               if (LightManager)\r
+               {\r
+                       LightManager->OnRenderPassPreRender(CurrentRenderPass);\r
+\r
+                       for (i=0; i<GuiNodeList.size(); ++i)\r
+                       {\r
+                               ISceneNode* node = GuiNodeList[i];\r
+                               LightManager->OnNodePreRender(node);\r
+                               node->render();\r
+                               LightManager->OnNodePostRender(node);\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       for (i=0; i<GuiNodeList.size(); ++i)\r
+                               GuiNodeList[i]->render();\r
+               }\r
+#ifdef _IRR_SCENEMANAGER_DEBUG\r
+               Parameters->setAttribute("drawn_gui_nodes", (s32) GuiNodeList.size());\r
+#endif\r
+               GuiNodeList.set_used(0);\r
+       }\r
+       \r
+\r
        if (LightManager)\r
                LightManager->OnPostRender();\r
 \r