فهرست منبع

ProfilerOverlay method actually gets called (not tested with data yet)

Marko Pintera 12 سال پیش
والد
کامیت
e9450917c1

+ 0 - 1
BansheeEngine/Include/BsApplication.h

@@ -27,7 +27,6 @@ namespace BansheeEngine
 			 * @brief	Frees up all resources allocated during startUp, and while the application was running.
 			 */
 			void shutDown();
-
 	private:
 		boost::signals::connection updateCallbackConn;
 

+ 2 - 3
CamelotClient/CamelotClient.cpp

@@ -278,9 +278,9 @@ int CALLBACK WinMain(
 	/* 								EDITOR INIT                      		*/
 	/************************************************************************/
 
-	MainEditorWindow* mainWindow = cm_new<MainEditorWindow>(gApplication().getPrimaryWindow());
 	EditorWindowManager::startUp(cm_new<EditorWindowManager>());
-
+	MainEditorWindow* mainWindow = MainEditorWindow::create(gApplication().getPrimaryWindow());
+	
 	CM::gApplication().mainLoopCallback.connect(&editorUpdate);
 
 	/************************************************************************/
@@ -297,7 +297,6 @@ int CALLBACK WinMain(
 	/************************************************************************/
 
 	EditorWindowManager::shutDown();
-	cm_delete(mainWindow);
 
 	/************************************************************************/
 	/* 							EDITOR SHUTDOWN END                    		*/

+ 7 - 2
CamelotClient/Include/BsEditorWindowBase.h

@@ -21,9 +21,14 @@ namespace BansheeEditor
 
 		virtual void close();
 		void hide();
+
+		/**
+		 * @brief	Called once every frame. Internal method.
+		 */
+		virtual void update() { }
 	protected:
 		EditorWindowBase();
-		EditorWindowBase(CM::RenderWindowPtr renderWindow);
+		EditorWindowBase(const CM::RenderWindowPtr& renderWindow);
 
 		CM::RenderWindowPtr mRenderWindow;
 		CM::HSceneObject mSceneObject;
@@ -32,7 +37,7 @@ namespace BansheeEditor
 		CM::GameObjectHandle<WindowFrameWidget> mWindowFrame;
 		bool mOwnsRenderWindow;
 
-		void construct(CM::RenderWindowPtr renderWindow);
+		void construct(const CM::RenderWindowPtr& renderWindow);
 		virtual void initialize();
 		virtual void movedOrResized() { }
 	private:

+ 4 - 0
CamelotClient/Include/BsEditorWindowManager.h

@@ -9,13 +9,17 @@ namespace BansheeEditor
 	class EditorWindowManager : public CM::Module<EditorWindowManager>
 	{
 	public:
+		EditorWindowManager();
 		~EditorWindowManager();
 
+		MainEditorWindow* createMain(const CM::RenderWindowPtr& parentRenderWindow);
 		EditorWindow* create();
 		void destroy(EditorWindowBase* window);
 
 		void update();
 	protected:
+		MainEditorWindow* mMainWindow;
+
 		CM::Vector<EditorWindowBase*>::type mEditorWindows;
 		CM::Vector<EditorWindowBase*>::type mScheduledForDestruction;
 	};

+ 7 - 1
CamelotClient/Include/BsMainEditorWindow.h

@@ -8,9 +8,15 @@ namespace BansheeEditor
 	class MainEditorWindow : public EditorWindowBase
 	{
 	public:
-		MainEditorWindow(CM::RenderWindowPtr renderWindow);
 		~MainEditorWindow();
 
+		void update();
+
+		static MainEditorWindow* create(const CM::RenderWindowPtr& renderWindow);
+	protected:
+		friend class EditorWindowManager;
+		MainEditorWindow(const CM::RenderWindowPtr& renderWindow);
+
 	protected:
 		GUIMenuBar* mMenuBar;
 		DockManager* mDockManager;

+ 2 - 2
CamelotClient/Source/BsEditorWindowBase.cpp

@@ -30,7 +30,7 @@ namespace BansheeEditor
 		construct(mRenderWindow);
 	}
 
-	EditorWindowBase::EditorWindowBase(CM::RenderWindowPtr renderWindow)
+	EditorWindowBase::EditorWindowBase(const CM::RenderWindowPtr& renderWindow)
 		:mOwnsRenderWindow(false)
 	{
 		construct(renderWindow);
@@ -62,7 +62,7 @@ namespace BansheeEditor
 		gMainSyncedCA().hideWindow(mRenderWindow);
 	}
 
-	void EditorWindowBase::construct(CM::RenderWindowPtr renderWindow)
+	void EditorWindowBase::construct(const RenderWindowPtr& renderWindow)
 	{
 		mRenderWindow = renderWindow;
 		mSceneObject = SceneObject::create("EditorWindow");

+ 25 - 0
CamelotClient/Source/BsEditorWindowManager.cpp

@@ -1,15 +1,33 @@
 #include "BsEditorWindowManager.h"
 #include "BsEditorWindow.h"
+#include "BsMainEditorWindow.h"
 
 using namespace CamelotFramework;
 using namespace BansheeEngine;
 
 namespace BansheeEditor
 {
+	EditorWindowManager::EditorWindowManager()
+		:mMainWindow(nullptr)
+	{
+
+	}
+
 	EditorWindowManager::~EditorWindowManager()
 	{
 		while(mEditorWindows.size() > 0)
 			destroy(mEditorWindows[0]);
+
+		if(mMainWindow != nullptr)
+			cm_delete(mMainWindow);
+	}
+
+	MainEditorWindow* EditorWindowManager::createMain(const CM::RenderWindowPtr& parentRenderWindow)
+	{
+		if(mMainWindow == nullptr)
+			mMainWindow = new (cm_alloc<MainEditorWindow>()) MainEditorWindow(parentRenderWindow);
+
+		return mMainWindow;
 	}
 
 	EditorWindow* EditorWindowManager::create()
@@ -47,5 +65,12 @@ namespace BansheeEditor
 		}
 
 		mScheduledForDestruction.clear();
+
+		mMainWindow->update();
+
+		for(auto& window : mEditorWindows)
+		{
+			window->update();
+		}
 	}
 }

+ 13 - 1
CamelotClient/Source/BsMainEditorWindow.cpp

@@ -1,10 +1,12 @@
 #include "BsMainEditorWindow.h"
+#include "BsEditorWindowManager.h"
 #include "BsDockManager.h"
 #include "BsGUIMenuBar.h"
 #include "BsCamera.h"
 #include "CmSceneObject.h"
 #include "CmRenderTexture.h"
 #include "CmCPUProfiler.h"
+#include "BsApplication.h"
 
 // DEBUG ONLY
 #include "CmTestTextSprite.h"
@@ -19,7 +21,12 @@ using namespace BansheeEngine;
 
 namespace BansheeEditor
 {
-	MainEditorWindow::MainEditorWindow(CM::RenderWindowPtr renderWindow)
+	MainEditorWindow* MainEditorWindow::create(const CM::RenderWindowPtr& renderWindow)
+	{
+		return EditorWindowManager::instance().createMain(renderWindow);
+	}
+
+	MainEditorWindow::MainEditorWindow(const CM::RenderWindowPtr& renderWindow)
 		:EditorWindowBase(renderWindow), mDockManager(cm_new<DockManager>(mGUI.get())), mMenuBar(cm_new<GUIMenuBar>(mGUI.get()))
 	{
 		updateAreas();
@@ -94,4 +101,9 @@ namespace BansheeEditor
 		UINT32 dockHeight = (UINT32)std::max(0, (INT32)widgetHeight - (INT32)menuBarHeight);
 		mDockManager->setArea(1, menuBarHeight + 1, widgetWidth, dockHeight);
 	}
+
+	void MainEditorWindow::update()
+	{
+		ProfilerOverlay::instance().update();
+	}
 }