Explorar o 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 %!s(int64=10) %!d(string=hai) anos
pai
achega
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();