Cogs.Core
TexturesCommon.cpp
1#include "TexturesCommon.h"
2
3Cogs::TextureHandle Cogs::TexturesCommon::loadTexture(const uint8_t * bytes, uint32_t width, uint32_t height, TextureFormat format, uint32_t flags)
4{
5 return load(Cogs::ResourceDimensions::Texture2D, bytes ? &bytes : nullptr, 1, 1, &width, &height, format, 1, flags);
6}
7
8Cogs::TextureHandle Cogs::TexturesCommon::loadTexture(const uint8_t * bytes, uint32_t width, uint32_t height, TextureFormat format, uint32_t numSamples, uint32_t flags)
9{
10 return load(numSamples == 1 ? Cogs::ResourceDimensions::Texture2D : Cogs::ResourceDimensions::Texture2DMS, bytes ? &bytes : nullptr, 1, 1, &width, &height, format, numSamples, flags);
11}
12
13Cogs::TextureHandle Cogs::TexturesCommon::loadTextureMipMaps(const uint8_t ** bytes, size_t numLevels, const uint32_t * widths, const uint32_t * heights, TextureFormat format, uint32_t flags)
14{
15 return load(Cogs::ResourceDimensions::Texture2D, bytes, 1, numLevels, widths, heights, format, 1, flags);
16}
17
18Cogs::TextureHandle Cogs::TexturesCommon::loadTextureArray(const uint8_t ** bytes, const size_t arraySize, const size_t numLevels, const uint32_t * widths, const uint32_t * heights, TextureFormat format, uint32_t flags /*= 0*/)
19{
20 return load(Cogs::ResourceDimensions::Texture2DArray, bytes, arraySize, numLevels, widths, heights, format, 1, flags);
21}
22
23Cogs::TextureHandle Cogs::TexturesCommon::loadCubeMap(const uint8_t ** bytes, const size_t arraySize, const size_t numLevels, const uint32_t * widths, const uint32_t * heights, TextureFormat format, uint32_t flags /*= 0*/)
24{
25 return load(Cogs::ResourceDimensions::TextureCube, bytes, arraySize, numLevels, widths, heights, format, 1, flags | TextureFlags::CubeMap);
26}
27
28Cogs::TextureHandle Cogs::TexturesCommon::load(Cogs::ResourceDimensions target, const uint8_t ** bytes, const size_t arraySize, const size_t numLevels, const uint32_t * widths, const uint32_t * heights, TextureFormat format, uint32_t numSamples, uint32_t flags)
29{
30 TextureDescription desc = {};
31 desc.target = target;
32 desc.width = widths[0];
33 desc.height = heights[0];
34 desc.format = format;
35 desc.layers = static_cast<uint32_t>(arraySize);
36 desc.faces = (flags & TextureFlags::CubeMap) ? 6 : 1;
37 desc.levels = static_cast<uint32_t>(numLevels);
38 desc.samples = numSamples;
39 desc.flags = (TextureFlags::ETextureFlags)flags;
40 if (desc.flags == TextureFlags::Default) desc.flags = TextureFlags::Texture;
41
42 if (bytes) {
43 auto data = TextureData(TextureExtent{ desc.width, desc.height, 1 }, desc.layers, desc.faces, desc.levels, desc.format);
44
46 data.initExternal((intptr_t)bytes[0]);
47 } else {
48 data.initExternal((const void **)bytes, desc.layers, desc.faces, desc.levels);
49 }
50
51 return loadTexture(desc, &data);
52 } else {
53 return loadTexture(desc, nullptr);
54 }
55}
ETextureFlags
Texture flags enumeration.
Definition: Flags.h:114
@ Texture
Texture usage, see Default.
Definition: Flags.h:118
@ CubeMap
The texture can be used as a cube map.
Definition: Flags.h:126
@ Default
Default usage, the texture can be loaded once and bound and sampled in shaders.
Definition: Flags.h:116