#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 || type == PF_BC6H_SIGNED || type == PF_BC6H_UNSIGNED || type == PF_BC7) 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/BC1 format PF_DXT3, // s3tc DXT3/BC2 format PF_DXT5, // s3tc DXT5/BC3 format PF_ATI2, // latc ATI2N/BC5 format PF_BC6H_SIGNED, // bptc BC6H signed FP16 format PF_BC6H_UNSIGNED, // bptc BC6H unsigned FP16 format PF_BC7, // bptc BC7 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, // reserved 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;