Explorar el Código

Properly unload main scene prefab before shutdown so that the system doesn't try to access components from an unloaded plugin
Properly close DX11 fullscreen window

BearishSun hace 10 años
padre
commit
8d0343988b

+ 1 - 1
BansheeCore/Source/BsMaterial.cpp

@@ -1169,7 +1169,7 @@ namespace BansheeEngine
 		}
 
 		SPtr<ShaderCore>* shader = new (dataPtr)SPtr<ShaderCore>();
-		if (mShader != nullptr)
+		if (mShader.isLoaded(false))
 			*shader = mShader->getCore();
 		else
 			*shader = nullptr;

+ 1 - 1
BansheeCore/Source/BsMaterialRTTI.cpp

@@ -224,7 +224,7 @@ namespace BansheeEngine
 		std::shared_ptr<MaterialParams> params = any_cast<std::shared_ptr<MaterialParams>>(material->mRTTIData);
 
 		HShader shader = material->getShader();
-		if(shader != nullptr)
+		if(shader.isLoaded(false))
 		{
 			for(auto iter = params->floatParams.begin(); iter != params->floatParams.end(); ++iter)
 			{

+ 3 - 0
BansheeD3D11RenderAPI/Source/BsD3D11RenderWindow.cpp

@@ -33,6 +33,9 @@ namespace BansheeEngine
 
 		props.mActive = false;
 
+		if (props.isFullScreen())
+			mSwapChain->SetFullscreenState(false, nullptr);
+
 		SAFE_RELEASE(mSwapChain);
 		BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_SwapChain);
 

+ 8 - 6
Game/Source/Main.cpp

@@ -121,14 +121,16 @@ void runApplication()
 		gResources().registerResourceManifest(manifest);
 	}
 
-	HPrefab mainScene = static_resource_cast<Prefab>(gResources().loadFromUUID(gameSettings->mainSceneUUID));
-	if (mainScene != nullptr)
 	{
-		HSceneObject root = mainScene->instantiate();
-		HSceneObject oldRoot = gSceneManager().getRootNode();
+		HPrefab mainScene = static_resource_cast<Prefab>(gResources().loadFromUUID(gameSettings->mainSceneUUID, false, true, false));
+		if (mainScene != nullptr)
+		{
+			HSceneObject root = mainScene->instantiate();
+			HSceneObject oldRoot = gSceneManager().getRootNode();
 
-		gSceneManager()._setRootNode(root);
-		oldRoot->destroy();
+			gSceneManager()._setRootNode(root);
+			oldRoot->destroy();
+		}
 	}
 
 	Application::instance().runMainLoop();