Update editor viewport rendering integration
This commit is contained in:
@@ -189,7 +189,8 @@ BuiltinForwardPipeline::CachedDescriptorSet* BuiltinForwardPipeline::GetOrCreate
|
||||
}
|
||||
}
|
||||
|
||||
const Core::uint64 materialVersion = material != nullptr ? material->GetChangeVersion() : 0;
|
||||
const Core::uint64 materialVersion =
|
||||
material != nullptr ? material->GetChangeVersion() : 1u;
|
||||
if (setLayout.usesMaterial) {
|
||||
if (!passLayout.material.IsValid() || passLayout.material.set != setIndex) {
|
||||
return nullptr;
|
||||
|
||||
@@ -25,6 +25,15 @@ namespace {
|
||||
constexpr float kForwardAmbientIntensity = 0.28f;
|
||||
constexpr float kSpotInnerAngleRatio = 0.8f;
|
||||
|
||||
struct BuiltinForwardMaterialConstants {
|
||||
Math::Vector4 baseColorFactor = Math::Vector4::One();
|
||||
Math::Vector4 alphaCutoffParams = Math::Vector4(0.5f, 0.0f, 0.0f, 0.0f);
|
||||
};
|
||||
|
||||
struct BuiltinUnlitMaterialConstants {
|
||||
Math::Vector4 baseColorFactor = Math::Vector4::One();
|
||||
};
|
||||
|
||||
Resources::ShaderKeywordSet ResolvePassKeywordSet(
|
||||
const RenderSceneData& sceneData,
|
||||
const Resources::Material* material) {
|
||||
@@ -106,6 +115,82 @@ bool UsesDynamicSurfaceDescriptorSet(const BuiltinPassSetLayoutMetadata& setLayo
|
||||
setLayout.usesMaterialBuffers;
|
||||
}
|
||||
|
||||
MaterialConstantPayloadView ResolveBuiltinForwardMaterialConstantPayload(
|
||||
const Resources::Material* material,
|
||||
BuiltinForwardMaterialConstants& outConstants,
|
||||
Resources::MaterialConstantFieldDesc (&outLayout)[2]) {
|
||||
outConstants.baseColorFactor = ResolveBuiltinBaseColorFactor(material);
|
||||
outConstants.alphaCutoffParams =
|
||||
Math::Vector4(ResolveBuiltinAlphaCutoff(material), 0.0f, 0.0f, 0.0f);
|
||||
|
||||
outLayout[0].name = "gBaseColorFactor";
|
||||
outLayout[0].type = Resources::MaterialPropertyType::Float4;
|
||||
outLayout[0].offset = 0u;
|
||||
outLayout[0].size = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
outLayout[0].alignedSize = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
|
||||
outLayout[1].name = "gAlphaCutoffParams";
|
||||
outLayout[1].type = Resources::MaterialPropertyType::Float4;
|
||||
outLayout[1].offset = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
outLayout[1].size = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
outLayout[1].alignedSize = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
|
||||
MaterialConstantLayoutView layoutView = {};
|
||||
layoutView.fields = outLayout;
|
||||
layoutView.count = 2u;
|
||||
layoutView.size = sizeof(BuiltinForwardMaterialConstants);
|
||||
return { &outConstants, sizeof(BuiltinForwardMaterialConstants), layoutView };
|
||||
}
|
||||
|
||||
MaterialConstantPayloadView ResolveBuiltinUnlitMaterialConstantPayload(
|
||||
const Resources::Material* material,
|
||||
BuiltinUnlitMaterialConstants& outConstants,
|
||||
Resources::MaterialConstantFieldDesc (&outLayout)[1]) {
|
||||
outConstants.baseColorFactor = ResolveBuiltinBaseColorFactor(material);
|
||||
|
||||
outLayout[0].name = "gBaseColorFactor";
|
||||
outLayout[0].type = Resources::MaterialPropertyType::Float4;
|
||||
outLayout[0].offset = 0u;
|
||||
outLayout[0].size = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
outLayout[0].alignedSize = static_cast<Core::uint32>(sizeof(Math::Vector4));
|
||||
|
||||
MaterialConstantLayoutView layoutView = {};
|
||||
layoutView.fields = outLayout;
|
||||
layoutView.count = 1u;
|
||||
layoutView.size = sizeof(BuiltinUnlitMaterialConstants);
|
||||
return { &outConstants, sizeof(BuiltinUnlitMaterialConstants), layoutView };
|
||||
}
|
||||
|
||||
MaterialConstantPayloadView ResolveSurfaceMaterialConstantPayload(
|
||||
const Resources::Shader* resolvedShader,
|
||||
const Resources::Material* material,
|
||||
const Resources::Shader* builtinForwardShader,
|
||||
const Resources::Shader* builtinUnlitShader,
|
||||
const Resources::Shader* builtinDepthOnlyShader,
|
||||
const Resources::Shader* builtinShadowCasterShader,
|
||||
BuiltinForwardMaterialConstants& outForwardConstants,
|
||||
Resources::MaterialConstantFieldDesc (&outForwardLayout)[2],
|
||||
BuiltinUnlitMaterialConstants& outUnlitConstants,
|
||||
Resources::MaterialConstantFieldDesc (&outUnlitLayout)[1]) {
|
||||
if (resolvedShader == builtinUnlitShader) {
|
||||
return ResolveBuiltinUnlitMaterialConstantPayload(
|
||||
material,
|
||||
outUnlitConstants,
|
||||
outUnlitLayout);
|
||||
}
|
||||
|
||||
if (resolvedShader == builtinForwardShader ||
|
||||
resolvedShader == builtinDepthOnlyShader ||
|
||||
resolvedShader == builtinShadowCasterShader) {
|
||||
return ResolveBuiltinForwardMaterialConstantPayload(
|
||||
material,
|
||||
outForwardConstants,
|
||||
outForwardLayout);
|
||||
}
|
||||
|
||||
return ResolveSchemaMaterialConstantPayload(material);
|
||||
}
|
||||
|
||||
bool TryResolveRequestedSurfacePassType(
|
||||
const DrawSettings& drawSettings,
|
||||
BuiltinMaterialPass& outPass,
|
||||
@@ -557,7 +642,22 @@ bool BuiltinForwardPipeline::DrawVisibleItem(
|
||||
return false;
|
||||
}
|
||||
|
||||
MaterialConstantPayloadView materialConstants = ResolveSchemaMaterialConstantPayload(material);
|
||||
BuiltinForwardMaterialConstants builtinForwardConstants = {};
|
||||
Resources::MaterialConstantFieldDesc builtinForwardLayout[2] = {};
|
||||
BuiltinUnlitMaterialConstants builtinUnlitConstants = {};
|
||||
Resources::MaterialConstantFieldDesc builtinUnlitLayout[1] = {};
|
||||
MaterialConstantPayloadView materialConstants =
|
||||
ResolveSurfaceMaterialConstantPayload(
|
||||
resolvedShaderPass.shader,
|
||||
material,
|
||||
m_builtinForwardShader.Get(),
|
||||
m_builtinUnlitShader.Get(),
|
||||
m_builtinDepthOnlyShader.Get(),
|
||||
m_builtinShadowCasterShader.Get(),
|
||||
builtinForwardConstants,
|
||||
builtinForwardLayout,
|
||||
builtinUnlitConstants,
|
||||
builtinUnlitLayout);
|
||||
if (passLayout->material.IsValid() && !materialConstants.IsValid()) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
|
||||
Reference in New Issue
Block a user