Răsfoiți Sursa

Fixed a couple of issues that would happen if a render target was destroyed yet still being referenced

Marko Pintera 12 ani în urmă
părinte
comite
e7e1debcbd

+ 1 - 1
BansheeEditor/Source/BsEditorApplication.cpp

@@ -358,7 +358,7 @@ namespace BansheeEditor
 
 	void EditorApplication::closeModalWindow(RenderWindowPtr window, CM::HSceneObject sceneObject)
 	{
-		sceneObject->destroy();
+		//sceneObject->destroy();
 		window->destroy();
 	}
 

+ 3 - 0
BansheeEngine/Source/BsGUIManager.cpp

@@ -1294,6 +1294,9 @@ namespace BansheeEngine
 	Vector2I GUIManager::getWidgetRelativePos(const GUIWidget& widget, const Vector2I& screenPos) const
 	{
 		const RenderWindow* window = getWidgetWindow(widget);
+		if(window == nullptr)
+			return Vector2I();
+
 		Vector2I windowPos = window->screenToWindowPos(screenPos);
 		windowPos = windowToBridgedCoords(widget, windowPos);
 

+ 2 - 1
CamelotCore/Source/CmRenderSystem.cpp

@@ -281,7 +281,8 @@ namespace CamelotFramework {
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		target->swapBuffers();
+		if(target->isInitialized())
+			target->swapBuffers();
 	}
 
 	void RenderSystem::writeSubresource(GpuResourcePtr resource, UINT32 subresourceIdx, const GpuResourceDataPtr& data, bool discardEntireBuffer, AsyncOp& asyncOp)