lovr/src/modules/data/image.h

72 lines
1.5 KiB
C
Raw Normal View History

2022-03-22 07:13:21 +00:00
#include "util.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
2021-02-08 18:16:00 +00:00
struct Blob;
2017-12-08 16:44:28 +00:00
typedef enum {
FORMAT_RGB,
FORMAT_RGBA,
2018-07-21 00:45:25 +00:00
FORMAT_RGBA4,
2020-05-10 07:59:01 +00:00
FORMAT_R16,
FORMAT_RG16,
FORMAT_RGBA16,
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,
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
typedef struct Image {
2021-02-11 23:37:55 +00:00
uint32_t ref;
2021-02-08 18:16:00 +00:00
struct Blob* blob;
2019-05-20 21:34:03 +00:00
uint32_t width;
uint32_t height;
2021-02-08 18:16:00 +00:00
struct Blob* source;
2017-12-08 16:44:28 +00:00
TextureFormat format;
Mipmap* mipmaps;
uint32_t mipmapCount;
} Image;
2017-02-19 09:54:58 +00:00
Image* lovrImageCreate(uint32_t width, uint32_t height, struct Blob* contents, uint8_t value, TextureFormat format);
Image* lovrImageCreateFromBlob(struct Blob* blob, bool flip);
void lovrImageDestroy(void* ref);
Color lovrImageGetPixel(Image* image, uint32_t x, uint32_t y);
void lovrImageSetPixel(Image* image, uint32_t x, uint32_t y, Color color);
struct Blob* lovrImageEncode(Image* image);
void lovrImagePaste(Image* image, Image* source, uint32_t dx, uint32_t dy, uint32_t sx, uint32_t sy, uint32_t w, uint32_t h);