Cogs.Core
TextureData.h
1#pragma once
2
3#include "DataFormat.h"
4
5#include "Foundation/Memory/MemoryBuffer.h"
6
7namespace Cogs
8{
9 size_t COGSRENDERING_DLL_API getBlockSize(TextureFormat format);
10 TextureExtent COGSRENDERING_DLL_API getBlockExtent(TextureFormat format);
11 size_t COGSRENDERING_DLL_API getComponents(TextureFormat format);
12 uint32_t COGSRENDERING_DLL_API getMipLevels(const uint32_t width, const uint32_t height);
13 uint32_t COGSRENDERING_DLL_API getMipSize(uint32_t size, uint32_t level);
14
15 enum class ResourceDimensions
16 {
17 Unknown = 0,
18 Buffer,
19 Texture1D,
20 Texture1DArray,
21 Texture2D,
22 Texture2DArray,
23 Texture2DMS,
24 Texture2DMSArray,
25 Texture3D,
26 Texture3DArray,
27 TextureCube,
28 TextureCubeArray,
29 RenderBuffer,
30 ResourceDimensions_Size
31 };
32 COGSRENDERING_DLL_API const char* getResourceDimensionsName(ResourceDimensions target);
33
35 {
36 TextureDescription() = default;
37
41 COGSRENDERING_DLL_API size_t estimateMemorySize() const;
42
43 ResourceDimensions target = ResourceDimensions::Texture2D; //<! Type of texture this describes.
44 uint32_t width = 0; //<! Pixel width of the texture.
45 uint32_t height = 0; //<! Height of texture in pixels.
46 uint32_t depth = 1;
47 uint32_t layers = 1; //<! Number of entries in a texture array.
48 uint32_t faces = 1; //<! Number of faces in a cube-map.
49 uint32_t levels = 1; //<! Number of mipmap levels.
50 uint32_t samples = 1; //<! Defines the number of samples a multisample texture will have.
51 TextureFormat format = TextureFormat::Unknown; //<! Pixel format of this texture.
53 };
54
55 struct COGSRENDERING_DLL_API TextureData
56 {
57 TextureData() = default;
58 TextureData(TextureExtent extent, size_t layers, size_t faces, size_t levels, TextureFormat format, Memory::Allocator * allocator = Memory::Allocator::defaultAllocator());
59 TextureData(const void * data, TextureExtent extent, size_t layers, size_t faces, size_t levels, TextureFormat format);
60
61 TextureData(TextureData &&) = default;
62 TextureData & operator=(TextureData &&) = default;
63
64 void init(TextureExtent extent, size_t layers, size_t faces, size_t levels, TextureFormat format, Memory::Allocator * allocator = Memory::Allocator::defaultAllocator());
65 void initExternal(intptr_t external);
66 void initExternal(const void ** data, size_t layers, size_t faces, size_t levels);
67 void clearData();
68
69 void * getData(size_t layer, size_t face, size_t level);
70 const void * getData(size_t layer, size_t face, size_t level) const;
71
72 void * getData() { return getData(0, 0, 0); }
73 const void * getData() const { return getData(0, 0, 0); }
74
75 size_t getPitch(size_t level) const;
76 size_t getLevelSize(size_t level) const;
77 size_t getFaceSize(size_t baseLevel, size_t maxLevel) const;
78 size_t getLayerSize(size_t baseFace, size_t maxFace, size_t baseLevel, size_t maxLevel) const;
79 size_t getSize() const;
80
81 TextureExtent getExtent(size_t level) const;
82 TextureExtent getBlockCount(size_t level) const;
83
84 size_t getOffset(size_t layer, size_t face, size_t level) const;
85 void initOffsets(const void * data);
86
87 TextureFormat format = Cogs::TextureFormat::Unknown;
88
89 size_t layers = 0;
90 size_t faces = 0;
91 size_t levels = 0;
92
93 size_t blockSize = 0;
94 TextureExtent blockExtent;
95 TextureExtent blockCount;
96 TextureExtent extent;
97
100 intptr_t externalHandle = 0;
101 };
102}
Base allocator implementation.
Definition: Allocator.h:30
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
COGSRENDERING_DLL_API size_t estimateMemorySize() const
Attempts to estimate the amount of memory a texture with these attributes will require.
Definition: TextureData.cpp:57
ETextureFlags
Texture flags enumeration.
Definition: Flags.h:114
@ Default
Default usage, the texture can be loaded once and bound and sampled in shaders.
Definition: Flags.h:116