Raven Engine v0.1
A modern 3D Game Engine
Loading...
Searching...
No Matches
Raven::RenderResourceRegistry Class Reference

Manages shader hot-reload subscriptions and coordinates pipeline/renderpass rebuilds. More...

#include <RenderResourceRegistry.h>

Public Member Functions

ILLUMINE_API void Shutdown ()
 Releases all subscriptions and drains the reload queue. Must be called before renderer shutdown.
ILLUMINE_API void OnResize (u32 width, u32 height)
ILLUMINE_API void RegisterFramebufferForResize (const std::string &name, Framebuffer *fb)
ILLUMINE_API void Subscribe (const Ref< Shader > &shader, Ref< Pipeline > pipeline, Ref< RenderPass > renderPass)
 Subscribes a pipeline and its dependent renderpass to a shader's reload events. If the pipeline is already subscribed, the existing entry is replaced.
ILLUMINE_API void Subscribe (const Ref< Shader > &shader, Ref< ComputePipeline > pipeline, Ref< ComputePass > renderPass)
ILLUMINE_API void Unsubscribe (Ref< Pipeline > pipeline)
 Removes all subscriptions associated with the given pipeline. Should be called from Pipeline::Release to prevent dangling entries.
ILLUMINE_API void Unsubscribe (Ref< ComputePipeline > pipeline)
ILLUMINE_API void QueueShaderReload (const Ref< Shader > &shader)
 Queues a shader for reload on the next ProcessReloadQueue call. Duplicate entries for the same shader are ignored.
ILLUMINE_API void ProcessReloadQueue ()
 Processes all queued shader reloads. Calls FlushAndWait to ensure the GPU is idle before rebuilding any resources. For each queued shader: releases its descriptor layouts, recreates it via Shader::Create, updates the ShaderLibrary, rebuilds dependent pipelines, and re-bakes dependent renderpasses.

Detailed Description

Manages shader hot-reload subscriptions and coordinates pipeline/renderpass rebuilds.

Pipelines and their dependent RenderPasses subscribe to a shader by name. When a shader reload is queued and processed, the registry rebuilds all dependent pipelines and re-bakes their RenderPasses in a GPU-safe manner via FlushAndWait.

Note
Subscribe is called automatically from VulkanRenderPass constructor.
Unsubscribe is called automatically from Pipeline::Release.
ProcessReloadQueue must be called once per frame from the main thread (BeginRender).

Member Function Documentation

◆ OnResize()

void Raven::RenderResourceRegistry::OnResize ( u32 width,
u32 height )

◆ ProcessReloadQueue()

void Raven::RenderResourceRegistry::ProcessReloadQueue ( )

Processes all queued shader reloads. Calls FlushAndWait to ensure the GPU is idle before rebuilding any resources. For each queued shader: releases its descriptor layouts, recreates it via Shader::Create, updates the ShaderLibrary, rebuilds dependent pipelines, and re-bakes dependent renderpasses.

Must be called from the main thread once per frame, before BeginFrame.

◆ QueueShaderReload()

void Raven::RenderResourceRegistry::QueueShaderReload ( const Ref< Shader > & shader)

Queues a shader for reload on the next ProcessReloadQueue call. Duplicate entries for the same shader are ignored.

Parameters
shaderThe shader to reload.

◆ RegisterFramebufferForResize()

void Raven::RenderResourceRegistry::RegisterFramebufferForResize ( const std::string & name,
Framebuffer * fb )

◆ Shutdown()

void Raven::RenderResourceRegistry::Shutdown ( )

Releases all subscriptions and drains the reload queue. Must be called before renderer shutdown.

◆ Subscribe() [1/2]

void Raven::RenderResourceRegistry::Subscribe ( const Ref< Shader > & shader,
Ref< ComputePipeline > pipeline,
Ref< ComputePass > renderPass )

◆ Subscribe() [2/2]

void Raven::RenderResourceRegistry::Subscribe ( const Ref< Shader > & shader,
Ref< Pipeline > pipeline,
Ref< RenderPass > renderPass )

Subscribes a pipeline and its dependent renderpass to a shader's reload events. If the pipeline is already subscribed, the existing entry is replaced.

Parameters
shaderThe shader this pipeline depends on.
pipelineThe pipeline to rebuild on shader reload.
renderPassThe renderpass to re-bake after pipeline rebuild. May be nullptr for compute.

◆ Unsubscribe() [1/2]

void Raven::RenderResourceRegistry::Unsubscribe ( Ref< ComputePipeline > pipeline)

◆ Unsubscribe() [2/2]

void Raven::RenderResourceRegistry::Unsubscribe ( Ref< Pipeline > pipeline)

Removes all subscriptions associated with the given pipeline. Should be called from Pipeline::Release to prevent dangling entries.

Parameters
pipelineThe pipeline to unsubscribe.

The documentation for this class was generated from the following files: