2018-02-20 05:04:53 +00:00
|
|
|
#include "data/blob.h"
|
2019-04-05 11:27:48 +00:00
|
|
|
#include "types.h"
|
2018-01-21 05:33:09 +00:00
|
|
|
#include "util.h"
|
2018-09-26 17:49:33 +00:00
|
|
|
#include "lib/vec/vec.h"
|
2017-01-09 05:29:16 +00:00
|
|
|
#include <stdint.h>
|
2017-10-31 08:14:09 +00:00
|
|
|
#include <stdbool.h>
|
2016-11-26 07:54:45 +00:00
|
|
|
|
2017-02-19 09:54:58 +00:00
|
|
|
#pragma once
|
|
|
|
|
2017-12-08 16:44:28 +00:00
|
|
|
typedef enum {
|
|
|
|
FORMAT_RGB,
|
|
|
|
FORMAT_RGBA,
|
2018-07-21 00:45:25 +00:00
|
|
|
FORMAT_RGBA4,
|
2017-12-09 18:07:05 +00:00
|
|
|
FORMAT_RGBA16F,
|
|
|
|
FORMAT_RGBA32F,
|
2018-07-21 00:45:25 +00:00
|
|
|
FORMAT_R16F,
|
|
|
|
FORMAT_R32F,
|
2018-08-16 21:54:37 +00:00
|
|
|
FORMAT_RG16F,
|
|
|
|
FORMAT_RG32F,
|
2018-07-21 00:45:25 +00:00
|
|
|
FORMAT_RGB5A1,
|
|
|
|
FORMAT_RGB10A2,
|
2017-12-09 18:07:05 +00:00
|
|
|
FORMAT_RG11B10F,
|
2018-09-28 01:34:43 +00:00
|
|
|
FORMAT_D16,
|
|
|
|
FORMAT_D32F,
|
|
|
|
FORMAT_D24S8,
|
2017-12-08 16:44:28 +00:00
|
|
|
FORMAT_DXT1,
|
|
|
|
FORMAT_DXT3,
|
|
|
|
FORMAT_DXT5
|
2017-02-19 09:54:58 +00:00
|
|
|
} TextureFormat;
|
|
|
|
|
|
|
|
typedef struct {
|
2017-07-22 10:42:05 +00:00
|
|
|
int width;
|
|
|
|
int height;
|
|
|
|
void* data;
|
2019-03-17 07:58:01 +00:00
|
|
|
int size;
|
2017-07-22 10:42:05 +00:00
|
|
|
} Mipmap;
|
2017-06-19 00:28:15 +00:00
|
|
|
|
2017-07-22 10:42:05 +00:00
|
|
|
typedef vec_t(Mipmap) vec_mipmap_t;
|
2017-06-19 00:28:15 +00:00
|
|
|
|
2019-04-05 11:27:48 +00:00
|
|
|
typedef struct TextureData {
|
2018-03-11 05:28:22 +00:00
|
|
|
Blob blob;
|
2017-02-19 09:54:58 +00:00
|
|
|
int width;
|
|
|
|
int height;
|
2018-03-11 05:28:22 +00:00
|
|
|
Blob* source;
|
2017-12-08 16:44:28 +00:00
|
|
|
TextureFormat format;
|
2018-01-14 21:21:34 +00:00
|
|
|
vec_mipmap_t mipmaps;
|
2017-02-19 09:54:58 +00:00
|
|
|
} TextureData;
|
|
|
|
|
2018-12-19 08:15:08 +00:00
|
|
|
TextureData* lovrTextureDataInit(TextureData* textureData, int width, int height, uint8_t value, TextureFormat format);
|
|
|
|
TextureData* lovrTextureDataInitFromBlob(TextureData* textureData, Blob* blob, bool flip);
|
2018-12-19 08:25:20 +00:00
|
|
|
#define lovrTextureDataCreate(...) lovrTextureDataInit(lovrAlloc(TextureData), __VA_ARGS__)
|
|
|
|
#define lovrTextureDataCreateFromBlob(...) lovrTextureDataInitFromBlob(lovrAlloc(TextureData), __VA_ARGS__)
|
2018-02-07 17:07:51 +00:00
|
|
|
Color lovrTextureDataGetPixel(TextureData* textureData, int x, int y);
|
|
|
|
void lovrTextureDataSetPixel(TextureData* textureData, int x, int y, Color color);
|
2018-02-09 04:17:50 +00:00
|
|
|
bool lovrTextureDataEncode(TextureData* textureData, const char* filename);
|
2018-02-26 08:59:03 +00:00
|
|
|
void lovrTextureDataDestroy(void* ref);
|
2018-10-26 23:56:16 +00:00
|
|
|
|
|
|
|
// DDS structs (modified from ddsparse <https://bitbucket.org/slime73/ddsparse>)
|
|
|
|
|
|
|
|
typedef enum DDPF {
|
|
|
|
DDPF_ALPHAPIXELS = 0x000001,
|
|
|
|
DDPF_ALPHA = 0x000002,
|
|
|
|
DDPF_FOURCC = 0x000004,
|
|
|
|
DDPF_RGB = 0x000040,
|
|
|
|
DDPF_YUV = 0x000200,
|
|
|
|
DDPF_LUMINANCE = 0x020000
|
|
|
|
} DDPF;
|
|
|
|
|
|
|
|
typedef enum D3D10ResourceDimension {
|
|
|
|
D3D10_RESOURCE_DIMENSION_UNKNOWN = 0,
|
|
|
|
D3D10_RESOURCE_DIMENSION_BUFFER = 1,
|
|
|
|
D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2,
|
|
|
|
D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3,
|
|
|
|
D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4
|
|
|
|
} D3D10ResourceDimension;
|
|
|
|
|
|
|
|
typedef enum DXGIFormat {
|
|
|
|
DXGI_FORMAT_UNKNOWN = 0,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
|
|
|
|
DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
|
|
|
|
DXGI_FORMAT_R32G32B32A32_UINT = 3,
|
|
|
|
DXGI_FORMAT_R32G32B32A32_SINT = 4,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R32G32B32_TYPELESS = 5,
|
|
|
|
DXGI_FORMAT_R32G32B32_FLOAT = 6,
|
|
|
|
DXGI_FORMAT_R32G32B32_UINT = 7,
|
|
|
|
DXGI_FORMAT_R32G32B32_SINT = 8,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
|
|
|
|
DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
|
|
|
|
DXGI_FORMAT_R16G16B16A16_UNORM = 11,
|
|
|
|
DXGI_FORMAT_R16G16B16A16_UINT = 12,
|
|
|
|
DXGI_FORMAT_R16G16B16A16_SNORM = 13,
|
|
|
|
DXGI_FORMAT_R16G16B16A16_SINT = 14,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R32G32_TYPELESS = 15,
|
|
|
|
DXGI_FORMAT_R32G32_FLOAT = 16,
|
|
|
|
DXGI_FORMAT_R32G32_UINT = 17,
|
|
|
|
DXGI_FORMAT_R32G32_SINT = 18,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R32G8X24_TYPELESS = 19,
|
|
|
|
DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
|
|
|
|
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21,
|
|
|
|
DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
|
|
|
|
DXGI_FORMAT_R10G10B10A2_UNORM = 24,
|
|
|
|
DXGI_FORMAT_R10G10B10A2_UINT = 25,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R11G11B10_FLOAT = 26,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
|
|
|
|
DXGI_FORMAT_R8G8B8A8_UNORM = 28,
|
|
|
|
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
|
|
|
|
DXGI_FORMAT_R8G8B8A8_UINT = 30,
|
|
|
|
DXGI_FORMAT_R8G8B8A8_SNORM = 31,
|
|
|
|
DXGI_FORMAT_R8G8B8A8_SINT = 32,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R16G16_TYPELESS = 33,
|
|
|
|
DXGI_FORMAT_R16G16_FLOAT = 34,
|
|
|
|
DXGI_FORMAT_R16G16_UNORM = 35,
|
|
|
|
DXGI_FORMAT_R16G16_UINT = 36,
|
|
|
|
DXGI_FORMAT_R16G16_SNORM = 37,
|
|
|
|
DXGI_FORMAT_R16G16_SINT = 38,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R32_TYPELESS = 39,
|
|
|
|
DXGI_FORMAT_D32_FLOAT = 40,
|
|
|
|
DXGI_FORMAT_R32_FLOAT = 41,
|
|
|
|
DXGI_FORMAT_R32_UINT = 42,
|
|
|
|
DXGI_FORMAT_R32_SINT = 43,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R24G8_TYPELESS = 44,
|
|
|
|
DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
|
|
|
|
DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
|
|
|
|
DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R8G8_TYPELESS = 48,
|
|
|
|
DXGI_FORMAT_R8G8_UNORM = 49,
|
|
|
|
DXGI_FORMAT_R8G8_UINT = 50,
|
|
|
|
DXGI_FORMAT_R8G8_SNORM = 51,
|
|
|
|
DXGI_FORMAT_R8G8_SINT = 52,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R16_TYPELESS = 53,
|
|
|
|
DXGI_FORMAT_R16_FLOAT = 54,
|
|
|
|
DXGI_FORMAT_D16_UNORM = 55,
|
|
|
|
DXGI_FORMAT_R16_UNORM = 56,
|
|
|
|
DXGI_FORMAT_R16_UINT = 57,
|
|
|
|
DXGI_FORMAT_R16_SNORM = 58,
|
|
|
|
DXGI_FORMAT_R16_SINT = 59,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R8_TYPELESS = 60,
|
|
|
|
DXGI_FORMAT_R8_UNORM = 61,
|
|
|
|
DXGI_FORMAT_R8_UINT = 62,
|
|
|
|
DXGI_FORMAT_R8_SNORM = 63,
|
|
|
|
DXGI_FORMAT_R8_SINT = 64,
|
|
|
|
DXGI_FORMAT_A8_UNORM = 65,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R1_UNORM = 66,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
|
|
|
|
DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC1_TYPELESS = 70,
|
|
|
|
DXGI_FORMAT_BC1_UNORM = 71,
|
|
|
|
DXGI_FORMAT_BC1_UNORM_SRGB = 72,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC2_TYPELESS = 73,
|
|
|
|
DXGI_FORMAT_BC2_UNORM = 74,
|
|
|
|
DXGI_FORMAT_BC2_UNORM_SRGB = 75,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC3_TYPELESS = 76,
|
|
|
|
DXGI_FORMAT_BC3_UNORM = 77,
|
|
|
|
DXGI_FORMAT_BC3_UNORM_SRGB = 78,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC4_TYPELESS = 79,
|
|
|
|
DXGI_FORMAT_BC4_UNORM = 80,
|
|
|
|
DXGI_FORMAT_BC4_SNORM = 81,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC5_TYPELESS = 82,
|
|
|
|
DXGI_FORMAT_BC5_UNORM = 83,
|
|
|
|
DXGI_FORMAT_BC5_SNORM = 84,
|
|
|
|
|
|
|
|
DXGI_FORMAT_B5G6R5_UNORM = 85,
|
|
|
|
DXGI_FORMAT_B5G5R5A1_UNORM = 86,
|
|
|
|
DXGI_FORMAT_B8G8R8A8_UNORM = 87,
|
|
|
|
DXGI_FORMAT_B8G8R8X8_UNORM = 88,
|
|
|
|
|
|
|
|
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
|
|
|
|
DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
|
|
|
|
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
|
|
|
|
DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
|
|
|
|
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC6H_TYPELESS = 94,
|
|
|
|
DXGI_FORMAT_BC6H_UF16 = 95,
|
|
|
|
DXGI_FORMAT_BC6H_SF16 = 96,
|
|
|
|
|
|
|
|
DXGI_FORMAT_BC7_TYPELESS = 97,
|
|
|
|
DXGI_FORMAT_BC7_UNORM = 98,
|
|
|
|
DXGI_FORMAT_BC7_UNORM_SRGB = 99
|
|
|
|
} DXGIFormat;
|
|
|
|
|
|
|
|
typedef struct DDSPixelFormat {
|
|
|
|
uint32_t size;
|
|
|
|
uint32_t flags;
|
|
|
|
uint32_t fourCC;
|
|
|
|
uint32_t rgbBitCount;
|
|
|
|
uint32_t rBitMask;
|
|
|
|
uint32_t gBitMask;
|
|
|
|
uint32_t bBitMask;
|
|
|
|
uint32_t aBitMask;
|
|
|
|
} DDSPixelFormat;
|
|
|
|
|
|
|
|
typedef struct DDSHeader {
|
|
|
|
uint32_t size;
|
|
|
|
uint32_t flags;
|
|
|
|
uint32_t height;
|
|
|
|
uint32_t width;
|
|
|
|
uint32_t pitchOrLinearSize;
|
|
|
|
uint32_t depth;
|
|
|
|
uint32_t mipMapCount;
|
|
|
|
uint32_t reserved[11];
|
|
|
|
|
|
|
|
DDSPixelFormat format;
|
|
|
|
|
|
|
|
uint32_t caps1;
|
|
|
|
uint32_t caps2;
|
|
|
|
uint32_t caps3;
|
|
|
|
uint32_t caps4;
|
|
|
|
uint32_t reserved2;
|
|
|
|
} DDSHeader;
|
|
|
|
|
|
|
|
typedef struct DDSHeader10 {
|
|
|
|
DXGIFormat dxgiFormat;
|
|
|
|
D3D10ResourceDimension resourceDimension;
|
|
|
|
|
|
|
|
uint32_t miscFlag;
|
|
|
|
uint32_t arraySize;
|
|
|
|
uint32_t reserved;
|
|
|
|
} DDSHeader10;
|
2019-05-12 22:55:37 +00:00
|
|
|
|
|
|
|
// KTX
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
uint8_t header[12];
|
|
|
|
uint32_t endianness;
|
|
|
|
uint32_t glType;
|
|
|
|
uint32_t glTypeSize;
|
|
|
|
uint32_t glFormat;
|
|
|
|
uint32_t glInternalFormat;
|
|
|
|
uint32_t glBaseInternalFormat;
|
|
|
|
uint32_t pixelWidth;
|
|
|
|
uint32_t pixelHeight;
|
|
|
|
uint32_t pixelDepth;
|
|
|
|
uint32_t numberOfArrayElements;
|
|
|
|
uint32_t numberOfFaces;
|
|
|
|
uint32_t numberOfMipmapLevels;
|
|
|
|
uint32_t bytesOfKeyValueData;
|
|
|
|
} KTXHeader;
|