| /*!**************************************************************************** | |
| @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) | |
| *****************************************************************************/ | |