feat(srp): add drawing settings override material seam
- add a managed DrawingSettings seam for scene draw authoring - let builtin forward scene draws use an override material when provided - wire DrawObjectsPass and RenderObjectsRendererFeature through the new settings
This commit is contained in:
@@ -307,8 +307,7 @@ RHI::RHIResourceView* BuiltinForwardPipeline::ResolveTextureView(
|
||||
}
|
||||
|
||||
RHI::RHIResourceView* BuiltinForwardPipeline::ResolveTextureView(
|
||||
const VisibleRenderItem& visibleItem) {
|
||||
const Resources::Material* material = ResolveMaterial(visibleItem);
|
||||
const Resources::Material* material) {
|
||||
const Resources::Texture* texture = ResolveTexture(material);
|
||||
RHI::RHIResourceView* textureView = ResolveTextureView(texture);
|
||||
return textureView != nullptr ? textureView : m_fallbackTexture2DView;
|
||||
@@ -402,7 +401,8 @@ bool BuiltinForwardPipeline::ExecuteForwardTransparentPass(
|
||||
|
||||
bool BuiltinForwardPipeline::DrawVisibleItem(
|
||||
const FrameExecutionContext& executionContext,
|
||||
const VisibleRenderItem& visibleItem) {
|
||||
const VisibleRenderItem& visibleItem,
|
||||
const Resources::Material* material) {
|
||||
const RenderContext& context = executionContext.renderContext;
|
||||
const RenderSceneData& sceneData = executionContext.sceneData;
|
||||
|
||||
@@ -435,7 +435,6 @@ bool BuiltinForwardPipeline::DrawVisibleItem(
|
||||
shadowReceiverConstants.shadowSampling = sceneData.lighting.mainDirectionalShadow.sampling;
|
||||
}
|
||||
|
||||
const Resources::Material* material = ResolveMaterial(visibleItem);
|
||||
const ResolvedShaderPass resolvedShaderPass = ResolveSurfaceShaderPass(sceneData, material);
|
||||
if (resolvedShaderPass.shader == nullptr || resolvedShaderPass.pass == nullptr) {
|
||||
return false;
|
||||
@@ -452,7 +451,7 @@ bool BuiltinForwardPipeline::DrawVisibleItem(
|
||||
return false;
|
||||
}
|
||||
|
||||
RHI::RHIResourceView* baseColorTextureView = ResolveTextureView(visibleItem);
|
||||
RHI::RHIResourceView* baseColorTextureView = ResolveTextureView(material);
|
||||
if (passLayout->baseColorTexture.IsValid() && baseColorTextureView == nullptr) {
|
||||
return false;
|
||||
}
|
||||
@@ -585,7 +584,10 @@ bool BuiltinForwardPipeline::DrawVisibleItems(
|
||||
return;
|
||||
}
|
||||
|
||||
const Resources::Material* material = ResolveMaterial(visibleItem);
|
||||
const Resources::Material* material =
|
||||
drawSettings.HasOverrideMaterial()
|
||||
? drawSettings.overrideMaterial.Get()
|
||||
: ResolveMaterial(visibleItem);
|
||||
BuiltinMaterialPass pass = BuiltinMaterialPass::ForwardLit;
|
||||
if (!TryResolveSurfacePassType(material, pass)) {
|
||||
return;
|
||||
@@ -601,7 +603,7 @@ bool BuiltinForwardPipeline::DrawVisibleItems(
|
||||
currentPipelineState = pipelineState;
|
||||
}
|
||||
|
||||
if (!DrawVisibleItem(executionContext, visibleItem)) {
|
||||
if (!DrawVisibleItem(executionContext, visibleItem, material)) {
|
||||
drawFailed = true;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user