#include <texture.h>
Public Member Functions | |
Texture2D (Core &core) | |
virtual | ~Texture2D () override |
bool | init (const SurfaceDescriptor &descriptor, bool generateMipMaps, const glm::vec4 &clearColor, VkImageUsageFlags requiredFlags, utility::ErrorState &errorState) |
bool | init (const SurfaceDescriptor &descriptor, bool generateMipMaps, VkImageUsageFlags requiredFlags, utility::ErrorState &errorState) |
bool | init (const SurfaceDescriptor &descriptor, bool generateMipMaps, void *initialData, VkImageUsageFlags requiredFlags, utility::ErrorState &errorState) |
const glm::vec2 | getSize () const |
int | getWidth () const |
int | getHeight () const |
void | update (const void *data, int width, int height, int pitch, ESurfaceChannels channels) |
void | update (const void *data, const SurfaceDescriptor &surfaceDescriptor) |
virtual uint | getLayerCount () const override |
virtual uint | getMipLevels () const override |
virtual const ImageData & | getHandle () const override |
void | asyncGetData (Bitmap &bitmap) |
void | asyncGetData (std::function< void(const void *, size_t)> copyFunction) |
![]() | |
Texture (Core &core) | |
virtual | ~Texture () |
virtual VkImageLayout | getTargetLayout () const |
VkFormat | getFormat () const |
const SurfaceDescriptor & | getDescriptor () const |
RenderService & | getRenderService () |
const RenderService & | getRenderService () const |
virtual void | onDestroy () override |
![]() | |
Resource () | |
![]() | |
Object () | |
virtual | ~Object () |
virtual bool | init (utility::ErrorState &errorState) |
Object (Object &)=delete | |
Object & | operator= (const Object &)=delete |
Object (Object &&)=delete | |
Object & | operator= (Object &&)=delete |
Public Attributes | |
EUsage | mUsage = EUsage::Static |
Property: 'Usage' If this texture is updated frequently or considered static. More... | |
![]() | |
nap::Signal | textureDestroyed |
Signal that is triggered before texture is destroyed. More... | |
![]() | |
std::string | mID |
Property: 'mID' unique name of the object. Used as an identifier by the system. More... | |
Protected Types | |
using | TextureReadCallback = std::function< void(void *data, size_t sizeInBytes)> |
Protected Member Functions | |
virtual ImageData & | getHandle () override |
bool | initInternal (const SurfaceDescriptor &descriptor, bool generateMipMaps, VkImageUsageFlags requiredFlags, utility::ErrorState &errorState) |
void | upload (VkCommandBuffer commandBuffer) |
void | download (VkCommandBuffer commandBuffer) |
void | notifyDownloadReady (int frameIndex) |
void | clearDownloads () |
![]() | |
virtual void | clear (VkCommandBuffer commandBuffer) |
void | requestClear () |
Protected Attributes | |
ImageData | mImageData |
2D Texture vulkan image buffers More... | |
std::vector< BufferData > | mStagingBuffers |
All vulkan staging buffers, 1 when static or using dynamic read, no. of frames in flight when dynamic write. More... | |
int | mCurrentStagingBufferIndex = -1 |
Currently used staging buffer. More... | |
size_t | mImageSizeInBytes = -1 |
Size in bytes of texture. More... | |
std::vector< TextureReadCallback > | mReadCallbacks |
Number of callbacks based on number of frames in flight. More... | |
std::vector< int > | mDownloadStagingBufferIndices |
Staging buffer indices associated with a frameindex. More... | |
uint32 | mMipLevels = 1 |
Total number of generated mip-maps. More... | |
![]() | |
RenderService & | mRenderService |
Reference to the render service. More... | |
SurfaceDescriptor | mDescriptor |
Texture description. More... | |
VkFormat | mFormat = VK_FORMAT_UNDEFINED |
Vulkan texture format. More... | |
VkClearColorValue | mClearColor = { 0.0f, 0.0f, 0.0f, 0.0f } |
Color used for clearing the texture. More... | |
Additional Inherited Members | |
![]() | |
enum | EUsage { Static, DynamicRead, DynamicWrite } |
![]() | |
static bool | isIDProperty (rtti::Instance &object, const rtti::Property &property) |
GPU representation of a 2D image. This class does not own any CPU data. It offers the user an interface to upload & download texture data, from and to a bitmap. When usage is set to 'Static' (default) or 'DynamicRead' data can be uploaded only once. When usage is set to 'DynamicWrite' the texture be updated frequently from CPU to GPU.
|
protected |
|
overridevirtual |
void asyncGetData | ( | Bitmap & | bitmap | ) |
Starts a transfer of texture data from GPU to CPU. This is a non blocking call. When the transfer completes, the bitmap will be filled with the texture data.
bitmap | the bitmap to download texture data into. |
void asyncGetData | ( | std::function< void(const void *, size_t)> | copyFunction | ) |
Starts a transfer of texture data from GPU to CPU. Use this overload to pass your own copy function. This is a non blocking call. When the transfer completes, the bitmap will be filled with the texture data.
copyFunction | the copy function to call when the texture data is available for download. |
|
protected |
Clears queued texture downloads
|
protected |
Downloads texture data
|
overridevirtual |
Implements Texture.
Reimplemented in DepthRenderTexture2D, and RenderTexture2D.
|
overrideprotectedvirtual |
Implements Texture.
int getHeight | ( | ) | const |
|
overridevirtual |
Implements Texture.
|
overridevirtual |
Implements Texture.
const glm::vec2 getSize | ( | ) | const |
int getWidth | ( | ) | const |
bool init | ( | const SurfaceDescriptor & | descriptor, |
bool | generateMipMaps, | ||
const glm::vec4 & | clearColor, | ||
VkImageUsageFlags | requiredFlags, | ||
utility::ErrorState & | errorState | ||
) |
Creates the texture on the GPU using the provided settings. The texture is cleared to 'ClearColor'. The Vulkan image usage flags are derived from texture usage.
descriptor | texture description. |
generateMipMaps | if mip maps are generated when data is uploaded. |
clearColor | the color to clear the texture with. |
requiredFlags | image usage flags that are required, 0 = no additional usage flags. |
errorState | contains the error if the texture can't be initialized. |
bool init | ( | const SurfaceDescriptor & | descriptor, |
bool | generateMipMaps, | ||
VkImageUsageFlags | requiredFlags, | ||
utility::ErrorState & | errorState | ||
) |
Creates the texture on the GPU using the provided settings. The texture is cleared to 'ClearColor'. Otherwise the layout of the texture on the GPU will be undefined until upload. The Vulkan image usage flags are derived from texture usage.
descriptor | texture description. |
generateMipMaps | if mip maps are generated when data is uploaded. |
requiredFlags | image usage flags that are required, 0 = no additional usage flags. |
errorState | contains the error if the texture can't be initialized. |
bool init | ( | const SurfaceDescriptor & | descriptor, |
bool | generateMipMaps, | ||
void * | initialData, | ||
VkImageUsageFlags | requiredFlags, | ||
utility::ErrorState & | errorState | ||
) |
Creates the texture on the GPU using the provided settings and immediately requests a content upload. The Vulkan image usage flags are derived from texture usage.
descriptor | texture description. |
generateMipMaps | if mip maps are generated when data is uploaded. |
initialData | the data to upload, must be of size SurfaceDescriptor::getSizeInBytes(). |
requiredFlags | image usage flags that are required, 0 = no additional usage flags |
errorState | contains the error if the texture can't be initialized. |
|
protected |
Creates the texture on the GPU using the provided settings. The Vulkan image usage flags are derived from texture usage.
descriptor | texture description. |
generateMipMaps | if mip maps are generated when data is uploaded. |
requiredFlags | image usage flags that are required, 0 = no additional usage flags |
errorState | contains the error if the texture can't be initialized. |
|
protected |
Called by the render service when download is ready
void update | ( | const void * | data, |
const SurfaceDescriptor & | surfaceDescriptor | ||
) |
Uploads CPU data to the texture on the GPU. Note that you can only update the contents of a texture once if 'Usage' is 'DynamicRead' or 'Static'.
data | pointer to the CPU data. |
surfaceDescriptor | texture description. |
void update | ( | const void * | data, |
int | width, | ||
int | height, | ||
int | pitch, | ||
ESurfaceChannels | channels | ||
) |
Uploads CPU data to the texture on the GPU. Note that you can only update the contents of a texture once if 'Usage' is 'DynamicRead' or 'Static'.
data | pointer to the CPU data. |
width | width of the image in pixels |
height | height of the image in pixels |
pitch | size in bytes of a single row of pixel data. |
channels | total number of channels: 3 for RGB, 4 for RGBA etc. |
|
protected |
Called by the render service when data can be uploaded
|
protected |
Currently used staging buffer.
|
protected |
Staging buffer indices associated with a frameindex.
|
protected |
Size in bytes of texture.
|
protected |
Total number of generated mip-maps.
|
protected |
Number of callbacks based on number of frames in flight.
|
protected |
All vulkan staging buffers, 1 when static or using dynamic read, no. of frames in flight when dynamic write.
EUsage mUsage = EUsage::Static |
Property: 'Usage' If this texture is updated frequently or considered static.