Bläddra i källkod

Fixed managed Renderable and Camera handlers so they are properly destroyed

Marko Pintera 10 år sedan
förälder
incheckning
00753da319

+ 9 - 9
BansheeRenderer/Include/BsBansheeRenderer.h

@@ -57,48 +57,48 @@ namespace BansheeEngine
 		/**
 		/**
 		 * @copydoc	Renderer::getName
 		 * @copydoc	Renderer::getName
 		 */
 		 */
-		virtual const StringID& getName() const;
+		virtual const StringID& getName() const override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::renderAll
 		 * @copydoc	Renderer::renderAll
 		 */
 		 */
-		virtual void renderAll();
+		virtual void renderAll() override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_onActivated
 		 * @copydoc	Renderer::_onActivated
 		 */
 		 */
-		virtual void _onActivated();
+		virtual void _onActivated() override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_onDeactivated
 		 * @copydoc	Renderer::_onDeactivated
 		 */
 		 */
-		virtual void _onDeactivated();
+		virtual void _onDeactivated() override;
 
 
 	private:
 	private:
 		/**
 		/**
 		 * @copydoc	Renderer::_notifyCameraAdded
 		 * @copydoc	Renderer::_notifyCameraAdded
 		 */
 		 */
-		void _notifyCameraAdded(const CameraHandlerCore* camera);
+		void _notifyCameraAdded(const CameraHandlerCore* camera) override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_notifyCameraRemoved
 		 * @copydoc	Renderer::_notifyCameraRemoved
 		 */
 		 */
-		void _notifyCameraRemoved(const CameraHandlerCore* camera);
+		void _notifyCameraRemoved(const CameraHandlerCore* camera) override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_notifyRenderableAdded
 		 * @copydoc	Renderer::_notifyRenderableAdded
 		 */
 		 */
-		void _notifyRenderableAdded(RenderableHandlerCore* renderable);
+		void _notifyRenderableAdded(RenderableHandlerCore* renderable) override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_notifyRenderableUpdated
 		 * @copydoc	Renderer::_notifyRenderableUpdated
 		 */
 		 */
-		void _notifyRenderableUpdated(RenderableHandlerCore* renderable);
+		void _notifyRenderableUpdated(RenderableHandlerCore* renderable) override;
 
 
 		/**
 		/**
 		 * @copydoc	Renderer::_notifyRenderableRemoved
 		 * @copydoc	Renderer::_notifyRenderableRemoved
 		 */
 		 */
-		void _notifyRenderableRemoved(RenderableHandlerCore* renderable);
+		void _notifyRenderableRemoved(RenderableHandlerCore* renderable) override;
 
 
 		/**
 		/**
 		 * @brief	Adds a new set of objects to the cameras render queue.
 		 * @brief	Adds a new set of objects to the cameras render queue.

+ 2 - 0
SBansheeEngine/Include/BsScriptRenderableHandler.h

@@ -27,6 +27,8 @@ namespace BansheeEngine
 		static void internal_SetMaterial(ScriptRenderableHandler* thisPtr, ScriptMaterial* material, int index);
 		static void internal_SetMaterial(ScriptRenderableHandler* thisPtr, ScriptMaterial* material, int index);
 		static void internal_OnDestroy(ScriptRenderableHandler* thisPtr);
 		static void internal_OnDestroy(ScriptRenderableHandler* thisPtr);
 
 
+		void destroy();
+
 		SPtr<RenderableHandler> mRenderableHandler;
 		SPtr<RenderableHandler> mRenderableHandler;
 		UINT32 mLastUpdateHash;
 		UINT32 mLastUpdateHash;
 	};
 	};

+ 1 - 0
SBansheeEngine/Source/BsScriptCameraHandler.cpp

@@ -412,5 +412,6 @@ namespace BansheeEngine
 	void ScriptCameraHandler::internal_OnDestroy(ScriptCameraHandler* instance)
 	void ScriptCameraHandler::internal_OnDestroy(ScriptCameraHandler* instance)
 	{
 	{
 		gSceneManager()._unregisterCamera(instance->getInternal());
 		gSceneManager()._unregisterCamera(instance->getInternal());
+		instance->getInternal()->destroy();
 	}
 	}
 }
 }

+ 8 - 4
SBansheeEngine/Source/BsScriptRenderableHandler.cpp

@@ -22,9 +22,7 @@ namespace BansheeEngine
 	}
 	}
 
 
 	ScriptRenderableHandler::~ScriptRenderableHandler()
 	ScriptRenderableHandler::~ScriptRenderableHandler()
-	{
-
-	}
+	{ }
 
 
 	void ScriptRenderableHandler::initRuntimeData()
 	void ScriptRenderableHandler::initRuntimeData()
 	{
 	{
@@ -111,6 +109,12 @@ namespace BansheeEngine
 
 
 	void ScriptRenderableHandler::internal_OnDestroy(ScriptRenderableHandler* thisPtr)
 	void ScriptRenderableHandler::internal_OnDestroy(ScriptRenderableHandler* thisPtr)
 	{
 	{
-		gSceneManager()._unregisterRenderable(thisPtr->getInternal());
+		thisPtr->destroy();
+	}
+
+	void ScriptRenderableHandler::destroy()
+	{
+		gSceneManager()._unregisterRenderable(mRenderableHandler);
+		mRenderableHandler->destroy();
 	}
 	}
 }
 }

+ 3 - 1
TODO.txt

@@ -28,15 +28,17 @@ Project window
 Dropping doesn't work. endDrag in DragAndDropManager gets called before cursorReleased()
 Dropping doesn't work. endDrag in DragAndDropManager gets called before cursorReleased()
 Destroying Renderable objects doesn't seem to properly clear them from the renderer
 Destroying Renderable objects doesn't seem to properly clear them from the renderer
 Add mesh scale to FBX importer (and default it to 0.01 or whatever makes the dragon look normal sized)
 Add mesh scale to FBX importer (and default it to 0.01 or whatever makes the dragon look normal sized)
+There's still an issue with dragging a selection area in the scroll box
 
 
 Later:
 Later:
  - Hook up ping effect so it triggers when I select a resource or sceneobject
  - Hook up ping effect so it triggers when I select a resource or sceneobject
   - Add ping to SceneTreeView
   - Add ping to SceneTreeView
- - Consider delaying search until user stops pressing keys
+ - Consider delaying search until user stops pressing keys (so not to have thousands of search results in the initial stages)
  - Save & restore scroll position when Refresh happens
  - Save & restore scroll position when Refresh happens
  - F2 and context menu for renaming assets (or when clicking on a solo selected asset)
  - F2 and context menu for renaming assets (or when clicking on a solo selected asset)
    - Also make sure the names contain only valid path characters
    - Also make sure the names contain only valid path characters
  - Delete with a dialog box to confirm
  - Delete with a dialog box to confirm
+ - Center labels and add a couple of pixels border from the selection rectangle
 
 
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 Resources
 Resources