20#ifndef RHI_COMPOSITOR_H
21#define RHI_COMPOSITOR_H
28#include <unordered_map>
97 const std::vector<COMPOSITOR_LAYER>& aLayers,
98 const float* aBackgroundColor =
nullptr,
99 const std::function<
void()>& aDrawOnTop = {} );
117 uint32_t aGroupIndex );
RHI_BindGroupHandle bindFBOTexture(RHI_FramebufferHandle aFBO, RHI_BindGroupLayoutHandle aLayout, uint32_t aGroupIndex)
RHI_PipelineHandle m_compositorPipeline
RHI_BindGroupLayoutHandle m_singleTexLayout
bool IsInitialized() const
void destroyFBOBindGroups()
RHI_COMPOSITOR(RHI_DEVICE &aDevice)
bool m_ownsSingleTexLayout
void SetCompositorPipeline(RHI_PipelineHandle aPipeline)
Set the pipeline that draws each layer as an alpha-blended fullscreen quad.
std::unordered_map< uint64_t, RHI_BindGroupHandle > m_fboBindGroups
Bind groups over FBO color textures, keyed by texture and layout handles.
RHI_BufferHandle m_quadVB
bool Initialize(RHI_BindGroupLayoutHandle aSingleTexLayout={})
Create the clear pass and fullscreen quad.
RHI_BufferHandle GetQuadVB() const
void Destroy()
Release all GPU resources.
RHI_BindGroupLayoutHandle GetSingleTexLayout() const
void InvalidateCachedBindGroups()
Drop the cached bind groups over layer FBO textures.
RHI_FramebufferHandle Composite(RHI_FramebufferHandle aAccumulationFBO, uint32_t aWidth, uint32_t aHeight, const std::vector< COMPOSITOR_LAYER > &aLayers, const float *aBackgroundColor=nullptr, const std::function< void()> &aDrawOnTop={})
Blend aLayers back-to-front into aAccumulationFBO, which is cleared to aBackgroundColor first.
void compositeLayer(const COMPOSITOR_LAYER &aLayer)
RHI_RenderPassHandle m_clearRenderPass
Creates, uses and destroys GPU resources through one graphics API backend.
RHI_HANDLE< RHI_TAG_FRAMEBUFFER > RHI_FramebufferHandle
RHI_HANDLE< RHI_TAG_BUFFER > RHI_BufferHandle
RHI_HANDLE< RHI_TAG_PIPELINE > RHI_PipelineHandle
RHI_HANDLE< RHI_TAG_BIND_GROUP > RHI_BindGroupHandle
RHI_HANDLE< RHI_TAG_BIND_GROUP_LAYOUT > RHI_BindGroupLayoutHandle
RHI_HANDLE< RHI_TAG_RENDER_PASS > RHI_RenderPassHandle
RHI_FramebufferHandle fbo
Matches the PushConstants block of the compositor shader.