174 lines
5.8 KiB
C
174 lines
5.8 KiB
C
#ifndef CGE_PIX_H
|
|
#define CGE_PIX_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
enum CgeColorType {
|
|
CGE_COLOR_RGBA,
|
|
CGE_COLOR_HSVA,
|
|
CGE_COLOR_HSLA
|
|
};
|
|
|
|
enum CgePixFormat {
|
|
CGE_PIX_UNKNOWN,
|
|
CGE_PIX_INDEX1,
|
|
CGE_PIX_INDEX1_LSB,
|
|
CGE_PIX_INDEX2,
|
|
CGE_PIX_INDEX2_LSB,
|
|
CGE_PIX_INDEX4,
|
|
CGE_PIX_INDEX4_LSB,
|
|
CGE_PIX_INDEX8,
|
|
CGE_PIX_R8,
|
|
CGE_PIX_R16,
|
|
CGE_PIX_R32F,
|
|
CGE_PIX_RGB8,
|
|
CGE_PIX_BGR8,
|
|
CGE_PIX_RGB16,
|
|
CGE_PIX_BGR16,
|
|
CGE_PIX_RGB32F,
|
|
CGE_PIX_BGR32F,
|
|
CGE_PIX_RGBA8,
|
|
CGE_PIX_BGRA8,
|
|
CGE_PIX_ARGB8,
|
|
CGE_PIX_ABGR8,
|
|
CGE_PIX_RGBA16,
|
|
CGE_PIX_BGRA16,
|
|
CGE_PIX_ARGB16,
|
|
CGE_PIX_ABGR16,
|
|
CGE_PIX_RGBA32F,
|
|
CGE_PIX_BGRA32F,
|
|
CGE_PIX_ARGB32F,
|
|
CGE_PIX_ABGR32F,
|
|
CGE_PIX_RGB565,
|
|
CGE_PIX_BGR565,
|
|
CGE_PIX_RGBA5551,
|
|
CGE_PIX_BGRA5551,
|
|
CGE_PIX_ARGB1555,
|
|
CGE_PIX_ABGR1555,
|
|
CGE_PIX_RGBA1010102,
|
|
CGE_PIX_BGRA1010102,
|
|
CGE_PIX_ARGB2101010,
|
|
CGE_PIX_ABGR2101010,
|
|
};
|
|
|
|
enum CgePixFlags {
|
|
CGE_PIX_PREMULTIPLIED = (1 << 0),
|
|
CGE_PIX_NOALPHA = (1 << 1),
|
|
CGE_PIX_ALIGN32 = (1 << 2),
|
|
};
|
|
|
|
typedef struct CgeColor {
|
|
union {
|
|
struct {
|
|
uint16_t r;
|
|
uint16_t g;
|
|
uint16_t b;
|
|
uint16_t a;
|
|
} rgba;
|
|
struct {
|
|
uint16_t h;
|
|
uint16_t s;
|
|
uint16_t v;
|
|
uint16_t a;
|
|
} hsva;
|
|
struct {
|
|
uint16_t h;
|
|
uint16_t s;
|
|
uint16_t l;
|
|
uint16_t a;
|
|
} hsla;
|
|
uint16_t channel[4];
|
|
} data;
|
|
int type;
|
|
} CgeColor;
|
|
|
|
typedef struct CgePix
|
|
{
|
|
uint32_t width;
|
|
uint32_t height;
|
|
int format;
|
|
int flags;
|
|
size_t stride;
|
|
void *data;
|
|
CgeColor *palette;
|
|
} CgePix;
|
|
|
|
void CgeColorRGBA8(const CgeColor *color, uint8_t *r, uint8_t *g, uint8_t *b,
|
|
uint8_t *a);
|
|
void CgeColorRGBA16(const CgeColor *color, uint16_t *r, uint16_t *g,
|
|
uint16_t *b, uint16_t *a);
|
|
void CgeColorRGBAf(const CgeColor *color, float *r, float *g, float *b,
|
|
float *a);
|
|
void CgeColorSetRGBA8(CgeColor *color, uint8_t r, uint8_t g, uint8_t b,
|
|
uint8_t a);
|
|
void CgeColorSetRGBA16(CgeColor *color, uint16_t r, uint16_t g, uint16_t b,
|
|
uint16_t a);
|
|
void CgeColorSetRGBAf(CgeColor *color, float r, float g, float b, float a);
|
|
void CgeColorHSVAf(const CgeColor *color, float *h, float *s, float *v,
|
|
float *a);
|
|
void CgeColorSetHSVAf(CgeColor *color, float h, float s, float v, float a);
|
|
void CgeColorHSLAf(const CgeColor *color, float *h, float *s, float *l,
|
|
float *a);
|
|
void CgeColorSetHSLAf(CgeColor *color, float h, float s, float l, float a);
|
|
|
|
void CgeColorToRGBA(const CgeColor *color, CgeColor *out);
|
|
void CgeColorToHSVA(const CgeColor *color, CgeColor *out);
|
|
void CgeColorToHSLA(const CgeColor *color, CgeColor *out);
|
|
|
|
void CgeColorPremultiply(const CgeColor *color, CgeColor *out);
|
|
void CgeColorUnpremultiply(const CgeColor *color, CgeColor *out);
|
|
|
|
void CgeColorBlendNormal(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendMultiply(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendScreen(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendOverlay(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendDarken(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendLighten(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendColorDodge(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendColorBurn(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendLinearDodge(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendLinearBurn(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendHardLight(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendSoftLight(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendDifference(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendExclusion(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendHue(const CgeColor *fg, const CgeColor *bg, CgeColor *out);
|
|
void CgeColorBlendSaturation(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
void CgeColorBlendColor(const CgeColor *fg, const CgeColor *bg, CgeColor *out);
|
|
void CgeColorBlendLuminosity(const CgeColor *fg, const CgeColor *bg,
|
|
CgeColor *out);
|
|
|
|
int CgePixFormatIs32Native(int format);
|
|
size_t CgePixInitLayout(uint32_t width, uint32_t height, int format, int flags,
|
|
CgePix *out);
|
|
void CgePixView(CgePix *pix, uint32_t x, uint32_t y, uint32_t width,
|
|
uint32_t height, CgePix *out);
|
|
size_t CgePixSize(const CgePix *pix);
|
|
void *CgePixScanline(const CgePix *pix, uint32_t y);
|
|
void *CgePixAt(const CgePix *pix, uint32_t x, uint32_t y);
|
|
void CgePixColor(const CgePix *pix, uint32_t x, uint32_t y, CgeColor *value);
|
|
void CgePixSetColor(CgePix *pix, uint32_t x, uint32_t y, const CgeColor *value);
|
|
uint8_t CgePixIndex(const CgePix *pix, uint32_t x, uint32_t y);
|
|
void CgePixSetIndex(CgePix *pix, uint32_t x, uint32_t y, uint8_t index);
|
|
void CgePixConvertRow(void *src, int srcFormat, int srcFlags,
|
|
const CgeColor *srcPalette, void *dest, int destFormat,
|
|
int destFlags, const CgeColor *destPalette, size_t count);
|
|
|
|
#endif /* CGE_PIX_H */
|