/*
 *   Copyright (c) 1997-8  S3 Inc.  All Rights Reserved.
 *
 *   Module Name:  s3_intrf.h
 *
 *   Purpose:  Constant, structure, and prototype definitions for S3TC
 *			   interface to DX surface
 *
 *   Author:  Dan Hung, Martin Hoffesommer
 *
 *   Revision History:
 *	version Beta 1.00.00-98-03-26
 */

// Highlevel interface

#ifndef NVTC_H
#define NVTC_H

#if defined( _WIN32 ) && !defined( _X360 )
#if _MSC_VER >= 1400
// This assumes that src\public is somewhere on the path
// ddraw.h doesn't actually live in the system headers in VS2005.
#include "..\dx9sdk\include\ddraw.h"
#else
#include <ddraw.h>
#endif
#endif

// RGB encoding types
#define S3TC_ENCODE_RGB_FULL    		0x0
#define S3TC_ENCODE_RGB_COLOR_KEY		0x1
#define S3TC_ENCODE_RGB_ALPHA_COMPARE	0x2
#define _S3TC_ENCODE_RGB_MASK			0xff

// alpha encoding types
#define S3TC_ENCODE_ALPHA_NONE			0x000
#define S3TC_ENCODE_ALPHA_EXPLICIT		0x100
#define S3TC_ENCODE_ALPHA_INTERPOLATED	0x200
#define _S3TC_ENCODE_ALPHA_MASK			0xff00


#if defined( _WIN32 ) && !defined( _X360 )
// common encoding types
//@@@TBD

// error codes
#define ERROR_ABORTED -1

// Progress Callback for S3TCencode
typedef BOOL (* LP_S3TC_PROGRESS_CALLBACK)(float fProgress, LPVOID lpUser1, LPVOID lpUser2);

// set alpha reference value for alpha compare encoding
void S3TCsetAlphaReference(int nRef);

// determine number of bytes needed to compress given source image
unsigned int S3TCgetEncodeSize(DDSURFACEDESC *lpDesc,	// [in]
						   unsigned int dwEncodeType 	// [in]
						   );

// encode (compress) given source image to given destination surface
void S3TCencode(DDSURFACEDESC *lpSrc,		// [in]
				PALETTEENTRY *lpPal,		// [in], may be NULL
				DDSURFACEDESC *lpDest,		// [out]
				void *lpDestBuf,			// [in]
				unsigned int dwEncodeType,  // [in]
				float *weight				// [in]
				);

int S3TCencodeEx(DDSURFACEDESC *lpSrc,		// [in]
				PALETTEENTRY *lpPal,		// [in], may be NULL
				DDSURFACEDESC *lpDest,		// [out]
				void *lpDestBuf,			// [in]
				unsigned int dwEncodeType,  // [in]
				float *weight,				// [in]
				LP_S3TC_PROGRESS_CALLBACK lpS3TCProgressProc, // [in], may be NULL
				LPVOID lpArg1,				// in 
				LPVOID lpArg2				// in 
				);

// determine number of bytes needed do decompress given compressed image
unsigned int S3TCgetDecodeSize(DDSURFACEDESC *lpDesc);

// decode (decompress) to ARGB8888
void S3TCdecode(DDSURFACEDESC *lpSrc,		// [in]
				DDSURFACEDESC *lpDest,		// [out]
				void *lpDestBuf				// [in]
				);

#endif // _WIN32

#endif // NVTC_H