2018-02-20 05:04:53 +00:00
|
|
|
#include "data/blob.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,
|
2019-06-09 16:11:29 +00:00
|
|
|
FORMAT_DXT5,
|
|
|
|
FORMAT_ASTC_4x4,
|
|
|
|
FORMAT_ASTC_5x4,
|
|
|
|
FORMAT_ASTC_5x5,
|
|
|
|
FORMAT_ASTC_6x5,
|
|
|
|
FORMAT_ASTC_6x6,
|
|
|
|
FORMAT_ASTC_8x5,
|
|
|
|
FORMAT_ASTC_8x6,
|
|
|
|
FORMAT_ASTC_8x8,
|
|
|
|
FORMAT_ASTC_10x5,
|
|
|
|
FORMAT_ASTC_10x6,
|
|
|
|
FORMAT_ASTC_10x8,
|
|
|
|
FORMAT_ASTC_10x10,
|
|
|
|
FORMAT_ASTC_12x10,
|
|
|
|
FORMAT_ASTC_12x12
|
2017-02-19 09:54:58 +00:00
|
|
|
} TextureFormat;
|
|
|
|
|
|
|
|
typedef struct {
|
2019-05-20 21:34:03 +00:00
|
|
|
uint32_t width;
|
|
|
|
uint32_t height;
|
|
|
|
size_t size;
|
2017-07-22 10:42:05 +00:00
|
|
|
void* data;
|
|
|
|
} 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;
|
2019-05-20 21:34:03 +00:00
|
|
|
uint32_t width;
|
|
|
|
uint32_t 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;
|
|
|
|
|
2019-05-20 21:34:03 +00:00
|
|
|
TextureData* lovrTextureDataInit(TextureData* textureData, uint32_t width, uint32_t height, uint8_t value, TextureFormat format);
|
2018-12-19 08:15:08 +00:00
|
|
|
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__)
|
2019-05-20 21:34:03 +00:00
|
|
|
Color lovrTextureDataGetPixel(TextureData* textureData, uint32_t x, uint32_t y);
|
|
|
|
void lovrTextureDataSetPixel(TextureData* textureData, uint32_t x, uint32_t 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);
|