Merge remote-tracking branch 'origin/master' into linux-editor

# Conflicts:
#	Source/Engine/Core/Math/Color.cs
#	Source/Engine/Navigation/Navigation.cpp
#	Source/Engine/Platform/Win32/Win32Platform.cpp
This commit is contained in:
Wojtek Figat
2021-02-23 22:29:07 +01:00
147 changed files with 1740 additions and 1311 deletions

View File

@@ -23,17 +23,25 @@ void MaterialInstance::OnBaseSet()
_baseMaterial->OnUnloaded.Bind<MaterialInstance, &MaterialInstance::OnBaseUnloaded>(this);
_baseMaterial->ParamsChanged.Bind<MaterialInstance, &MaterialInstance::OnBaseParamsChanged>(this);
// Sync parameters with the base parameters to ensure all data is valid for rendering (constants offset and resource register)
MaterialParams& baseParams = _baseMaterial->Params;
bool validParams = Params.Count() == baseParams.Count();
for (int32 i = 0; validParams && i < Params.Count(); i++)
Params._versionHash = 0;
if (Params.Count() != baseParams.Count())
{
// Params changed
OnBaseParamsChanged();
return;
}
for (int32 i = 0; i < Params.Count(); i++)
{
MaterialParameter& param = Params[i];
MaterialParameter& baseParam = baseParams[i];
if (param.GetID() != baseParam.GetID() || param.GetParameterType() != baseParam.GetParameterType())
{
validParams = false;
break;
// Params changed
OnBaseParamsChanged();
return;
}
param._isPublic = baseParam._isPublic;
@@ -41,21 +49,14 @@ void MaterialInstance::OnBaseSet()
param._offset = baseParam._offset;
param._name = baseParam._name;
}
if (validParams)
{
Params._versionHash = baseParams._versionHash;
ParamsChanged();
}
else
{
OnBaseParamsChanged();
}
// Params are valid
Params._versionHash = baseParams._versionHash;
ParamsChanged();
}
void MaterialInstance::OnBaseUnset()
{
ScopeLock lock(_baseMaterial->Locker);
_baseMaterial->RemoveReference();
_baseMaterial->OnUnloaded.Unbind<MaterialInstance, &MaterialInstance::OnBaseUnloaded>(this);
_baseMaterial->ParamsChanged.Unbind<MaterialInstance, &MaterialInstance::OnBaseParamsChanged>(this);