Browse Source

Properly unregister various core rendering managers when they are destroyed

BearishSun 10 years ago
parent
commit
b8d2d25e1d

+ 1 - 0
BansheeEditor/Include/BsGizmoManager.h

@@ -418,6 +418,7 @@ namespace BansheeEngine
 
 
 	public:
 	public:
 		GizmoManagerCore(const PrivatelyConstuct& dummy);
 		GizmoManagerCore(const PrivatelyConstuct& dummy);
+		~GizmoManagerCore();
 
 
 	private:
 	private:
 		/**
 		/**

+ 1 - 0
BansheeEditor/Include/BsHandleDrawManager.h

@@ -222,6 +222,7 @@ namespace BansheeEngine
 
 
 	public:
 	public:
 		HandleDrawManagerCore(const PrivatelyConstruct& dummy) { }
 		HandleDrawManagerCore(const PrivatelyConstruct& dummy) { }
+		~HandleDrawManagerCore();
 
 
 	private:
 	private:
 		friend class HandleDrawManager;
 		friend class HandleDrawManager;

+ 1 - 0
BansheeEditor/Include/BsSelectionRenderer.h

@@ -66,6 +66,7 @@ namespace BansheeEngine
 
 
 	public:
 	public:
 		SelectionRendererCore(const PrivatelyConstuct& dummy);
 		SelectionRendererCore(const PrivatelyConstuct& dummy);
+		~SelectionRendererCore();
 
 
 	private:
 	private:
 		/**
 		/**

+ 7 - 0
BansheeEditor/Source/BsGizmoManager.cpp

@@ -641,6 +641,13 @@ namespace BansheeEngine
 	{
 	{
 	}
 	}
 
 
+	GizmoManagerCore::~GizmoManagerCore()
+	{
+		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
+		if (mCamera != nullptr)
+			activeRenderer->_unregisterRenderCallback(mCamera.get(), 20);
+	}
+
 	void GizmoManagerCore::initialize(const GizmoManager::CoreInitData& initData)
 	void GizmoManagerCore::initialize(const GizmoManager::CoreInitData& initData)
 	{
 	{
 		THROW_IF_NOT_CORE_THREAD;
 		THROW_IF_NOT_CORE_THREAD;

+ 7 - 0
BansheeEditor/Source/BsHandleDrawManager.cpp

@@ -183,6 +183,13 @@ namespace BansheeEngine
 		mDrawHelper->clear();
 		mDrawHelper->clear();
 	}
 	}
 
 
+	HandleDrawManagerCore::~HandleDrawManagerCore()
+	{
+		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
+		if (mCamera != nullptr)
+			activeRenderer->_unregisterRenderCallback(mCamera.get(), 20);
+	}
+
 	void HandleDrawManagerCore::initialize(const SPtr<MaterialCore>& wireMat, const SPtr<MaterialCore>& solidMat)
 	void HandleDrawManagerCore::initialize(const SPtr<MaterialCore>& wireMat, const SPtr<MaterialCore>& solidMat)
 	{
 	{
 		{
 		{

+ 2 - 2
BansheeEditor/Source/BsSceneGrid.cpp

@@ -131,7 +131,7 @@ namespace BansheeEngine
 	SceneGridCore::~SceneGridCore()
 	SceneGridCore::~SceneGridCore()
 	{
 	{
 		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
 		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
-		activeRenderer->_unregisterRenderCallback(mCamera.get(), -20);
+		activeRenderer->_unregisterRenderCallback(mCamera.get(), -10);
 	}
 	}
 
 
 	void SceneGridCore::initialize(const SPtr<CameraCore>& camera, const SPtr<MaterialCore>& material)
 	void SceneGridCore::initialize(const SPtr<CameraCore>& camera, const SPtr<MaterialCore>& material)
@@ -148,7 +148,7 @@ namespace BansheeEngine
 		mGridFadeOutEndParam = mGridMaterial->getParamFloat("gridFadeOutEnd");
 		mGridFadeOutEndParam = mGridMaterial->getParamFloat("gridFadeOutEnd");
 
 
 		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
 		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
-		activeRenderer->_registerRenderCallback(camera.get(), -20, std::bind(&SceneGridCore::render, this));			
+		activeRenderer->_registerRenderCallback(camera.get(), -10, std::bind(&SceneGridCore::render, this));			
 	}
 	}
 
 
 	void SceneGridCore::updateData(const SPtr<MeshCore>& mesh, float spacing)
 	void SceneGridCore::updateData(const SPtr<MeshCore>& mesh, float spacing)

+ 7 - 0
BansheeEditor/Source/BsSelectionRenderer.cpp

@@ -70,6 +70,13 @@ namespace BansheeEngine
 	{
 	{
 	}
 	}
 
 
+	SelectionRendererCore::~SelectionRendererCore()
+	{
+		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
+		if (mCamera != nullptr)
+			activeRenderer->_unregisterRenderCallback(mCamera.get(), 10);
+	}
+
 	void SelectionRendererCore::initialize(const SPtr<MaterialCore>& mat)
 	void SelectionRendererCore::initialize(const SPtr<MaterialCore>& mat)
 	{
 	{
 		THROW_IF_NOT_CORE_THREAD;
 		THROW_IF_NOT_CORE_THREAD;