110 lines
4.4 KiB
110 lines
4.4 KiB
#pragma once |
|
/* |
|
======================================================================== |
|
|
|
internal image format |
|
|
|
typically expanded to rgba buffer |
|
NOTE: number at end of pixelformat name it's a total bitscount e.g. PF_RGB_24 == PF_RGB_888 |
|
======================================================================== |
|
*/ |
|
#define ImageRAW( type ) (type == PF_RGBA_32 || type == PF_BGRA_32 || type == PF_RGB_24 || type == PF_BGR_24 || type == PF_LUMINANCE) |
|
#define ImageDXT( type ) (type == PF_DXT1 || type == PF_DXT3 || type == PF_DXT5 || type == PF_ATI2) |
|
|
|
typedef enum |
|
{ |
|
PF_UNKNOWN = 0, |
|
PF_INDEXED_24, // inflated palette (768 bytes) |
|
PF_INDEXED_32, // deflated palette (1024 bytes) |
|
PF_RGBA_32, // normal rgba buffer |
|
PF_BGRA_32, // big endian RGBA (MacOS) |
|
PF_RGB_24, // uncompressed dds or another 24-bit image |
|
PF_BGR_24, // big-endian RGB (MacOS) |
|
PF_LUMINANCE, |
|
PF_DXT1, // s3tc DXT1 format |
|
PF_DXT3, // s3tc DXT3 format |
|
PF_DXT5, // s3tc DXT5 format |
|
PF_ATI2, // latc ATI2N format |
|
PF_TOTALCOUNT, // must be last |
|
} pixformat_t; |
|
|
|
typedef struct bpc_desc_s |
|
{ |
|
int format; // pixelformat |
|
char name[16]; // used for debug |
|
uint glFormat; // RGBA format |
|
int bpp; // channels (e.g. rgb = 3, rgba = 4) |
|
} bpc_desc_t; |
|
|
|
// imagelib global settings |
|
typedef enum |
|
{ |
|
IL_USE_LERPING = BIT(0), // lerping images during resample |
|
IL_KEEP_8BIT = BIT(1), // don't expand paletted images |
|
IL_ALLOW_OVERWRITE = BIT(2), // allow to overwrite stored images |
|
IL_DONTFLIP_TGA = BIT(3), // Steam background completely ignore tga attribute 0x20 (stupid lammers!) |
|
IL_DDS_HARDWARE = BIT(4), // DXT compression is support |
|
IL_LOAD_DECAL = BIT(5), // special mode for load gradient decals |
|
IL_OVERVIEW = BIT(6), // overview required some unque operations |
|
} ilFlags_t; |
|
|
|
// goes into rgbdata_t->encode |
|
#define DXT_ENCODE_DEFAULT 0 // don't use custom encoders |
|
#define DXT_ENCODE_COLOR_YCoCg 0x1A01 // make sure that value dosn't collide with anything |
|
#define DXT_ENCODE_ALPHA_1BIT 0x1A02 // normal 1-bit alpha |
|
#define DXT_ENCODE_ALPHA_8BIT 0x1A03 // normal 8-bit alpha |
|
#define DXT_ENCODE_ALPHA_SDF 0x1A04 // signed distance field |
|
#define DXT_ENCODE_NORMAL_AG_ORTHO 0x1A05 // orthographic projection |
|
#define DXT_ENCODE_NORMAL_AG_STEREO 0x1A06 // stereographic projection |
|
#define DXT_ENCODE_NORMAL_AG_PARABOLOID 0x1A07 // paraboloid projection |
|
#define DXT_ENCODE_NORMAL_AG_QUARTIC 0x1A08 // newton method |
|
#define DXT_ENCODE_NORMAL_AG_AZIMUTHAL 0x1A09 // Lambert Azimuthal Equal-Area |
|
|
|
// rgbdata output flags |
|
typedef enum |
|
{ |
|
// rgbdata->flags |
|
IMAGE_CUBEMAP = BIT(0), // it's 6-sides cubemap buffer |
|
IMAGE_HAS_ALPHA = BIT(1), // image contain alpha-channel |
|
IMAGE_HAS_COLOR = BIT(2), // image contain RGB-channel |
|
IMAGE_COLORINDEX = BIT(3), // all colors in palette is gradients of last color (decals) |
|
IMAGE_HAS_LUMA = BIT(4), // image has luma pixels (q1-style maps) |
|
IMAGE_SKYBOX = BIT(5), // only used by FS_SaveImage - for write right suffixes |
|
IMAGE_QUAKESKY = BIT(6), // it's a quake sky double layered clouds (so keep it as 8 bit) |
|
IMAGE_DDS_FORMAT = BIT(7), // a hint for GL loader |
|
IMAGE_MULTILAYER = BIT(8), // to differentiate from 3D texture |
|
IMAGE_ONEBIT_ALPHA = BIT(9), // binary alpha |
|
IMAGE_QUAKEPAL = BIT(10), // image has quake1 palette |
|
|
|
// Image_Process manipulation flags |
|
IMAGE_FLIP_X = BIT(16), // flip the image by width |
|
IMAGE_FLIP_Y = BIT(17), // flip the image by height |
|
IMAGE_ROT_90 = BIT(18), // flip from upper left corner to down right corner |
|
IMAGE_ROT180 = IMAGE_FLIP_X|IMAGE_FLIP_Y, |
|
IMAGE_ROT270 = IMAGE_FLIP_X|IMAGE_FLIP_Y|IMAGE_ROT_90, |
|
IMAGE_EMBOSS = BIT(19), // apply emboss mapping |
|
IMAGE_RESAMPLE = BIT(20), // resample image to specified dims |
|
// reserved |
|
// reserved |
|
IMAGE_FORCE_RGBA = BIT(23), // force image to RGBA buffer |
|
IMAGE_MAKE_LUMA = BIT(24), // create luma texture from indexed |
|
IMAGE_QUANTIZE = BIT(25), // make indexed image from 24 or 32- bit image |
|
IMAGE_LIGHTGAMMA = BIT(26), // apply gamma for image |
|
IMAGE_REMAP = BIT(27), // interpret width and height as top and bottom color |
|
} imgFlags_t; |
|
|
|
typedef struct rgbdata_s |
|
{ |
|
word width; // image width |
|
word height; // image height |
|
word depth; // image depth |
|
uint type; // compression type |
|
uint flags; // misc image flags |
|
word encode; // DXT may have custom encoder, that will be decoded in GLSL-side |
|
byte numMips; // mipmap count |
|
byte *palette; // palette if present |
|
byte *buffer; // image buffer |
|
rgba_t fogParams; // some water textures in hl1 has info about fog color and alpha |
|
size_t size; // for bounds checking |
|
} rgbdata_t; |
|
|
|
|