#include <DynamicTextureArray.hpp>
Public Member Functions | |
| DynamicTextureArray (IRenderDevice *pDevice, const DynamicTextureArrayCreateInfo &CreateInfo) | |
| Initializes the dynamic texture array. | |
| ITexture * | Resize (IRenderDevice *pDevice, IDeviceContext *pContext, Uint32 NewArraySize, bool DiscardContent=false) |
| Resizes the texture array to the specified number of slices. | |
| ITexture * | Update (IRenderDevice *pDevice, IDeviceContext *pContext) |
| Updates the internal texture object. | |
| ITexture * | GetTexture () const |
| Returns a pointer to the texture object. | |
| ITextureView * | GetTextureSRV (TEXTURE_FORMAT ViewFormat) const |
| Returns a shader resource view of the internal texture in the specified format. | |
| bool | PendingUpdate () const |
| TextureDesc | GetDesc () const |
| Uint32 | GetArraySize () const noexcept |
| Uint32 | GetVersion () const |
| Returns dynamic texture version. | |
| Uint64 | GetMemoryUsage () const |
Dynamically resizable texture 2D array
All other methods are not thread-safe and must be externally synchronized: they must not race with each other or with Update() or Resize().
Sparse arrays require exactly one immediate context in TextureDesc::ImmediateContextMask. The context used by Resize() or Update() must be that context and support sparse binding.
| Diligent::DynamicTextureArray::DynamicTextureArray | ( | IRenderDevice * | pDevice, |
| const DynamicTextureArrayCreateInfo & | CreateInfo ) |
Initializes the dynamic texture array.
| [in] | pDevice | - Render device that will be used to create the texture array. This parameter may be null (see remarks). |
| [in] | CreateInfo | - Texture array create information, see Diligent::DynamicTextureArrayCreateInfo. |
If pDevice is null, internal texture creation will be postponed until Update() or Resize() is called.
|
inlinenoexcept |
Returns the current number of slices in the texture array.
For a sparse texture, this is the committed page-aligned resident capacity and may be greater than the size passed to Resize().
|
inline |
| Uint64 Diligent::DynamicTextureArray::GetMemoryUsage | ( | ) | const |
|
inline |
Returns a pointer to the texture object.
If the texture has not be initialized, the method returns null.
If the texture may need to be updated (initialized or resized), use the Update() method.
| ITextureView * Diligent::DynamicTextureArray::GetTextureSRV | ( | TEXTURE_FORMAT | ViewFormat | ) | const |
Returns a shader resource view of the internal texture in the specified format.
The array returns the default SRV and, when typed texture views are supported, an additional sRGB SRV for compatible typeless formats. If the requested view is not available, the method returns null.
The method does not create a view and must not race with Update() or Resize().
|
inline |
|
inline |
Returns true if the texture must be updated before use (e.g. it has been resized, but internal texture has not been initialized or updated). When update is not pending, Update() may be called with null device and context.
| ITexture * Diligent::DynamicTextureArray::Resize | ( | IRenderDevice * | pDevice, |
| IDeviceContext * | pContext, | ||
| Uint32 | NewArraySize, | ||
| bool | DiscardContent = false ) |
Resizes the texture array to the specified number of slices.
| [in] | pDevice | - Render device that will be used create new internal texture. This parameter may be null (see remarks). |
| [in] | pContext | - Device context that will be used to copy existing contents to the new texture (when using non-sparse texture), or commit new memory tiles (when using sparse texture). This parameter may be null (see remarks). |
| [in] | NewArraySize | - The new number of slices in the texture array. |
| [in] | DiscardContent | - Whether to discard previous texture content (for non-sparse textures). |
The method operation depends on which of pDevice and pContext parameters are not null:
Typically pContext is null when the method is called from a worker thread.
For a sparse texture, NewArraySize is rounded up to a multiple of DynamicTextureArrayCreateInfo::NumSlicesInMemoryPage. GetArraySize() reports this committed page-aligned resident capacity.
A content-preserving default resize keeps the committed texture and its views usable until replacement texture creation succeeds.
After a replacement default texture has been created and its content copy is pending, the method may only be called with the same NewArraySize, for example to provide a context that was previously unavailable. Before the replacement is created, the pending request may be retargeted or cancelled.
If NewArraySize is zero, internal buffer will be released.
| ITexture * Diligent::DynamicTextureArray::Update | ( | IRenderDevice * | pDevice, |
| IDeviceContext * | pContext ) |
Updates the internal texture object.
| [in] | pDevice | - Render device that will be used to create a new texture, if necessary (see remarks). |
| [in] | pContext | - Device context that will be used to copy existing texture contents (when using non-sparse texture), or bind memory tiles (when using sparse textures), if necessary (see remarks). |
If the texture has been resized, but internal texture object has not been initialized, pDevice and pContext must not be null.
If the texture does not need to be updated (PendingUpdate() returns false), both pDevice and pContext may be null.