|  | /*!**************************************************************************** | 
|  |  | 
|  | @file         PVRTGlobal.h | 
|  | @copyright    Copyright (c) Imagination Technologies Limited. | 
|  | @brief        Global defines and typedefs for PVRTools | 
|  |  | 
|  | ******************************************************************************/ | 
|  | #ifndef _PVRTGLOBAL_H_ | 
|  | #define _PVRTGLOBAL_H_ | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | Macros | 
|  | *****************************************************************************/ | 
|  | #define PVRT_MIN(a,b)            (((a) < (b)) ? (a) : (b)) | 
|  | #define PVRT_MAX(a,b)            (((a) > (b)) ? (a) : (b)) | 
|  | #define PVRT_CLAMP(x, l, h)      (PVRT_MIN((h), PVRT_MAX((x), (l)))) | 
|  |  | 
|  | // avoid warning about unused parameter | 
|  | #define PVRT_UNREFERENCED_PARAMETER(x) ((void) x) | 
|  |  | 
|  | #if defined(_WIN32) && !defined(__QT__) && !defined(UNDER_CE)	/* Windows desktop */ | 
|  | #if !defined(_CRTDBG_MAP_ALLOC) | 
|  | #define _CRTDBG_MAP_ALLOC | 
|  | #endif | 
|  | #include <windows.h> | 
|  | #include <crtdbg.h> | 
|  | #include <tchar.h> | 
|  | #endif | 
|  |  | 
|  | #if defined(UNDER_CE) | 
|  | #include <windows.h> | 
|  |  | 
|  | #ifndef _ASSERT | 
|  | #ifdef _DEBUG | 
|  | #define _ASSERT(X) { (X) ? 0 : DebugBreak(); } | 
|  | #else | 
|  | #define _ASSERT(X) | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #ifndef _ASSERTE | 
|  | #ifdef _DEBUG | 
|  | #define _ASSERTE _ASSERT | 
|  | #else | 
|  | #define _ASSERTE(X) | 
|  | #endif | 
|  | #endif | 
|  | #define _RPT0(a,b) | 
|  | #define _RPT1(a,b,c) | 
|  | #define _RPT2(a,b,c,d) | 
|  | #define _RPT3(a,b,c,d,e) | 
|  | #define _RPT4(a,b,c,d,e,f) | 
|  | #else | 
|  |  | 
|  | #if defined(_WIN32) && !defined(__QT__) | 
|  |  | 
|  | #else | 
|  | #if defined(__linux__) || defined(__APPLE__) | 
|  | #include <assert.h> | 
|  | #ifdef _DEBUG | 
|  | #ifndef _RPT0 | 
|  | #define _RPT0(a,b) printf(b) | 
|  | #endif | 
|  | #ifndef _RPT1 | 
|  | #define _RPT1(a,b,c) printf(b,c) | 
|  | #endif | 
|  | #ifndef _ASSERT | 
|  | #define _ASSERT(a) assert(a) | 
|  | #endif | 
|  | #ifndef _ASSERTE | 
|  | #define _ASSERTE(a) assert(a) | 
|  | #endif | 
|  | #else | 
|  | #ifndef _RPT0 | 
|  | #define _RPT0(a,b)((void)0) | 
|  | #endif | 
|  | #ifndef _RPT1 | 
|  | #define _RPT1(a,b,c)((void)0) | 
|  | #endif | 
|  | #ifndef _ASSERT | 
|  | #define _ASSERT(a)((void)0) | 
|  | #endif | 
|  | #ifndef _ASSERTE | 
|  | #define _ASSERTE(a)((void)0) | 
|  | #endif | 
|  | #endif | 
|  | #ifndef _RPT2 | 
|  | #define _RPT2(a,b,c,d)((void)0) | 
|  | #endif | 
|  | #ifndef _RPT3 | 
|  | #define _RPT3(a,b,c,d,e)((void)0) | 
|  | #endif | 
|  | #ifndef _RPT4 | 
|  | #define _RPT4(a,b,c,d,e,f)((void)0) | 
|  | #endif | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  | #ifndef BYTE | 
|  | #define BYTE unsigned char | 
|  | #endif | 
|  | #ifndef WORD | 
|  | #define WORD unsigned short | 
|  | #endif | 
|  | #ifndef DWORD | 
|  | #define DWORD unsigned int | 
|  | #endif | 
|  | #if !defined(BOOL) && !defined(OBJC_BOOL_DEFINED) | 
|  | #define BOOL	int | 
|  | #endif | 
|  | typedef struct tagRGBQUAD { | 
|  | BYTE    rgbBlue; | 
|  | BYTE    rgbGreen; | 
|  | BYTE    rgbRed; | 
|  | BYTE    rgbReserved; | 
|  | } RGBQUAD; | 
|  | #if !defined(TRUE) | 
|  | #define TRUE 1 | 
|  | #endif | 
|  | #if !defined(FALSE) | 
|  | #define FALSE 0 | 
|  | #endif | 
|  | #else | 
|  | #define _CRT_WARN 0 | 
|  | #define _RPT0(a,b) | 
|  | #define _RPT1(a,b,c) | 
|  | #define _RPT2(a,b,c,d) | 
|  | #define _RPT3(a,b,c,d,e) | 
|  | #define _RPT4(a,b,c,d,e,f) | 
|  | #define _ASSERT(X) | 
|  | #define _ASSERTE(X) | 
|  | #endif | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #include <stdio.h> | 
|  |  | 
|  | #define FREE(X)		{ if(X) { free(X); (X) = 0; } } | 
|  |  | 
|  | // This macro is used to check at compile time that types are of a certain size | 
|  | // If the size does not equal the expected size, this typedefs an array of size 0 | 
|  | // which causes a compile error | 
|  | #define PVRTSIZEASSERT(T, size) typedef int (sizeof_##T)[sizeof(T) == (size)] | 
|  | #define PVRTCOMPILEASSERT(T, expr)	typedef int (assert_##T)[expr] | 
|  |  | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Integer types | 
|  | ****************************************************************************/ | 
|  |  | 
|  | typedef char				PVRTchar8; | 
|  | typedef signed char			PVRTint8; | 
|  | typedef signed short		PVRTint16; | 
|  | typedef signed int			PVRTint32; | 
|  | typedef unsigned char		PVRTuint8; | 
|  | typedef unsigned short		PVRTuint16; | 
|  | typedef unsigned int		PVRTuint32; | 
|  |  | 
|  | typedef float				PVRTfloat32; | 
|  |  | 
|  | #if (defined(__int64) || defined(_WIN32)) | 
|  | typedef signed __int64     PVRTint64; | 
|  | typedef unsigned __int64   PVRTuint64; | 
|  | #elif defined(__GNUC__) | 
|  | __extension__ typedef signed long long PVRTint64; | 
|  | __extension__ typedef unsigned long long PVRTuint64; | 
|  | #else | 
|  | typedef signed long long   PVRTint64; | 
|  | typedef unsigned long long PVRTuint64; | 
|  | #endif | 
|  |  | 
|  | #if __SIZEOF_WCHAR_T__  == 4 || __WCHAR_MAX__ > 0x10000 | 
|  | #define PVRTSIZEOFWCHAR 4 | 
|  | #else | 
|  | #define PVRTSIZEOFWCHAR 2 | 
|  | #endif | 
|  |  | 
|  | PVRTSIZEASSERT(PVRTchar8,   1); | 
|  | PVRTSIZEASSERT(PVRTint8,   1); | 
|  | PVRTSIZEASSERT(PVRTuint8,  1); | 
|  | PVRTSIZEASSERT(PVRTint16,  2); | 
|  | PVRTSIZEASSERT(PVRTuint16, 2); | 
|  | PVRTSIZEASSERT(PVRTint32,  4); | 
|  | PVRTSIZEASSERT(PVRTuint32, 4); | 
|  | PVRTSIZEASSERT(PVRTint64,  8); | 
|  | PVRTSIZEASSERT(PVRTuint64, 8); | 
|  | PVRTSIZEASSERT(PVRTfloat32, 4); | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @enum   ETextureFilter | 
|  | @brief  Enum values for defining texture filtering | 
|  | ****************************************************************************/ | 
|  | enum ETextureFilter | 
|  | { | 
|  | eFilter_Nearest, | 
|  | eFilter_Linear, | 
|  | eFilter_None, | 
|  |  | 
|  | eFilter_Size, | 
|  | eFilter_Default		= eFilter_Linear, | 
|  | eFilter_MipDefault	= eFilter_None | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @enum   ETextureWrap | 
|  | @brief  Enum values for defining texture wrapping | 
|  | ****************************************************************************/ | 
|  | enum ETextureWrap | 
|  | { | 
|  | eWrap_Clamp, | 
|  | eWrap_Repeat, | 
|  |  | 
|  | eWrap_Size, | 
|  | eWrap_Default = eWrap_Repeat | 
|  | }; | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** swap template function | 
|  | ****************************************************************************/ | 
|  | /*!*************************************************************************** | 
|  | @brief      	A swap template function that swaps a and b | 
|  | @param[in]		a   Type a | 
|  | @param[in]		b   Type b | 
|  | *****************************************************************************/ | 
|  |  | 
|  | template <typename T> | 
|  | inline void PVRTswap(T& a, T& b) | 
|  | { | 
|  | T temp = a; | 
|  | a = b; | 
|  | b = temp; | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief      	A clamp template function that clamps val between min and max. | 
|  | @param[in]		val		Value to clamp | 
|  | @param[in]		min		Minimum legal value | 
|  | @param[in]		max		Maximum legal value | 
|  | *****************************************************************************/ | 
|  | template <typename T> | 
|  | inline T PVRTClamp(const T& val, const T& min, const T& max) | 
|  | { | 
|  | if(val > max) | 
|  | return max; | 
|  | if(val < min) | 
|  | return min; | 
|  | return val; | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief      	Swaps the endianness of pBytes in place | 
|  | @param[in]		pBytes      A number | 
|  | @param[in]		i32ByteNo   Number of bytes in pBytes | 
|  | *****************************************************************************/ | 
|  | inline void PVRTByteSwap(unsigned char* pBytes, int i32ByteNo) | 
|  | { | 
|  | int i = 0, j = i32ByteNo - 1; | 
|  |  | 
|  | while(i < j) | 
|  | PVRTswap<unsigned char>(pBytes[i++], pBytes[j--]); | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief      	Converts the endianness of an unsigned int | 
|  | @param[in]		ui32Long    A number | 
|  | @return		ui32Long with its endianness changed | 
|  | *****************************************************************************/ | 
|  | inline unsigned int PVRTByteSwap32(unsigned int ui32Long) | 
|  | { | 
|  | return ((ui32Long&0x000000FF)<<24) + ((ui32Long&0x0000FF00)<<8) + ((ui32Long&0x00FF0000)>>8) + ((ui32Long&0xFF000000) >> 24); | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief      	Converts the endianness of a unsigned short | 
|  | @param[in]		ui16Short   A number | 
|  | @return		ui16Short with its endianness changed | 
|  | *****************************************************************************/ | 
|  | inline unsigned short PVRTByteSwap16(unsigned short ui16Short) | 
|  | { | 
|  | return (ui16Short>>8) | (ui16Short<<8); | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief      	Returns true if the platform the code is ran on is little endian | 
|  | @return		True if the platform the code is ran on is little endian | 
|  | *****************************************************************************/ | 
|  | inline bool PVRTIsLittleEndian() | 
|  | { | 
|  | static bool bLittleEndian; | 
|  | static bool bIsInit = false; | 
|  |  | 
|  | if(!bIsInit) | 
|  | { | 
|  | short int word = 0x0001; | 
|  | char *byte = (char*) &word; | 
|  | bLittleEndian = byte[0] ? true : false; | 
|  | bIsInit = true; | 
|  | } | 
|  |  | 
|  | return bLittleEndian; | 
|  | } | 
|  |  | 
|  | #endif // _PVRTGLOBAL_H_ | 
|  |  | 
|  | /***************************************************************************** | 
|  | End of file (Tools.h) | 
|  | *****************************************************************************/ | 
|  |  |