LiteFX 0.4.1.2025
Computer Graphics Engine
Loading...
Searching...
No Matches
LiteFX::Rendering::FrameBuffer< TImage > Class Template Referenceabstract

Stores the images used by a RenderPass to either read from using input attachments or write to using render targets. More...

#include <rendering.hpp>

Inherits LiteFX::Rendering::StateResource, and LiteFX::Rendering::IFrameBuffer.

Public Types

using image_type = TImage
 

Public Member Functions

 ~FrameBuffer () noexcept override=default
 
virtual const Array< SharedPtr< const image_type > > & images () const =0
 
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.
 
- Public Member Functions inherited from LiteFX::Rendering::StateResource
 ~StateResource () noexcept override
 Releases the state resource instance.
 
const Stringname () const noexcept override
 Returns the name of the resource.
Returns
The name of the resource.

 
- Public Member Functions inherited from LiteFX::Rendering::IStateResource
virtual ~IStateResource () noexcept=default
 Releases the state resource instance.
 
- Public Member Functions inherited from LiteFX::Rendering::IFrameBuffer
 ~IFrameBuffer () noexcept override
 Releases the frame buffer.
 
virtual const Size2dsize () 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 IImageoperator[] (UInt32 index) const =0
 Returns an image from the frame buffer.
 
virtual const IImageimage (UInt32 index) const =0
 Returns an image from the frame buffer.
 
virtual const IImageoperator[] (const RenderTarget &renderTarget) const =0
 Resolves a render target and returns the image mapped to it.
 
virtual const IImageimage (const RenderTarget &renderTarget) const =0
 Resolves a render target and returns the image mapped to it.
 
virtual const IImageoperator[] (StringView renderTargetName) const =0
 Resolves a render target name and returns the image mapped to it.
 
virtual const IImageimage (StringView renderTargetName) const =0
 Resolves a render target name and returns the image mapped to it.
 
