feat(srp): add shader pass selection for scene draws

- let DrawingSettings carry an optional shaderPassName across managed and native scene draw APIs
- allow RenderObjectsRendererFeature to author explicit ForwardLit or Unlit scene draws
- exercise the new scene draw pass selection seam in the project render pipeline probe
This commit is contained in:
2026-04-20 22:58:08 +08:00
parent 0319680954
commit cd6f9aa4cf
9 changed files with 134 additions and 17 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Rendering/Execution/ScenePhase.h>
#include <XCEngine/Rendering/FrameData/CullingResults.h>
#include <XCEngine/Resources/Material/Material.h>
@@ -12,10 +13,15 @@ struct DrawSettings {
ScenePhase scenePhase = ScenePhase::Opaque;
RendererListDesc rendererListDesc = {};
Resources::ResourceHandle<Resources::Material> overrideMaterial = {};
Containers::String shaderPassName = {};
bool HasOverrideMaterial() const {
return overrideMaterial.IsValid();
}
bool HasShaderPassName() const {
return !shaderPassName.Empty();
}
};
} // namespace Rendering

View File

@@ -297,10 +297,12 @@ private:
void DestroyPipelineResources();
static bool TryResolveSurfacePassType(
const Resources::Material* material,
const BuiltinMaterialPass* preferredPass,
BuiltinMaterialPass& outPass);
ResolvedShaderPass ResolveSurfaceShaderPass(
const RenderSceneData& sceneData,
const Resources::Material* material) const;
const Resources::Material* material,
const BuiltinMaterialPass* preferredPass) const;
PassResourceLayout* GetOrCreatePassResourceLayout(
const RenderContext& context,
const ResolvedShaderPass& resolvedShaderPass);
@@ -308,7 +310,8 @@ private:
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData,
const Resources::Material* material);
const Resources::Material* material,
const BuiltinMaterialPass* preferredPass);
RHI::RHIPipelineState* GetOrCreateSkyboxPipelineState(
const RenderContext& context,
const RenderSurface& surface);
@@ -364,7 +367,8 @@ private:
bool DrawVisibleItem(
const FrameExecutionContext& executionContext,
const VisibleRenderItem& visibleItem,
const Resources::Material* material);
const Resources::Material* material,
const BuiltinMaterialPass* preferredPass);
bool EnsureSkyboxResources(const RenderContext& context);
bool CreateSkyboxResources(const RenderContext& context);
void DestroySkyboxResources();