Quellcode durchsuchen

Fixed an exception due to sim object getting destroyed on core thread

Marko Pintera vor 11 Jahren
Ursprung
Commit
5bfcb3bde6

+ 3 - 0
BansheeCore/Source/BsCoreApplication.cpp

@@ -40,6 +40,7 @@
 #include "BsRenderStats.h"
 #include "BsMessageHandler.h"
 #include "BsResourceListenerManager.h"
+#include "BsRenderStateManager.h"
 
 #include "BsMaterial.h"
 #include "BsShader.h"
@@ -86,6 +87,7 @@ namespace BansheeEngine
 		Resources::startUp();
 		ResourceListenerManager::startUp();
 		GpuProgramManager::startUp();
+		RenderStateManager::startUp();
 		GpuProgramCoreManager::startUp();
 		RenderAPIManager::startUp();
 
@@ -133,6 +135,7 @@ namespace BansheeEngine
 		Resources::shutDown();
 		ResourceListenerManager::shutDown();
 		GameObjectManager::shutDown();
+		RenderStateManager::shutDown();
 
 		// All CoreObject related modules should be shut down now. They have likely queued CoreObjects for destruction, so
 		// we need to wait for those objects to get destroyed before continuing.

+ 0 - 2
BansheeD3D11RenderSystem/Source/BsD3D11RenderAPI.cpp

@@ -122,7 +122,6 @@ namespace BansheeEngine
 		mHLSLFactory = bs_new<D3D11HLSLProgramFactory>();
 
 		// Create render state manager
-		RenderStateManager::startUp();
 		RenderStateCoreManager::startUp<D3D11RenderStateCoreManager>();
 
 		mCurrentCapabilities = createRenderSystemCapabilities();
@@ -172,7 +171,6 @@ namespace BansheeEngine
 		mActiveVertexShader = nullptr;
 
 		RenderStateCoreManager::shutDown();
-		RenderStateManager::shutDown();
 		RenderWindowCoreManager::shutDown();
 		RenderWindowManager::shutDown();
 		HardwareBufferCoreManager::shutDown();

+ 0 - 2
BansheeD3D9RenderSystem/Source/BsD3D9RenderAPI.cpp

@@ -106,7 +106,6 @@ namespace BansheeEngine
 		RenderWindowCoreManager::startUp<D3D9RenderWindowCoreManager>(this);
 
 		// Create render state manager
-		RenderStateManager::startUp();
 		RenderStateCoreManager::startUp();
 
 		RenderAPICore::initializePrepare();
@@ -157,7 +156,6 @@ namespace BansheeEngine
 		RenderWindowCoreManager::shutDown();
 		RenderWindowManager::shutDown();
 		RenderStateCoreManager::shutDown();
-		RenderStateManager::shutDown();
 
 		// Deleting the HLSL program factory
 		if (mHLSLProgramFactory)

+ 0 - 2
BansheeGLRenderSystem/Source/BsGLRenderAPI.cpp

@@ -108,7 +108,6 @@ namespace BansheeEngine
 		RenderWindowManager::startUp<GLRenderWindowManager>(this);
 		RenderWindowCoreManager::startUp<GLRenderWindowCoreManager>(this);
 
-		RenderStateManager::startUp();
 		RenderStateCoreManager::startUp();
 
 		QueryManager::startUp<GLQueryManager>();
@@ -193,7 +192,6 @@ namespace BansheeEngine
 		RenderWindowCoreManager::shutDown();
 		RenderWindowManager::shutDown();
 		RenderStateCoreManager::shutDown();
-		RenderStateManager::shutDown();
 		GLVertexArrayObjectManager::shutDown(); // Note: Needs to be after QueryManager shutdown as some resources might be waiting for queries to complete
 
 		mGLInitialised = false;

+ 9 - 0
TODO.txt

@@ -3,6 +3,9 @@
  New issues:
   - Since Mesh refactor when I select/deselect a gizmo the entire render texture flashes white for one frame (might be related to RT refactor instead)
 
+  Crash on shutdown: RenderStateManager gets initialize on core thread and it holds some references
+ - Happened after i selected something in scene and then shutdown
+
 Fix crash on shutdown with OpenGL
 
 Try to figure out how to deal with material and its references:
@@ -14,6 +17,12 @@ Try to figure out how to deal with material and its references:
  - OPTIMAL approach would be to generate shader desc on sim thread or during import and allow delayed initialization
    - If user uses async loading then it's his fault if material hasn't been initialized
 
+NEW IDEA (needs work)
+Allow the material to be initialized ONLY from synced data
+ - While at it modify its shader from ShaderPtr to HShader
+Do the same for Pass
+But when loading a material from disk asynchronously ensure that its handle is not initialized as loaded until all dependencies are loaded async as well
+
 -----------------
 
 Port SceneCameraController to C#