Просмотр исходного кода

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 10 лет назад
Родитель
Сommit
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();