Unify object id rendering with render passes
This commit is contained in:
@@ -167,6 +167,27 @@ bool ExecuteScenePassRequest(
|
||||
return pass->Execute(passContext);
|
||||
}
|
||||
|
||||
bool ExecuteStandalonePass(
|
||||
RenderPass* pass,
|
||||
const RenderContext& context,
|
||||
const RenderSurface& surface,
|
||||
const RenderSceneData& sceneData) {
|
||||
if (pass == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeStandalonePass(pass, context)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const RenderPassContext passContext = {
|
||||
context,
|
||||
surface,
|
||||
sceneData
|
||||
};
|
||||
return pass->Execute(passContext);
|
||||
}
|
||||
|
||||
RenderDirectionalShadowData BuildDirectionalShadowData(
|
||||
const DirectionalShadowRenderPlan& plan,
|
||||
RHI::RHIResourceView* shadowMapView) {
|
||||
@@ -202,7 +223,7 @@ CameraRenderer::CameraRenderer(std::unique_ptr<RenderPipeline> pipeline)
|
||||
|
||||
CameraRenderer::CameraRenderer(
|
||||
std::unique_ptr<RenderPipeline> pipeline,
|
||||
std::unique_ptr<ObjectIdPass> objectIdPass,
|
||||
std::unique_ptr<RenderPass> objectIdPass,
|
||||
std::unique_ptr<RenderPass> depthOnlyPass,
|
||||
std::unique_ptr<RenderPass> shadowCasterPass)
|
||||
: m_pipelineAsset(nullptr)
|
||||
@@ -254,7 +275,7 @@ void CameraRenderer::SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset>
|
||||
ResetPipeline(CreatePipelineFromAsset(m_pipelineAsset));
|
||||
}
|
||||
|
||||
void CameraRenderer::SetObjectIdPass(std::unique_ptr<ObjectIdPass> objectIdPass) {
|
||||
void CameraRenderer::SetObjectIdPass(std::unique_ptr<RenderPass> objectIdPass) {
|
||||
if (m_objectIdPass != nullptr) {
|
||||
m_objectIdPass->Shutdown();
|
||||
}
|
||||
@@ -471,8 +492,11 @@ bool CameraRenderer::Render(
|
||||
}
|
||||
|
||||
if (request.objectId.IsRequested() &&
|
||||
(m_objectIdPass == nullptr ||
|
||||
!m_objectIdPass->Render(request.context, request.objectId.surface, sceneData))) {
|
||||
!ExecuteStandalonePass(
|
||||
m_objectIdPass.get(),
|
||||
request.context,
|
||||
request.objectId.surface,
|
||||
sceneData)) {
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user