Browse Source

Bugfix: Changing the material shader on a material that previously had no shader, will now properly initialize material parameters object on the core thread version of the material

BearishSun 8 years ago
parent
commit
d5b9e46858

+ 6 - 3
Source/BansheeCore/Material/BsMaterial.cpp

@@ -519,7 +519,8 @@ namespace bs
 				if (mTechniques.size() == 0) // Wasn't initialized
 					return;
 
-				setParams(oldParams);
+				if(oldParams)
+					setParams(oldParams);
 			}
 		}
 		else
@@ -789,8 +790,10 @@ namespace bs
 
 		UINT32 paramsSize = 0;
 		dataPtr = rttiReadElem(paramsSize, dataPtr);
-		if (mParams != nullptr)
-			mParams->setSyncData((UINT8*)dataPtr, paramsSize);
+		if (mParams == nullptr)
+			mParams = bs_shared_ptr_new<MaterialParams>(mShader);
+
+		mParams->setSyncData((UINT8*)dataPtr, paramsSize);
 
 		dataPtr += paramsSize;
 	}

+ 3 - 1
Source/BansheeCore/RTTI/BsMaterialRTTI.cpp

@@ -19,7 +19,9 @@ namespace bs
 		if (material->getNumTechniques() > 0)
 		{
 			SPtr<MaterialParams> matParams = any_cast<SPtr<MaterialParams>>(material->mRTTIData);
-			material->setParams(matParams);
+
+			if(matParams)
+				material->setParams(matParams);
 		}
 
 		material->mRTTIData = nullptr; // Delete temporary data