|
|
//////////////////////////////////////////////////////////////////////////////
//
// 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: [email protected]
//
//////////////////////////////////////////////////////////////////////////////
#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
|