virtual const IImageresolveImage (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.
 
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.
 
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.
 
- Public Member Functions inherited from LiteFX::SharedObject
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.
 

Protected Member Functions

 FrameBuffer () noexcept=default
 
 FrameBuffer (FrameBuffer &&) noexcept=default
 
 FrameBuffer (const FrameBuffer &)=default
 
FrameBufferoperator= (FrameBuffer &&) noexcept=default
 
FrameBufferoperator= (const FrameBuffer &)=default
 
- Protected Member Functions inherited from LiteFX::Rendering::StateResource
 StateResource ()
 Initializes a new state resource instance with a default name.
 
 StateResource (StringView name)
 Initializes a new state resource instance.
 
 StateResource (StateResource &&) noexcept
 
StateResourceoperator= (StateResource &&) noexcept
 
 StateResource (const StateResource &)=delete
 
StateResourceoperator= (const StateResource &)=delete
 
Stringname () noexcept
 
- Protected Member Functions inherited from LiteFX::Rendering::IStateResource
 IStateResource () noexcept=default
 
 IStateResource (const IStateResource &)=delete
 
 IStateResource (IStateResource &&) noexcept=default
 
IStateResourceoperator= (const IStateResource &)=delete
 
IStateResourceoperator= (IStateResource &&) noexcept=default
 
- Protected Member Functions inherited from LiteFX::Rendering::IFrameBuffer
 IFrameBuffer () noexcept=default
 
 IFrameBuffer (IFrameBuffer &&) noexcept=default
 
 IFrameBuffer (const IFrameBuffer &)=delete
 
IFrameBufferoperator= (IFrameBuffer &&) noexcept=default
 
IFrameBufferoperator= (const IFrameBuffer &)=delete
 
- Protected Member Functions inherited from LiteFX::SharedObject
 SharedObject () noexcept=default
 Initializes a new shared object.
 
 SharedObject (SharedObject &&) noexcept=default
 
 SharedObject (const SharedObject &)=default
 
SharedObjectoperator= (SharedObject &&) noexcept=default
 
SharedObjectoperator= (const SharedObject &)=default
 

Additional Inherited Members

- Public Attributes inherited from LiteFX::Rendering::IFrameBuffer
Event< ResizeEventArgsresized
 Invoked when the frame buffer gets resized.
 
Event< ReleasedEventArgsreleased
 Invoked when the frame buffer gets released.
 
- Static Protected Member Functions inherited from LiteFX::SharedObject
template<typename T , typename... TArgs>
static auto create (TArgs &&... args) -> SharedPtr< T >
 Generic factory method used to create instances of the shared object.
 

Detailed Description

template<typename TImage>
requires std::derived_from<TImage, IImage>
class LiteFX::Rendering::FrameBuffer< TImage >

Stores the images used by a RenderPass to either read from using input attachments or write to using render targets.

Template Parameters
TImageThe type of the frame buffer images. Must be derived from IImage.
See also
RenderTarget

Member Typedef Documentation

◆ image_type

template<typename TImage >
using LiteFX::Rendering::FrameBuffer< TImage >::image_type = TImage

Constructor & Destructor Documentation

◆ FrameBuffer() [1/3]

template<typename TImage >
LiteFX::Rendering::FrameBuffer< TImage >::FrameBuffer ( )
protecteddefaultnoexcept

◆ FrameBuffer() [2/3]

template<typename TImage >
LiteFX::Rendering::FrameBuffer< TImage >::FrameBuffer ( FrameBuffer< TImage > && )
protecteddefaultnoexcept

◆ FrameBuffer() [3/3]

template<typename TImage >
LiteFX::Rendering::FrameBuffer< TImage >::FrameBuffer ( const FrameBuffer< TImage > & )
protecteddefault

◆ ~FrameBuffer()

template<typename TImage >
LiteFX::Rendering::FrameBuffer< TImage >::~FrameBuffer ( )
overridedefaultnoexcept

Member Function Documentation

◆ addImage() [1/8]

template<typename TImage >
void LiteFX::Rendering::IFrameBuffer::addImage ( const RenderTarget & renderTarget,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage )
inline

Adds an image for a render target to the frame buffer.

Parameters
renderTargetThe render target for which to add an image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ addImage() [2/8]

template<typename TImage >
virtual void LiteFX::Rendering::IFrameBuffer::addImage ( const String & name,
const RenderTarget & renderTarget,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage )
virtual

Adds an image for a render target to the frame buffer.

Parameters
nameThe name of the image.
renderTargetThe render target for which to add an image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

Implements LiteFX::Rendering::IFrameBuffer.

Reimplemented in LiteFX::Rendering::Backends::VulkanFrameBuffer.

◆ addImage() [3/8]

template<typename TImage >
virtual void LiteFX::Rendering::IFrameBuffer::addImage ( const String & name,
Format format,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage )
virtual

Adds an image to the frame buffer.

Parameters
nameThe name of the image.
formatThe format of the image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.
Exceptions
InvalidArgumentExceptionThrown, if another image with the same name as provided in name has already been added to the frame buffer.

Implements LiteFX::Rendering::IFrameBuffer.

Reimplemented in LiteFX::Rendering::Backends::VulkanFrameBuffer.

◆ addImage() [4/8]

template<typename TImage >
void LiteFX::Rendering::IFrameBuffer::addImage ( Format format,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage )
inline

Adds an image to the frame buffer.

Parameters
formatThe format of the image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ addImage() [5/8]

template<typename TImage >
template<typename TSelf >
auto LiteFX::Rendering::IFrameBuffer::addImage ( this TSelf && self,
const RenderTarget & renderTarget,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage ) -> TSelf&&
inline

Adds an image for a render target to the frame buffer.

Parameters
renderTargetThe render target for which to add an image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ addImage() [6/8]

template<typename TImage >
template<typename TSelf >
auto LiteFX::Rendering::IFrameBuffer::addImage ( this TSelf && self,
Format format,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage ) -> TSelf&&
inline

Adds an image to the frame buffer.

Parameters
formatThe format of the image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ addImage() [7/8]

template<typename TImage >
template<typename TSelf >
auto LiteFX::Rendering::IFrameBuffer::addImage ( this TSelf && self,
StringView name,
const RenderTarget & renderTarget,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage ) -> TSelf&&
inline

Adds an image for a render target to the frame buffer.

Parameters
nameThe name of the image.
renderTargetThe render target for which to add an image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ addImage() [8/8]

template<typename TImage >
template<typename TSelf >
auto LiteFX::Rendering::IFrameBuffer::addImage ( this TSelf && self,
StringView name,
Format format,
MultiSamplingLevel samples = MultiSamplingLevel::x1,
ResourceUsage usage = ResourceUsage::FrameBufferImage ) -> TSelf&&
inline

Adds an image to the frame buffer.

Parameters
nameThe name of the image.
formatThe format of the image.
samplesThe number of samples of the image.
usageThe desired resource usage flags for the image.

◆ images()

template<typename TImage >
virtual const Array< SharedPtr< const image_type > > & LiteFX::Rendering::FrameBuffer< TImage >::images ( ) const
pure virtual

◆ operator=() [1/2]

template<typename TImage >
FrameBuffer & LiteFX::Rendering::FrameBuffer< TImage >::operator= ( const FrameBuffer< TImage > & )
protecteddefault

◆ operator=() [2/2]

template<typename TImage >
FrameBuffer & LiteFX::Rendering::FrameBuffer< TImage >::operator= ( FrameBuffer< TImage > && )
protecteddefaultnoexcept