Browse Source

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 years ago
parent
commit
8d0343988b

+ 1 - 1
BansheeCore/Source/BsMaterial.cpp

@@ -1169,7 +1169,7 @@ namespace BansheeEngine
 		}
 		}
 
 
 		SPtr<ShaderCore>* shader = new (dataPtr)SPtr<ShaderCore>();
 		SPtr<ShaderCore>* shader = new (dataPtr)SPtr<ShaderCore>();
-		if (mShader != nullptr)
+		if (mShader.isLoaded(false))
 			*shader = mShader->getCore();
 			*shader = mShader->getCore();
 		else
 		else
 			*shader = nullptr;
 			*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);
 		std::shared_ptr<MaterialParams> params = any_cast<std::shared_ptr<MaterialParams>>(material->mRTTIData);
 
 
 		HShader shader = material->getShader();
 		HShader shader = material->getShader();
-		if(shader != nullptr)
+		if(shader.isLoaded(false))
 		{
 		{
 			for(auto iter = params->floatParams.begin(); iter != params->floatParams.end(); ++iter)
 			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;
 		props.mActive = false;
 
 
+		if (props.isFullScreen())
+			mSwapChain->SetFullscreenState(false, nullptr);
+
 		SAFE_RELEASE(mSwapChain);
 		SAFE_RELEASE(mSwapChain);
 		BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_SwapChain);
 		BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_SwapChain);
 
 

+ 8 - 6
Game/Source/Main.cpp

@@ -121,14 +121,16 @@ void runApplication()
 		gResources().registerResourceManifest(manifest);
 		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();
 	Application::instance().runMainLoop();