Composition manager. More...
#include <kanzi/core.ui/graphics2d/composition_manager.hpp>
Classes | |
struct | LRUTracker |
Least Recently Used wrapper for different resource types. More... | |
class | Request |
Composition request class. More... | |
struct | ReuseParameters |
Reuse and pruning parameters for unused composition targets. More... | |
class | Target |
Composition target. More... | |
Public Types | |
using | AvailableRenderbufferContainer = vector< LRUTracker< RenderbufferSharedPtr > > |
Storage type for available renderbuffers. More... | |
using | AvailableTextureContainer = vector< LRUTracker< TextureSharedPtr > > |
Storage type for available textures. More... | |
using | AvailableTextureSpan = span< const LRUTracker< TextureSharedPtr > > |
Span type for available textures. More... | |
using | UsedTextureSpan = span< const TextureSharedPtr > |
Span type for used textures. More... | |
Public Member Functions | |
virtual Target | acquireTemporaryCompositionTarget (const Request &compositionReq) |
Request a composition target. More... | |
TextureSharedPtr | acquireTemporaryCompositionTarget (unsigned int width, unsigned int height, GraphicsFormat colorFormat, GraphicsFormat depthStencilFormat) |
Request a composition target. More... | |
TextureSharedPtr | acquireTemporaryCompositionTarget (unsigned int width, unsigned int height, bool alpha, bool depth, bool stencil) |
Request a composition target. More... | |
void | clear () |
Remove all allocated temporary composition targets. More... | |
bool | colorRenderbufferMatches (const Renderbuffer &renderbuffer, const Request &compositionReq) const |
Tell if given color render buffer matches composition requirements. More... | |
bool | colorTextureMatches (const Texture &texture, const Request &compositionReq) const |
Tell if given color texture matches composition requirements. More... | |
CompositionManager (ResourceManager *resourceManager) | |
Constructor. More... | |
bool | compositionTargetMatches (const Target &target, const Request &compositionReq, float downScaleLimit) const |
Checks if a given composition target is an acceptable match for given requirements. More... | |
bool | compositionTargetMatches (const Target &target, const Request &compositionReq) const |
Checks if a given composition target texture is an acceptable match for given requirements. More... | |
bool | compositionTargetMatches (TextureSharedPtr texture, unsigned int width, unsigned int height, GraphicsFormat colorFormat, GraphicsFormat depthStencilFormat) const |
Checks if a given composition target texture is an acceptable match for given requirements. More... | |
bool | compositionTargetMatches (TextureSharedPtr texture, unsigned int width, unsigned int height, bool alpha, bool depth, bool stencil, float downScaleLimit) const |
Checks if a given composition target texture is an acceptable match for given requirements. More... | |
bool | compositionTargetMatches (TextureSharedPtr texture, unsigned int width, unsigned int height, bool alpha, bool depth, bool stencil) const |
Checks if a given composition target texture is an acceptable match for given requirements. More... | |
RenderbufferSharedPtr | createPersistentColorRenderbuffer (const CompositionManager::Request &compositionReq) |
Create a persistent color renderbuffer. More... | |
virtual Target | createPersistentCompositionTarget (const Request &compositionReq) |
Create a persistent composition target. More... | |
TextureSharedPtr | createPersistentCompositionTarget (unsigned int width, unsigned int height, GraphicsFormat colorFormat, GraphicsFormat depthStencilFormat, Sampler::AddressingMode addressingMode) |
Create a persistent composition target. More... | |
TextureSharedPtr | createPersistentCompositionTarget (unsigned int width, unsigned int height, bool alpha, bool depth, bool stencil) |
Create a persistent composition target. More... | |
virtual RenderbufferSharedPtr | createPersistentDepthStencilRenderbuffer (const CompositionManager::Request &compositionReq) |
Creates a persistent depth and/or stencil renderbuffer. More... | |
RenderbufferSharedPtr | createPersistentDepthStencilRenderbuffer (unsigned int width, unsigned int height, GraphicsFormat depthStencilFormat, unsigned int samples) |
Creates a persistent depth and/or stencil renderbuffer. More... | |
RenderbufferSharedPtr | createPersistentDepthStencilRenderbuffer (unsigned int width, unsigned int height, bool depth, bool stencil, unsigned int samples) |
Creates a persistent depth and/or stencil renderbuffer. More... | |
TextureSharedPtr | createPersistentDepthTexture (const CompositionManager::Request &compositionReq) |
Create a persistent depth texture. More... | |
TextureSharedPtr | createPersistentTexture (const CompositionManager::Request &compositionReq) |
Create a persistent color texture. More... | |
bool | depthTextureMatches (const Texture &texture, const Request &compositionReq) const |
Tell if given depth texture matches composition requirements. More... | |
AvailableTextureSpan | getAvailableTextures () const |
Gets a span over the available textures. More... | |
GraphicsFormat | getColorFormat (bool alpha) const |
Gets color texture format format depending on alpha requirement. More... | |
GraphicsFormat | getDepthRenderbufferFormat () const |
Gets depth renderbuffer format. More... | |
GraphicsFormat | getDepthStencilFormat (bool depth, bool stencil) const |
Gets depth/stencil renderbuffer format depending on requirements. More... | |
GraphicsFormat | getDepthStencilRenderbufferFormat () const |
Gets depth + stencil format. More... | |
GraphicsFormat | getDepthTextureFormat () const |
Gets format for depth textures. More... | |
ReuseParameters | getReuseParameters () const |
Gets the reuse and pruning parameters for unused composition targets. More... | |
GraphicsFormat | getStencilRenderbufferFormat () const |
Gets stencil renderbuffer format. More... | |
void | getUnusedTargetCounts (size_t &textures, size_t &renderBuffers, size_t &depthTextures) |
Gets the numbers of unused composition targets for statistics and test purposes. More... | |
UsedTextureSpan | getUsedTextures () const |
Gets a span over the textures that are in use. More... | |
void | initialize (Renderer &renderer) |
Initialize composition manager. More... | |
void | pruneUnusedTargets () |
Prunes unused composition targets from free lists. More... | |
virtual void | releaseTemporaryCompositionTarget (const Target &target) |
Release an earlier composition target. More... | |
void | setReuseParameters (const ReuseParameters &reuseParameters) |
Sets the reuse and pruning parameters for unused composition targets. More... | |
virtual | ~CompositionManager ()=default |
Destructor. More... | |
Protected Member Functions | |
Target | createTemporaryCompositionTarget (const CompositionManager::Request &compositionReq, TextureSharedPtr texture, RenderbufferSharedPtr colorRenderbuffer, TextureSharedPtr depthTexture) |
Create a temporary composition target. More... | |
RenderbufferSharedPtr | findClosestColorRenderbuffer (const CompositionManager::Request &compositionReq) |
Finds the renderbuffer, which most closely matches a given composition requirement, and marks it used. More... | |
TextureSharedPtr | findClosestDepthTexture (const CompositionManager::Request &compositionReq) |
Finds the depth texture, which most closely matches a given composition requirement, and marks it used. More... | |
TextureSharedPtr | findClosestTexture (const CompositionManager::Request &compositionReq) |
Finds the color texture, which most closely matches a given composition requirement, and marks it used. More... | |
unsigned int | getColorRenderbufferMatchLevel (const Renderbuffer &renderbuffer, const Request &compositionReq) const |
Get color renderbuffer match level for given requirements. More... | |
unsigned int | getDepthTextureMatchLevel (const Texture &texture, const Request &compositionReq) const |
Get depth texture match level for given requirements. More... | |
unsigned int | getTextureMatchLevel (const Texture &texture, const Request &compositionReq) const |
Get color texture match level for given requirements. More... | |
void | markColorRenderbufferUnused (RenderbufferSharedPtr colorRenderbuffer) |
Mark given color renderbuffer as available. More... | |
void | markDepthTextureUnused (TextureSharedPtr depthTexture) |
Mark given depth texture as available. More... | |
void | markTextureUnused (TextureSharedPtr texture) |
Mark given color texture as available. More... | |
Composition manager.
Used for storing and managing composition targets and keeping track of their use. The rationale is to minimize memory used by composition targets.
using kanzi::CompositionManager::AvailableRenderbufferContainer = vector<LRUTracker<RenderbufferSharedPtr> > |
Storage type for available renderbuffers.
using kanzi::CompositionManager::AvailableTextureContainer = vector<LRUTracker<TextureSharedPtr> > |
Storage type for available textures.
using kanzi::CompositionManager::AvailableTextureSpan = span<const LRUTracker<TextureSharedPtr> > |
Span type for available textures.
using kanzi::CompositionManager::UsedTextureSpan = span<const TextureSharedPtr> |
Span type for used textures.
|
explicit |
Constructor.
resourceManager | Resource manager owning this composition manager. |
|
virtualdefault |
Destructor.
void kanzi::CompositionManager::initialize | ( | Renderer & | renderer | ) |
void kanzi::CompositionManager::clear | ( | ) |
Remove all allocated temporary composition targets.
void kanzi::CompositionManager::pruneUnusedTargets | ( | ) |
Prunes unused composition targets from free lists.
TextureSharedPtr kanzi::CompositionManager::acquireTemporaryCompositionTarget | ( | unsigned int | width, |
unsigned int | height, | ||
GraphicsFormat | colorFormat, | ||
GraphicsFormat | depthStencilFormat | ||
) |
Request a composition target.
Only the color texture element is returned.
width | Requested width. |
height | Requested height. |
colorFormat | Color buffer format. |
depthStencilFormat | Depth and/or stencil buffer format. |
|
inline |
Request a composition target.
Only the color texture element is returned.
width | Requested width. |
height | Requested height. |
alpha | Is alpha channel requested? |
depth | Is depth buffer requested? |
stencil | Is stencil buffer requested? |
|
virtual |
Release an earlier composition target.
This, released composition target may be re-used by successive requests.
target | Target to release. |
|
virtual |
Create a persistent composition target.
Caller has ownership of all the components of this composition target, it is not stored within the composition manager.
compositionReq | Request details. |
TextureSharedPtr kanzi::CompositionManager::createPersistentCompositionTarget | ( | unsigned int | width, |
unsigned int | height, | ||
GraphicsFormat | colorFormat, | ||
GraphicsFormat | depthStencilFormat, | ||
Sampler::AddressingMode | addressingMode | ||
) |
Create a persistent composition target.
Only the color texture element is returned. Caller has ownership of this composition target, it is not stored within the composition manager.
width | Requested width. |
height | Requested height. |
colorFormat | Color buffer format. |
depthStencilFormat | Depth and/or stencil buffer format. |
addressingMode | Addressing mode (wrap/clamp/etc.). |
|
inline |
Create a persistent composition target.
Only the color texture element is returned. Caller has ownership of this composition target, it is not stored within the composition manager. Determines color, depth and stencil formats from on/off boolean values.
width | Requested width. |
height | Requested height. |
alpha | Alpha channel requirement. |
depth | Depth buffer requirement. |
stencil | Stencil buffer requirement. |
TextureSharedPtr kanzi::CompositionManager::createPersistentTexture | ( | const CompositionManager::Request & | compositionReq | ) |
Create a persistent color texture.
Note that the color format of this texture may be GraphicsFormatNone.
compositionReq | Request details. |
RenderbufferSharedPtr kanzi::CompositionManager::createPersistentColorRenderbuffer | ( | const CompositionManager::Request & | compositionReq | ) |
Create a persistent color renderbuffer.
compositionReq | Request details. |
|
virtual |
Creates a persistent depth and/or stencil renderbuffer.
compositionReq | Request details. |
RenderbufferSharedPtr kanzi::CompositionManager::createPersistentDepthStencilRenderbuffer | ( | unsigned int | width, |
unsigned int | height, | ||
GraphicsFormat | depthStencilFormat, | ||
unsigned int | samples | ||
) |
Creates a persistent depth and/or stencil renderbuffer.
width | The width of the renderbuffer. |
height | The height of the renderbuffer. |
depthStencilFormat | Depth or stencil format. |
samples | Number of samples. |
RenderbufferSharedPtr kanzi::CompositionManager::createPersistentDepthStencilRenderbuffer | ( | unsigned int | width, |
unsigned int | height, | ||
bool | depth, | ||
bool | stencil, | ||
unsigned int | samples | ||
) |
Creates a persistent depth and/or stencil renderbuffer.
width | The width of the renderbuffer. |
height | The height of the renderbuffer. |
depth | If depth is required true, otherwise false. |
stencil | If stencil is required true, otherwise false. |
samples | Number of samples. |
TextureSharedPtr kanzi::CompositionManager::createPersistentDepthTexture | ( | const CompositionManager::Request & | compositionReq | ) |
Create a persistent depth texture.
compositionReq | Request details. |
bool kanzi::CompositionManager::compositionTargetMatches | ( | const Target & | target, |
const Request & | compositionReq, | ||
float | downScaleLimit | ||
) | const |
Checks if a given composition target is an acceptable match for given requirements.
target | Composition target to test. |
compositionReq | Request details. |
downScaleLimit | Limit for matching against smaller composition targets. |
|
inline |
Checks if a given composition target texture is an acceptable match for given requirements.
target | Composition target to test. |
compositionReq | Request details. |
|
inline |
Checks if a given composition target texture is an acceptable match for given requirements.
Tolerance for how much smaller composition targets are accepted is determined automatically.
texture | Composition target texture to test. |
width | Requested width. |
height | Requested height. |
colorFormat | Color buffer format. |
depthStencilFormat | Depth/stencil buffer format. |
|
inline |
Checks if a given composition target texture is an acceptable match for given requirements.
Determines color, depth and stencil formats from on/off boolean values.
texture | Composition target texture to test. |
width | Requested width. |
height | Requested height. |
alpha | Alpha channel requirement. |
depth | Depth buffer requirement. |
stencil | Stencil buffer requirement. |
downScaleLimit | Limit for matching against smaller composition targets. |
|
inline |
Checks if a given composition target texture is an acceptable match for given requirements.
Determines color, depth and stencil formats from on/off boolean values. Tolerance for how much smaller composition targets are accepted is determined automatically.
texture | Composition target texture to test. |
width | Requested width. |
height | Requested height. |
alpha | Alpha channel requirement. |
depth | Depth buffer requirement. |
stencil | Stencil buffer requirement. |
|
inline |
Tell if given color render buffer matches composition requirements.
renderbuffer | Renderbuffer to test. |
compositionReq | Request details. |
|
inline |
Gets color texture format format depending on alpha requirement.
alpha | Is alpha required? |
|
inline |
Gets format for depth textures.
|
inline |
Gets depth/stencil renderbuffer format depending on requirements.
depth | Is depth required? |
stencil | Is stencil required? |
|
inline |
Gets depth renderbuffer format.
|
inline |
Gets depth + stencil format.
|
inline |
Gets stencil renderbuffer format.
|
inline |
Gets a span over the available textures.
Do not call this function directly. Kanzi uses this function for internal verification.
|
inline |
Gets a span over the textures that are in use.
Do not call this function directly. Kanzi uses this function for internal verification.
|
inline |
Gets the numbers of unused composition targets for statistics and test purposes.
textures | Number of available color textures. |
renderBuffers | Number of available color renderbuffers. |
depthTextures | Number of available depth textures. |
|
inline |
Gets the reuse and pruning parameters for unused composition targets.
|
inline |
Sets the reuse and pruning parameters for unused composition targets.
reuseParameters | The struct that contains the reuse and pruning parameters. |
|
protected |
Create a temporary composition target.
Called internally from within acquireTemporaryCompositionTarget() if suitable existing elements are not found. Adds the components of the temporary composition target to the arrays of resources in use.
compositionReq | Request details. |
texture | Existing main texture most closely matching the requirements. |
colorRenderbuffer | Existing color renderbuffer most closely matching the requirements. |
depthTexture | Existing depth texture most closely matching the requirements. |
|
protected |
Get color renderbuffer match level for given requirements.
renderbuffer | Renderbuffer to test. |
compositionReq | Request details. |
|
protected |
Finds the color texture, which most closely matches a given composition requirement, and marks it used.
compositionReq | Request details. |
|
protected |
Finds the renderbuffer, which most closely matches a given composition requirement, and marks it used.
compositionReq | Request details. |
|
protected |
Finds the depth texture, which most closely matches a given composition requirement, and marks it used.
compositionReq | Request details. |
|
protected |
Mark given color texture as available.
The texture must exist in used color textures.
texture | Texture to mark as used. |
|
protected |
Mark given color renderbuffer as available.
The renderbuffer must exist in used color renderbuffers.
colorRenderbuffer | Renderbuffer to mark as used. |
|
protected |
Mark given depth texture as available.
The texture must exist in used depth textures.
depthTexture | Texture to mark as used. |