mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-14 12:46:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef S3TC_DECODE_H
|
||||
#define S3TC_DECODE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "bitmap/imageformat.h"
|
||||
enum ImageFormat;
|
||||
|
||||
|
||||
class S3RGBA
|
||||
{
|
||||
public:
|
||||
unsigned char b, g, r, a;
|
||||
};
|
||||
|
||||
class S3PaletteIndex
|
||||
{
|
||||
public:
|
||||
unsigned char m_AlphaIndex;
|
||||
unsigned char m_ColorIndex;
|
||||
};
|
||||
|
||||
|
||||
#define MAX_S3TC_BLOCK_BYTES 16
|
||||
|
||||
|
||||
S3PaletteIndex S3TC_GetPixelPaletteIndex( ImageFormat format, const char *pS3Block, int x, int y );
|
||||
|
||||
void S3TC_SetPixelPaletteIndex( ImageFormat format, char *pS3Block, int x, int y, S3PaletteIndex iPaletteIndex );
|
||||
|
||||
|
||||
|
||||
// Note: width, x, and y are in texels, not S3 blocks.
|
||||
S3PaletteIndex S3TC_GetPaletteIndex(
|
||||
unsigned char *pFaceData,
|
||||
ImageFormat format,
|
||||
int imageWidth,
|
||||
int x,
|
||||
int y );
|
||||
|
||||
|
||||
// Note: width, x, and y are in texels, not S3 blocks.
|
||||
void S3TC_SetPaletteIndex(
|
||||
unsigned char *pFaceData,
|
||||
ImageFormat format,
|
||||
int imageWidth,
|
||||
int x,
|
||||
int y,
|
||||
S3PaletteIndex paletteIndex );
|
||||
|
||||
|
||||
const char* S3TC_GetBlock(
|
||||
const void *pCompressed,
|
||||
ImageFormat format,
|
||||
int nBlocksWide, // How many blocks wide is the image (pixels wide / 4).
|
||||
int xBlock,
|
||||
int yBlock );
|
||||
|
||||
|
||||
char* S3TC_GetBlock(
|
||||
void *pCompressed,
|
||||
ImageFormat format,
|
||||
int nBlocksWide, // How many blocks wide is the image (pixels wide / 4).
|
||||
int xBlock,
|
||||
int yBlock );
|
||||
|
||||
|
||||
// Merge the two palettes and copy the colors
|
||||
void S3TC_MergeBlocks(
|
||||
char **blocks,
|
||||
S3RGBA **pOriginals, // Original RGBA colors in the texture. This allows it to avoid doubly compressing.
|
||||
int nBlocks,
|
||||
int lPitch, // (in BYTES)
|
||||
ImageFormat format
|
||||
);
|
||||
|
||||
|
||||
// Convert an RGB565 color to RGBA8888.
|
||||
inline S3RGBA S3TC_RGBAFrom565( unsigned short color, unsigned char alphaValue=255 )
|
||||
{
|
||||
S3RGBA ret;
|
||||
ret.a = alphaValue;
|
||||
ret.r = (unsigned char)( (color >> 11) << 3 );
|
||||
ret.g = (unsigned char)( ((color >> 5) & 0x3F) << 2 );
|
||||
ret.b = (unsigned char)( (color & 0x1F) << 3 );
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Blend from one color to another..
|
||||
inline S3RGBA S3TC_RGBABlend( const S3RGBA &a, const S3RGBA &b, int aMul, int bMul, int div )
|
||||
{
|
||||
S3RGBA ret;
|
||||
ret.r = (unsigned char)(( (int)a.r * aMul + (int)b.r * bMul ) / div );
|
||||
ret.g = (unsigned char)(( (int)a.g * aMul + (int)b.g * bMul ) / div );
|
||||
ret.b = (unsigned char)(( (int)a.b * aMul + (int)b.b * bMul ) / div );
|
||||
ret.a = (unsigned char)(( (int)a.a * aMul + (int)b.a * bMul ) / div );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#endif // S3TC_DECODE_H
|
||||
Reference in New Issue
Block a user