Files
CgePix/CgePix.h
Mikhail Romanko 1929eebc23
Some checks failed
CI / build-and-analyze (push) Failing after 29s
Initial commit
2026-07-21 18:31:09 +03:00

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 */