LiteFX 0.4.1.2025
Computer Graphics Engine
|
The interface for a frame buffer. More...
#include <rendering_api.hpp>
Inherits LiteFX::Rendering::IStateResource, and LiteFX::SharedObject.
Inherited by LiteFX::Rendering::FrameBuffer< IDirectX12Image >, LiteFX::Rendering::FrameBuffer< IVulkanImage >, and LiteFX::Rendering::FrameBuffer< TImage >.
Classes | |
struct | ReleasedEventArgs |
Event arguments that are published to subscribers when a frame buffer gets released. More... | |
struct | ResizeEventArgs |
Event arguments that are published to subscribers when a frame buffer gets resized. More... | |
Public Member Functions | |
~IFrameBuffer () noexcept override | |
Releases the frame buffer. | |
virtual const Size2d & | size () const noexcept=0 |
Returns the current size of the frame buffer. | |
virtual size_t | getWidth () const noexcept=0 |
Returns the current width of the frame buffer. | |
virtual size_t | getHeight () const noexcept=0 |
Returns the current height of the frame buffer. | |
virtual void | mapRenderTarget (const RenderTarget &renderTarget, UInt32 index)=0 |
Maps a render target to a frame buffer image. | |
virtual void | mapRenderTarget (const RenderTarget &renderTarget, StringView imageName)=0 |
Maps a render target to a frame buffer image. | |
void | mapRenderTarget (const RenderTarget &renderTarget) |
Maps a render target to a frame buffer image using the render targets name to look up the image. | |
void | mapRenderTargets (Span< const RenderTarget > renderTargets) |
Maps a set of render targets to the frame buffer images, using the names of the render targets to look up the images. | |
virtual void | unmapRenderTarget (const RenderTarget &renderTarget) noexcept=0 |
Removes a mapping between a render target and an image in the frame buffer. | |
Enumerable< const IImage & > | images () const |
Returns all images contained by the frame buffer. | |
virtual const IImage & | operator[] (UInt32 index) const =0 |
Returns an image from the frame buffer. | |
virtual const IImage & | image (UInt32 index) const =0 |
Returns an image from the frame buffer. | |
virtual const IImage & | operator[] (const RenderTarget &renderTarget) const =0 |
Resolves a render target and returns the image mapped to it. | |
virtual const IImage & | image (const RenderTarget &renderTarget) const =0 |
Resolves a render target and returns the image mapped to it. | |
virtual const IImage & | operator[] (StringView renderTargetName) const =0 |
Resolves a render target name and returns the image mapped to it. | |
virtual const IImage & | image (StringView renderTargetName) const =0 |
Resolves a render target name and returns the image mapped to it. | |
virtual const IImage & | resolveImage (UInt64 hash) const =0 |
Resolves a render target name hash and returns the image mapped to it. | |
template<typename TSelf > | |
auto | addImage (this TSelf &&self, Format format, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf && |
Adds an image to the frame buffer. | |
void | addImage (Format format, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) |
Adds an image to the frame buffer. | |
template<typename TSelf > | |
auto | addImage (this TSelf &&self, StringView name, Format format, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf && |
Adds an image to the frame buffer. | |
virtual void | addImage (const String &name, Format format, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage)=0 |
Adds an image to the frame buffer. | |
template<typename TSelf > | |
auto | addImage (this TSelf &&self, const RenderTarget &renderTarget, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf && |
Adds an image for a render target to the frame buffer. | |
void | addImage (const RenderTarget &renderTarget, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) |
Adds an image for a render target to the frame buffer. | |
template<typename TSelf > | |
auto | addImage (this TSelf &&self, StringView name, const RenderTarget &renderTarget, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf && |
Adds an image for a render target to the frame buffer. | |
virtual void | addImage (const String &name, const RenderTarget &renderTarget, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage)=0 |
Adds an image for a render target to the frame buffer. | |
template<typename TSelf > | |
auto | addImages (this TSelf &&self, Span< const RenderTarget > renderTargets, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf && |
Adds multiple images for a set of render targets to the frame buffer. | |
virtual void | resize (const Size2d &renderArea)=0 |
Causes the frame buffer to be invalidated and recreated with a new size. | |
![]() | |
virtual | ~IStateResource () noexcept=default |
Releases the state resource instance. | |
virtual const String & | name () const noexcept=0 |
Returns the name of the resource. | |
![]() | |
virtual | ~SharedObject () noexcept=default |
Destroys the shared object. | |
template<typename TSelf > | |
auto | shared_from_this (this TSelf &&self) noexcept |
Returns a shared pointer to the current object instance. | |
template<typename TSelf > | |
auto | weak_from_this (this TSelf &&self) noexcept -> WeakPtr< std::remove_reference_t< TSelf > > |
Returns a weak pointer to the current object instance. | |
Public Attributes | |
Event< ResizeEventArgs > | resized |
Invoked when the frame buffer gets resized. | |
Event< ReleasedEventArgs > | released |
Invoked when the frame buffer gets released. | |
Protected Member Functions | |
IFrameBuffer () noexcept=default | |
IFrameBuffer (IFrameBuffer &&) noexcept=default | |
IFrameBuffer (const IFrameBuffer &)=delete | |
IFrameBuffer & | operator= (IFrameBuffer &&) noexcept=default |
IFrameBuffer & | operator= (const IFrameBuffer &)=delete |
![]() | |
IStateResource () noexcept=default | |
IStateResource (const IStateResource &)=delete | |
IStateResource (IStateResource &&) noexcept=default | |
IStateResource & | operator= (const IStateResource &)=delete |
IStateResource & | operator= (IStateResource &&) noexcept=default |
![]() | |
SharedObject () noexcept=default | |
Initializes a new shared object. | |
SharedObject (SharedObject &&) noexcept=default | |
SharedObject (const SharedObject &)=default | |
SharedObject & | operator= (SharedObject &&) noexcept=default |
SharedObject & | operator= (const SharedObject &)=default |
Additional Inherited Members | |
![]() | |
template<typename T , typename... TArgs> | |
static auto | create (TArgs &&... args) -> SharedPtr< T > |
Generic factory method used to create instances of the shared object. | |
The interface for a frame buffer.
A frame buffer is a set of images of equal size, that are used by render targets and/or input attachments in a IRenderPass. When creating a new frame buffer, it is empty by default and needs images to be added into it. When beginning a render pass during rendering, a frame buffer instance needs to be passed to it. The render pass then tries to obtain an image for each render target from the frame buffer. It does this by resolving it's render targets (IRenderPass::renderTargets). A render target stores a unique identifier (IRenderTarget::identifier), that is used to obtain the image. Before this resolution process can be successful, the render targets must first be mapped to the images in the frame buffer by calling IFrameBuffer::mapRenderTarget. Calling this method multiple times will overwrite the mapping. It is also possible to remove a render target mapping by calling IFrameBuffer::unmapRenderTarget. This will result in future attempts to resolve this render target using the frame buffer instance to fail.
|
protecteddefaultnoexcept |
|
protecteddefaultnoexcept |
|
protecteddelete |
|
inlineoverridenoexcept |
Releases the frame buffer.
|
inline |
Adds an image for a render target to the frame buffer.
renderTarget | The render target for which to add an image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
pure virtual |
Adds an image for a render target to the frame buffer.
name | The name of the image. |
renderTarget | The render target for which to add an image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, LiteFX::Rendering::Backends::VulkanFrameBuffer, LiteFX::Rendering::FrameBuffer< TImage >, LiteFX::Rendering::FrameBuffer< IDirectX12Image >, and LiteFX::Rendering::FrameBuffer< IVulkanImage >.
|
pure virtual |
Adds an image to the frame buffer.
name | The name of the image. |
format | The format of the image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
InvalidArgumentException | Thrown, if another image with the same name as provided in name has already been added to the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, LiteFX::Rendering::Backends::VulkanFrameBuffer, LiteFX::Rendering::FrameBuffer< TImage >, LiteFX::Rendering::FrameBuffer< IDirectX12Image >, and LiteFX::Rendering::FrameBuffer< IVulkanImage >.
|
inline |
Adds an image to the frame buffer.
format | The format of the image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
inline |
Adds an image for a render target to the frame buffer.
renderTarget | The render target for which to add an image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
inline |
Adds an image to the frame buffer.
format | The format of the image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
inline |
Adds an image for a render target to the frame buffer.
name | The name of the image. |
renderTarget | The render target for which to add an image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
inline |
Adds an image to the frame buffer.
name | The name of the image. |
format | The format of the image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
inline |
Adds multiple images for a set of render targets to the frame buffer.
Note that the names of the images are built from the render target names.
renderTargets | The render targets for which to add an image. |
samples | The number of samples of the image. |
usage | The desired resource usage flags for the image. |
|
pure virtualnoexcept |
Returns the current height of the frame buffer.
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtualnoexcept |
Returns the current width of the frame buffer.
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Resolves a render target and returns the image mapped to it.
renderTarget | The render target to resolve. |
InvalidArgumentException | Thrown, if renderTarget is not mapped to an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Resolves a render target name and returns the image mapped to it.
renderTargetName | The render target name to resolve. |
InvalidArgumentException | Thrown, if renderTargetName is not mapped to an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
Returns an image from the frame buffer.
index | The index of the image. |
ArgumentOutOfRangeException | Thrown, if the index does not address an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
inline |
Returns all images contained by the frame buffer.
|
inline |
Maps a render target to a frame buffer image using the render targets name to look up the image.
When calling IRenderPass::begin, passing a frame buffer, the render pass attempts to resolve all render target images. In order for this resolution to be successful, a mapping first needs to be established between the render target and the image. This method establishes this mapping.
Calling this method multiple times will overwrite the mapped index.
renderTarget | The render target to map the image to. |
InvalidArgumentException | Thrown, if the frame buffer does not contain an image with the same name as the render target. |
|
pure virtual |
Maps a render target to a frame buffer image.
When calling IRenderPass::begin, passing a frame buffer, the render pass attempts to resolve all render target images. In order for this resolution to be successful, a mapping first needs to be established between the render target and the image. This method establishes this mapping.
Calling this method multiple times will overwrite the mapped index.
renderTarget | The render target to map the image to. |
imageName | The name of the image the render target maps to. |
InvalidArgumentException | Thrown, if the frame buffer does not contain an image with the name specified in imageName . |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Maps a render target to a frame buffer image.
When calling IRenderPass::begin, passing a frame buffer, the render pass attempts to resolve all render target images. In order for this resolution to be successful, a mapping first needs to be established between the render target and the image. This method establishes this mapping.
Calling this method multiple times will overwrite the mapped index.
renderTarget | The render target to map the image to. |
index | The index of the image to map to the render target. |
ArgumentOutOfRangeException | Thrown, if index does not address an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
inline |
Maps a set of render targets to the frame buffer images, using the names of the render targets to look up the images.
renderTargets | The render targets to map to the frame buffer. |
InvalidArgumentException | Thrown, if the frame buffer cannot map the name of one or more render targets to images. |
|
protecteddelete |
|
protecteddefaultnoexcept |
|
pure virtual |
Resolves a render target and returns the image mapped to it.
renderTarget | The render target to resolve. |
InvalidArgumentException | Thrown, if renderTarget is not mapped to an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Resolves a render target name and returns the image mapped to it.
renderTargetName | The render target name to resolve. |
InvalidArgumentException | Thrown, if renderTargetName is not mapped to an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Returns an image from the frame buffer.
index | The index of the image. |
ArgumentOutOfRangeException | Thrown, if the index does not address an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Causes the frame buffer to be invalidated and recreated with a new size.
renderArea | The new dimensions of the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtual |
Resolves a render target name hash and returns the image mapped to it.
hash | The render target name hash to resolve. |
InvalidArgumentException | Thrown, if hash is not mapped to an image in the frame buffer. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtualnoexcept |
Returns the current size of the frame buffer.
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
pure virtualnoexcept |
Removes a mapping between a render target and an image in the frame buffer.
If no image in the frame buffer is currently mapped to renderTarget , calling this method will have no effect.
renderTarget | The render target to remove the mapping for. |
Implemented in LiteFX::Rendering::Backends::DirectX12FrameBuffer, and LiteFX::Rendering::Backends::VulkanFrameBuffer.
|
mutable |
Invoked when the frame buffer gets released.
Note that it is no longer valid to access the frame buffer when receiving this event. The only thing that can be assumed to still be valid is the pointer to the frame buffer. The intent of this event is to release any resources that depend on the frame buffer instance. Internally, render passes and pipelines use this event to release cached frame buffer states they hold, such as descriptor sets for input attachment bindings or command buffers associated with the frame buffer.
|
mutable |
Invoked when the frame buffer gets resized.