145 lines
4.3 KiB
C
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
|