Bladeren bron

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 jaren geleden
bovenliggende
commit
d5b9e46858
2 gewijzigde bestanden met toevoegingen van 9 en 4 verwijderingen
  1. 6 3
      Source/BansheeCore/Material/BsMaterial.cpp
  2. 3 1
      Source/BansheeCore/RTTI/BsMaterialRTTI.cpp

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

@@ -519,7 +519,8 @@ namespace bs
 				if (mTechniques.size() == 0) // Wasn't initialized
 				if (mTechniques.size() == 0) // Wasn't initialized
 					return;
 					return;
 
 
-				setParams(oldParams);
+				if(oldParams)
+					setParams(oldParams);
 			}
 			}
 		}
 		}
 		else
 		else
@@ -789,8 +790,10 @@ namespace bs
 
 
 		UINT32 paramsSize = 0;
 		UINT32 paramsSize = 0;
 		dataPtr = rttiReadElem(paramsSize, dataPtr);
 		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;
 		dataPtr += paramsSize;
 	}
 	}

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

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