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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user