Home | History | Annotate | Download | only in Tools
      1 /*!****************************************************************************
      2 
      3  @file         PVRTGlobal.h
      4  @copyright    Copyright (c) Imagination Technologies Limited.
      5  @brief        Global defines and typedefs for PVRTools
      6 
      7 ******************************************************************************/
      8 #ifndef _PVRTGLOBAL_H_
      9 #define _PVRTGLOBAL_H_
     10 
     11 /*!***************************************************************************
     12  Macros
     13 *****************************************************************************/
     14 #define PVRT_MIN(a,b)            (((a) < (b)) ? (a) : (b))
     15 #define PVRT_MAX(a,b)            (((a) > (b)) ? (a) : (b))
     16 #define PVRT_CLAMP(x, l, h)      (PVRT_MIN((h), PVRT_MAX((x), (l))))
     17 
     18 // avoid warning about unused parameter
     19 #define PVRT_UNREFERENCED_PARAMETER(x) ((void) x)
     20 
     21 #if defined(_WIN32) && !defined(__QT__) && !defined(UNDER_CE)	/* Windows desktop */
     22 #if !defined(_CRTDBG_MAP_ALLOC)
     23 	#define _CRTDBG_MAP_ALLOC
     24 #endif
     25 	#include <windows.h>
     26 	#include <crtdbg.h>
     27 	#include <tchar.h>
     28 #endif
     29 
     30 #if defined(UNDER_CE)
     31 	#include <windows.h>
     32 
     33 #ifndef _ASSERT
     34 	#ifdef _DEBUG
     35 		#define _ASSERT(X) { (X) ? 0 : DebugBreak(); }
     36 	#else
     37 		#define _ASSERT(X)
     38 	#endif
     39 #endif
     40 
     41 #ifndef _ASSERTE
     42 	#ifdef _DEBUG
     43 		#define _ASSERTE _ASSERT
     44 	#else
     45 		#define _ASSERTE(X)
     46 	#endif
     47 #endif
     48 	#define _RPT0(a,b)
     49 	#define _RPT1(a,b,c)
     50 	#define _RPT2(a,b,c,d)
     51 	#define _RPT3(a,b,c,d,e)
     52 	#define _RPT4(a,b,c,d,e,f)
     53 #else
     54 
     55 #if defined(_WIN32) && !defined(__QT__)
     56 
     57 #else
     58 #if defined(__linux__) || defined(__APPLE__)
     59 	#include <assert.h>
     60 	#ifdef _DEBUG
     61 		#ifndef _RPT0
     62 		#define _RPT0(a,b) printf(b)
     63 		#endif
     64 		#ifndef _RPT1
     65 		#define _RPT1(a,b,c) printf(b,c)
     66 		#endif
     67 		#ifndef _ASSERT
     68 		#define _ASSERT(a) assert(a)
     69 		#endif
     70 		#ifndef _ASSERTE
     71 		#define _ASSERTE(a) assert(a)
     72 		#endif
     73 	#else
     74 		#ifndef _RPT0
     75 	    #define _RPT0(a,b)((void)0)
     76 		#endif
     77 		#ifndef _RPT1
     78 	    #define _RPT1(a,b,c)((void)0)
     79 		#endif
     80 		#ifndef _ASSERT
     81 		#define _ASSERT(a)((void)0)
     82 		#endif
     83 		#ifndef _ASSERTE
     84 		#define _ASSERTE(a)((void)0)
     85 		#endif
     86 	#endif
     87 	#ifndef _RPT2
     88 	#define _RPT2(a,b,c,d)((void)0)
     89 	#endif
     90 	#ifndef _RPT3
     91 	#define _RPT3(a,b,c,d,e)((void)0)
     92 	#endif
     93 	#ifndef _RPT4
     94 	#define _RPT4(a,b,c,d,e,f)((void)0)
     95 	#endif
     96 	#include <stdlib.h>
     97 	#include <string.h>
     98 	#ifndef BYTE
     99 		#define BYTE unsigned char
    100 	#endif
    101 	#ifndef WORD
    102 		#define WORD unsigned short
    103 	#endif
    104 	#ifndef DWORD
    105 		#define DWORD unsigned int
    106 	#endif
    107 	#if !defined(BOOL) && !defined(OBJC_BOOL_DEFINED)
    108 		#define BOOL	int
    109 	#endif
    110 	typedef struct tagRGBQUAD {
    111 	BYTE    rgbBlue;
    112 	BYTE    rgbGreen;
    113 	BYTE    rgbRed;
    114 	BYTE    rgbReserved;
    115 	} RGBQUAD;
    116 #if !defined(TRUE)
    117 	#define TRUE 1
    118 #endif
    119 #if !defined(FALSE)
    120 	#define FALSE 0
    121 #endif
    122 #else
    123 	#define _CRT_WARN 0
    124 	#define _RPT0(a,b)
    125 	#define _RPT1(a,b,c)
    126 	#define _RPT2(a,b,c,d)
    127 	#define _RPT3(a,b,c,d,e)
    128 	#define _RPT4(a,b,c,d,e,f)
    129 	#define _ASSERT(X)
    130 	#define _ASSERTE(X)
    131 #endif
    132 #endif
    133 #endif
    134 
    135 #include <stdio.h>
    136 
    137 #define FREE(X)		{ if(X) { free(X); (X) = 0; } }
    138 
    139 // This macro is used to check at compile time that types are of a certain size
    140 // If the size does not equal the expected size, this typedefs an array of size 0
    141 // which causes a compile error
    142 #define PVRTSIZEASSERT(T, size) typedef int (sizeof_##T)[sizeof(T) == (size)]
    143 #define PVRTCOMPILEASSERT(T, expr)	typedef int (assert_##T)[expr]
    144 
    145 
    146 /****************************************************************************
    147 ** Integer types
    148 ****************************************************************************/
    149 
    150 typedef char				PVRTchar8;
    151 typedef signed char			PVRTint8;
    152 typedef signed short		PVRTint16;
    153 typedef signed int			PVRTint32;
    154 typedef unsigned char		PVRTuint8;
    155 typedef unsigned short		PVRTuint16;
    156 typedef unsigned int		PVRTuint32;
    157 
    158 typedef float				PVRTfloat32;
    159 
    160 #if (defined(__int64) || defined(_WIN32))
    161 typedef signed __int64     PVRTint64;
    162 typedef unsigned __int64   PVRTuint64;
    163 #elif defined(__GNUC__)
    164 __extension__ typedef signed long long PVRTint64;
    165 __extension__ typedef unsigned long long PVRTuint64;
    166 #else
    167 typedef signed long long   PVRTint64;
    168 typedef unsigned long long PVRTuint64;
    169 #endif
    170 
    171 #if __SIZEOF_WCHAR_T__  == 4 || __WCHAR_MAX__ > 0x10000
    172 	#define PVRTSIZEOFWCHAR 4
    173 #else
    174 	#define PVRTSIZEOFWCHAR 2
    175 #endif
    176 
    177 PVRTSIZEASSERT(PVRTchar8,   1);
    178 PVRTSIZEASSERT(PVRTint8,   1);
    179 PVRTSIZEASSERT(PVRTuint8,  1);
    180 PVRTSIZEASSERT(PVRTint16,  2);
    181 PVRTSIZEASSERT(PVRTuint16, 2);
    182 PVRTSIZEASSERT(PVRTint32,  4);
    183 PVRTSIZEASSERT(PVRTuint32, 4);
    184 PVRTSIZEASSERT(PVRTint64,  8);
    185 PVRTSIZEASSERT(PVRTuint64, 8);
    186 PVRTSIZEASSERT(PVRTfloat32, 4);
    187 
    188 /*!**************************************************************************
    189  @enum   ETextureFilter
    190  @brief  Enum values for defining texture filtering
    191 ****************************************************************************/
    192 enum ETextureFilter
    193 {
    194 	eFilter_Nearest,
    195 	eFilter_Linear,
    196 	eFilter_None,
    197 
    198 	eFilter_Size,
    199 	eFilter_Default		= eFilter_Linear,
    200 	eFilter_MipDefault	= eFilter_None
    201 };
    202 
    203 /*!**************************************************************************
    204  @enum   ETextureWrap
    205  @brief  Enum values for defining texture wrapping
    206 ****************************************************************************/
    207 enum ETextureWrap
    208 {
    209 	eWrap_Clamp,
    210 	eWrap_Repeat,
    211 
    212 	eWrap_Size,
    213 	eWrap_Default = eWrap_Repeat
    214 };
    215 
    216 /****************************************************************************
    217 ** swap template function
    218 ****************************************************************************/
    219 /*!***************************************************************************
    220  @brief      	A swap template function that swaps a and b
    221  @param[in]		a   Type a
    222  @param[in]		b   Type b
    223 *****************************************************************************/
    224 
    225 template <typename T>
    226 inline void PVRTswap(T& a, T& b)
    227 {
    228 	T temp = a;
    229 	a = b;
    230 	b = temp;
    231 }
    232 
    233 /*!***************************************************************************
    234  @brief      	A clamp template function that clamps val between min and max.
    235  @param[in]		val		Value to clamp
    236  @param[in]		min		Minimum legal value
    237  @param[in]		max		Maximum legal value
    238 *****************************************************************************/
    239 template <typename T>
    240 inline T PVRTClamp(const T& val, const T& min, const T& max)
    241 {
    242 	if(val > max)
    243 		return max;
    244 	if(val < min)
    245 		return min;
    246 	return val;
    247 }
    248 
    249 /*!***************************************************************************
    250  @brief      	Swaps the endianness of pBytes in place
    251  @param[in]		pBytes      A number
    252  @param[in]		i32ByteNo   Number of bytes in pBytes
    253 *****************************************************************************/
    254 inline void PVRTByteSwap(unsigned char* pBytes, int i32ByteNo)
    255 {
    256 	int i = 0, j = i32ByteNo - 1;
    257 
    258 	while(i < j)
    259 		PVRTswap<unsigned char>(pBytes[i++], pBytes[j--]);
    260 }
    261 
    262 /*!***************************************************************************
    263  @brief      	Converts the endianness of an unsigned int
    264  @param[in]		ui32Long    A number
    265  @return		ui32Long with its endianness changed
    266 *****************************************************************************/
    267 inline unsigned int PVRTByteSwap32(unsigned int ui32Long)
    268 {
    269 	return ((ui32Long&0x000000FF)<<24) + ((ui32Long&0x0000FF00)<<8) + ((ui32Long&0x00FF0000)>>8) + ((ui32Long&0xFF000000) >> 24);
    270 }
    271 
    272 /*!***************************************************************************
    273  @brief      	Converts the endianness of a unsigned short
    274  @param[in]		ui16Short   A number
    275  @return		ui16Short with its endianness changed
    276 *****************************************************************************/
    277 inline unsigned short PVRTByteSwap16(unsigned short ui16Short)
    278 {
    279 	return (ui16Short>>8) | (ui16Short<<8);
    280 }
    281 
    282 /*!***************************************************************************
    283  @brief      	Returns true if the platform the code is ran on is little endian
    284  @return		True if the platform the code is ran on is little endian
    285 *****************************************************************************/
    286 inline bool PVRTIsLittleEndian()
    287 {
    288 	static bool bLittleEndian;
    289 	static bool bIsInit = false;
    290 
    291 	if(!bIsInit)
    292 	{
    293 		short int word = 0x0001;
    294 		char *byte = (char*) &word;
    295 		bLittleEndian = byte[0] ? true : false;
    296 		bIsInit = true;
    297 	}
    298 
    299 	return bLittleEndian;
    300 }
    301 
    302 #endif // _PVRTGLOBAL_H_
    303 
    304 /*****************************************************************************
    305  End of file (Tools.h)
    306 *****************************************************************************/
    307 
    308