sqwarmed/sdk_src/public/ATI_Compress.h

145 lines
4.3 KiB
C

//////////////////////////////////////////////////////////////////////////////
//
// ATI Technologies Inc.
// 1 Commerce Valley Drive East
// Markham, Ontario
// CANADA L3T 7X6
//
// File Name: ATI_Compress.h
// Description: A library to compress/decompress textures
//
// Copyright (c) 2004-2006 ATI Technologies Inc.
//
// Version: 1.4
//
// Developer: Seth Sowerby
// Email: gputools.support@amd.com
//
//////////////////////////////////////////////////////////////////////////////
#ifndef ATI_COMPRESS
#define ATI_COMPRESS
#define ATI_COMPRESS_VERSION_MAJOR 1
#define ATI_COMPRESS_VERSION_MINOR 4
typedef unsigned long ATI_TC_DWORD;
typedef unsigned short ATI_TC_WORD;
typedef unsigned char ATI_TC_BYTE;
#if defined(WIN32) || defined(_WIN64)
# define ATI_TC_API __cdecl
#else
# define ATI_TC_API
#endif
#ifdef ATI_COMPRESS_INTERNAL_BUILD
#include "ATI_Compress_Internal.h"
#else // ATI_COMPRESS_INTERNAL_BUILD
typedef enum
{
ATI_TC_FORMAT_ARGB_8888,
ATI_TC_FORMAT_ARGB_2101010,
ATI_TC_FORMAT_ARGB_16,
ATI_TC_FORMAT_ARGB_16F,
ATI_TC_FORMAT_ARGB_32F,
ATI_TC_FORMAT_DXT1,
ATI_TC_FORMAT_DXT3,
ATI_TC_FORMAT_DXT5,
ATI_TC_FORMAT_DXT5_xGBR,
ATI_TC_FORMAT_DXT5_RxBG,
ATI_TC_FORMAT_DXT5_RBxG,
ATI_TC_FORMAT_DXT5_xRBG,
ATI_TC_FORMAT_DXT5_RGxB,
ATI_TC_FORMAT_DXT5_xGxR,
ATI_TC_FORMAT_ATI1N,
ATI_TC_FORMAT_ATI2N,
ATI_TC_FORMAT_ATI2N_XY,
ATI_TC_FORMAT_ATI2N_DXT5,
ATI_TC_FORMAT_MAX = ATI_TC_FORMAT_ATI2N_DXT5
} ATI_TC_FORMAT;
typedef struct _ATI_TC_CompressOptions
{
ATI_TC_DWORD dwSize; /* Size of this structure */
/* Channel Weightings */
/* With swizzled formats the weighting applies to the data within the specified channel */
/* not the channel itself. */
BOOL bUseChannelWeighting;
double fWeightingRed; /* Weighting of the Red or X Channel */
double fWeightingGreen; /* Weighting of the Green or Y Channel */
double fWeightingBlue; /* Weighting of the Blue or Z Channel */
BOOL bUseAdaptiveWeighting; /* Adapt weighting on a per-block basis */
BOOL bDXT1UseAlpha;
ATI_TC_BYTE nAlphaThreshold;
} ATI_TC_CompressOptions;
#endif // !ATI_COMPRESS_INTERNAL_BUILD
typedef struct _ATI_TC_Texture
{
ATI_TC_DWORD dwSize; /* Size of this structure */
ATI_TC_DWORD dwWidth; /* Width of the texture */
ATI_TC_DWORD dwHeight; /* Height of the texture */
ATI_TC_DWORD dwPitch; /* Distance to start of next line - necessary only for uncompressed textures */
ATI_TC_FORMAT format; /* Format of the texture */
ATI_TC_DWORD dwDataSize; /* Size of the allocated texture data */
ATI_TC_BYTE* pData; /* Pointer to the texture data */
} ATI_TC_Texture;
typedef enum
{
ATI_TC_OK = 0,
ATI_TC_ABORTED,
ATI_TC_ERR_INVALID_SOURCE_TEXTURE,
ATI_TC_ERR_INVALID_DEST_TEXTURE,
ATI_TC_ERR_UNSUPPORTED_SOURCE_FORMAT,
ATI_TC_ERR_UNSUPPORTED_DEST_FORMAT,
ATI_TC_ERR_SIZE_MISMATCH,
ATI_TC_ERR_UNABLE_TO_INIT_CODEC,
ATI_TC_ERR_GENERIC
} ATI_TC_ERROR;
#define MINIMUM_WEIGHT_VALUE 0.01f
#ifdef __cplusplus
extern "C" {
#endif
/*
** ATI_TC_Feedback_Proc
** Feedback proc for conversion
** Return non-NULL(true) value to abort conversion
*/
typedef bool (ATI_TC_API * ATI_TC_Feedback_Proc)(float fProgress, uint32* pUser1, uint32* pUser2);
/*
** ATI_TC_CalculateBufferSize
** Calculates the required buffer size for the specified texture
*/
ATI_TC_DWORD ATI_TC_API ATI_TC_CalculateBufferSize(const ATI_TC_Texture* pTexture);
/*
** ATI_TC_ConvertTexture
** Converts the source texture to the destination texture
*/
ATI_TC_ERROR ATI_TC_API ATI_TC_ConvertTexture(const ATI_TC_Texture* pSourceTexture, /* [in] - Pointer to the source texture */
ATI_TC_Texture* pDestTexture, /* [out] - Pointer to the destination texture */
const ATI_TC_CompressOptions* pOptions, /* [in] - Pointer to the compression options - can be NULL */
ATI_TC_Feedback_Proc pFeedbackProc, /* [in] - Pointer to the feedback proc - can be NULL */
uint32* pUser1, /* [in] - User data to pass to the feedback proc */
uint32* pUser2); /* [in] - User data to pass to the feedback proc */
#ifdef __cplusplus
};
#endif
#endif // !ATI_COMPRESS