diff options
Diffstat (limited to 'rwsdk/include/d3d8/rwplcore.h')
-rw-r--r-- | rwsdk/include/d3d8/rwplcore.h | 6080 |
1 files changed, 0 insertions, 6080 deletions
diff --git a/rwsdk/include/d3d8/rwplcore.h b/rwsdk/include/d3d8/rwplcore.h deleted file mode 100644 index b0ff7dfa..00000000 --- a/rwsdk/include/d3d8/rwplcore.h +++ /dev/null @@ -1,6080 +0,0 @@ -/******************************************/ -/* */ -/* RenderWare(TM) Graphics Library */ -/* */ -/******************************************/ - -/* - * This file is a product of Criterion Software Ltd. - * - * This file is provided as is with no warranties of any kind and is - * provided without any obligation on Criterion Software Ltd. - * or Canon Inc. to assist in its use or modification. - * - * Criterion Software Ltd. and Canon Inc. will not, under any - * circumstances, be liable for any lost revenue or other damages - * arising from the use of this file. - * - * Copyright (c) 1999. Criterion Software Ltd. - * All Rights Reserved. - */ - -/************************************************************************* - * - * Filename: <C:/daily/rwsdk/include/d3d8/rwplcore.h> - * Automatically Generated on: Wed Jul 10 10:45:00 2002 - * - ************************************************************************/ - -#ifndef RWPLCORE_H -#define RWPLCORE_H - -/*--- System Header Files ---*/ -#include <stdarg.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> - - -/*--- Automatically derived from: C:/daily/rwsdk/os/win/ostypes.h ---*/ -#ifndef WIN_OSTYPES_H -#define WIN_OSTYPES_H - -#define rwLITTLEENDIAN /* This is a little endian machine */ - -typedef long RwFixed; -typedef int RwInt32; -typedef unsigned int RwUInt32; -typedef short RwInt16; -typedef unsigned short RwUInt16; -typedef unsigned char RwUInt8; -typedef signed char RwInt8; - -#ifdef RWUNICODE -typedef wchar_t RwChar; -#else /* RWUNICODE */ -typedef char RwChar; -#endif /* RWUNICODE */ -typedef float RwReal; -typedef RwInt32 RwBool; - -#ifdef _MSC_VER -typedef __int64 RwInt64; -typedef unsigned __int64 RwUInt64; -#define RWZERO64 ((RwUInt64)0) -#else /* _MSC_VER */ - -typedef struct _RwUInt64 RwUInt64; -typedef struct _RwInt64 RwInt64; - -/* We'll do it with structures (can't do maths on these, but OK for allocation): */ -#ifdef rwBIGENDIAN -struct _RwUInt64 -{ - RwUInt32 top; - RwUInt32 bottom; -}; - -struct _RwInt64 -{ - RwInt32 top; - RwUInt32 bottom; -}; - -#else /* rwBIGENDIAN */ -#ifdef rwLITTLEENDIAN -struct _RwUInt64 -{ - RwUInt32 bottom; - RwUInt32 top; -}; - -struct _RwInt64 -{ - RwUInt32 bottom; - RwInt32 top; -}; - -#else /* rwLITTLEENDIAN */ -#error "ENDIAN-ness undefined!" -#endif /* rwLITTLEENDIAN */ -#endif /* rwBIGENDIAN */ - -#define RWZERO64 { (RwUInt32)0, (RwUInt32)0 } -#endif /* _MSC_VER */ - -typedef struct _RwUInt128 RwUInt128; -typedef struct _RwInt128 RwInt128; - -/* We'll do it with structures - * (can't do maths on these, but OK for allocation): */ -#ifdef rwBIGENDIAN -struct _RwUInt128 -{ - RwUInt64 top; - RwUInt64 bottom; -}; - -struct _RwInt128 -{ - RwInt64 top; - RwUInt64 bottom; -}; - -#else /* rwBIGENDIAN */ -#ifdef rwLITTLEENDIAN -struct _RwUInt128 -{ - RwUInt64 bottom; - RwUInt64 top; -}; - -struct _RwInt128 -{ - RwUInt64 bottom; - RwInt64 top; -}; - -#else /* rwLITTLEENDIAN */ -#error "ENDIAN-ness undefined!" -#endif /* rwLITTLEENDIAN */ -#endif /* rwBIGENDIAN */ - -#define RWZERO128 { RWZERO64, RWZERO64 } - -/* Limits of types */ -#define RwInt32MAXVAL 0x7FFFFFFF -#define RwInt32MINVAL 0x80000000 -#define RwUInt32MAXVAL 0xFFFFFFFF -#define RwUInt32MINVAL 0x00000000 -#define RwRealMAXVAL (RwReal)(3.40282347e+38) -#define RwRealMINVAL (RwReal)(1.17549435e-38) -#define RwInt16MAXVAL 0x7FFF -#define RwInt16MINVAL 0x8000 -#define RwUInt16MAXVAL 0xFFFF -#define RwUInt16MINVAL 0x0000 - -/* Structure alignment */ -#define RWALIGN(type, x) type /* nothing */ -#define rwMATRIXALIGNMENT sizeof(RwUInt32) -#define rwFRAMEALIGNMENT sizeof(RwUInt32) -#define rwV4DALIGNMENT sizeof(RwUInt32) - -#if (defined(_MSC_VER)) - -#if (defined(RWVERBOSE)) -#include <tchar.h> -#pragma comment (lib , "advapi32.LIB") /* Registry functions */ - -/* - * registry code - */ - -#if (defined(RpWinRegGetDWordValue)) -#undef RpWinRegGetDWordValue -#endif /* (defined(RpWinRegGetDWordValue)) */ - -#define RpWinRegGetDWordValue(_result, _hKey, _name, _val) \ -MACRO_START \ -{ \ - DWORD _size; \ - DWORD _type; \ - LONG _status; \ - \ - _status = \ - RegQueryValueEx((_hKey), (_name), 0, &_type, NULL, &_size); \ - (_result) = ((ERROR_SUCCESS == _status) && (REG_DWORD == _type)); \ - \ - if ((_result)) \ - { \ - _status = \ - RegQueryValueEx((_hKey), (_name), 0, &_type, \ - (BYTE *) (_val), &_size); \ - (_result) = (ERROR_SUCCESS == _status); \ - } \ -} \ -MACRO_STOP - -#if (defined(RpWinRegGetBinaryValue)) -#undef RpWinRegGetBinaryValue -#endif /* (defined(RpWinRegGetBinaryValue)) */ - -#define RpWinRegGetBinaryValue(_result, _hKey, _name, _val) \ -MACRO_START \ -{ \ - DWORD _size; \ - DWORD _type; \ - LONG _status; \ - \ - _status = \ - RegQueryValueEx((_hKey), (_name), 0, &_type, NULL, &_size); \ - (_result) = \ - ((ERROR_SUCCESS == _status) && \ - (REG_BINARY == _type) && (0 < _size)); \ - \ - if ((_result)) \ - { \ - *(_val) = RwMalloc(sizeof(BYTE) * _size); \ - (_result) = (NULL != *(_val)); \ - \ - if ((_result)) \ - { \ - \ - _status = \ - RegQueryValueEx((_hKey), \ - (_name), 0, &_type, \ - (BYTE *) * (_val), &_size); \ - (_result =) (ERROR_SUCCESS == _status); \ - \ - if (!(_result)) \ - { \ - RwFree(*(_val)); \ - *(_val) = NULL; \ - } \ - \ - } \ - \ - } \ -} \ -MACRO_STOP - -#if (defined(RpWinRegGetStringValue)) -#undef RpWinRegGetStringValue -#endif /* (defined(RpWinRegGetStringValue)) */ - -#define RpWinRegGetStringValue(_result, _hKey, _name, _val) \ -MACRO_START \ -{ \ - DWORD _size; \ - DWORD _type; \ - LONG _status; \ - \ - _status = \ - RegQueryValueEx((_hKey), (_name), 0, &_type, NULL, &_size); \ - (_result) = \ - ((ERROR_SUCCESS == _status) && \ - (REG_SZ == _type) && (0 < _size)); \ - \ - if ((_result)) \ - { \ - \ - *(_val) = RwMalloc(sizeof(TCHAR) * _size); \ - (_result) = (NULL != *(_val)); \ - \ - if ((_result)) \ - { \ - _status = \ - RegQueryValueEx((_hKey), (_name), 0, &_type, \ - (BYTE *) * (_val), &_size); \ - (_result) = (ERROR_SUCCESS == _status); \ - \ - if (!(_result)) \ - { \ - RwFree(*(_val)); \ - *(_val) = NULL; \ - } \ - } \ - } \ -} \ -MACRO_STOP - -/* ------------------------------------------------------------------- */ - -#define RpWinRegCloseKey(hKey) \ -MACRO_START \ -{ \ - RegCloseKey(hKey); \ -} \ -MACRO_STOP - -/* ------------------------------------------------------------------- */ - -#define RpWinRegOpenMachineKey(result) \ -MACRO_START \ -{ \ - static const TCHAR RenderWareKey[] = \ - "Software\\Criterion\\RenderWare"; \ - DWORD disposition; \ - LONG status = \ - RegCreateKeyEx(HKEY_LOCAL_MACHINE, RenderWareKey, 0, \ - REG_NONE, REG_OPTION_NON_VOLATILE, \ - KEY_READ | KEY_WRITE, \ - NULL, &result, &disposition); \ - \ - if (status != ERROR_SUCCESS) \ - { \ - result = NULL; \ - } \ -} \ -MACRO_STOP - -/* ------------------------------------------------------------------- */ - -#if (defined(RWGETWINREGDWORD)) -#undef RWGETWINREGDWORD -#endif /* (defined(RWGETWINREGDWORD)) */ - -#define RWGETWINREGDWORD(result, match) \ -MACRO_START \ -{ \ - HKEY hKey; \ - \ - RpWinRegOpenMachineKey(hKey); \ - if (hKey) \ - { \ - RwBool success; \ - \ - RpWinRegGetDWordValue(success, hKey, match, \ - &result); \ - \ - RpWinRegCloseKey(hKey); \ - } \ -} \ -MACRO_STOP - -#if (defined(RWGETWINREGBINARY)) -#undef RWGETWINREGBINARY -#endif /* (defined(RWGETWINREGBINARY)) */ - -#define RWGETWINREGBINARY(result, match) \ -MACRO_START \ -{ \ - HKEY hKey; \ - \ - result = NULL; \ - RpWinRegOpenMachineKey(hKey); \ - if (hKey) \ - { \ - RwBool success; \ - \ - RpWinRegGetBinaryValue(success, hKey, match, \ - &result, NULL); \ - \ - if (!success) \ - result = NULL; \ - \ - RpWinRegCloseKey(hKey); \ - } \ -} \ -MACRO_STOP - -#if (defined(RWGETWINREGSTRING)) -#undef RWGETWINREGSTRING -#endif /* (defined(RWGETWINREGSTRING)) */ - -#define RWGETWINREGSTRING(result, match) \ -MACRO_START \ -{ \ - HKEY hKey; \ - \ - result = NULL; \ - RpWinRegOpenMachineKey(hKey); \ - if (hKey) \ - { \ - RwBool success; \ - \ - RpWinRegGetStringValue(success, hKey, match, \ - &result); \ - \ - if (!success) \ - result = NULL; \ - \ - RpWinRegCloseKey(hKey); \ - } \ -} \ -MACRO_STOP - -#if (defined(_DEBUG)) - -#if (defined(RWREGSETBREAKALLOC)) -#undef RWREGSETBREAKALLOC -#endif /* (defined(RWREGSETBREAKALLOC)) */ - -#define RWREGSETBREAKALLOC(_name) \ -MACRO_START \ -{ \ - char _message[256]; \ - long _lBreakAlloc = -1; \ - \ - RWGETWINREGDWORD(_lBreakAlloc, _name); \ - \ - RWCRTSETBREAKALLOC(_lBreakAlloc); \ - \ - _snprintf(_message, sizeof(_message), \ - "%s(%d): RWCRTSETBREAKALLOC(%ld)\n", \ - __FILE__, __LINE__, \ - _lBreakAlloc); \ - OutputDebugString(_message); \ - \ -} \ -MACRO_STOP - -#if (defined(RWREGSETDEBUGTRACE)) -#undef RWREGSETDEBUGTRACE -#endif /* (defined(RWREGSETDEBUGTRACE)) */ - -#define RWREGSETDEBUGTRACE(_name) \ -MACRO_START \ -{ \ - char _message[256]; \ - long _lDebugtrace = 0; \ - \ - RWGETWINREGDWORD(_lDebugtrace, _name); \ - \ - RwDebugSetTraceState(_lDebugtrace); \ - \ - _snprintf(_message, sizeof(_message), \ - "%s(%d): RwDebugSetTraceState(%ld)\n", \ - __FILE__, __LINE__, \ - _lDebugtrace); \ - OutputDebugString(_message); \ - \ -} \ -MACRO_STOP - -#if (defined(_CRTDBG_FLAGS)) -#undef _CRTDBG_FLAGS -#endif /* (defined(_CRTDBG_FLAGS)) */ - -#define _CRTDBG_FLAGS \ -( _CRTDBG_ALLOC_MEM_DF || /* Turn on the debug heap allocations \ - * and use the memory block identifiers. \ - * This is the only flag that's on by default. */ \ - _CRTDBG_CHECK_ALWAYS_DF || /* Check and validate all memory \ - * on each allocation and deallocation request. \ - * Setting this flag on is what catches the \ - * under and overwrites \ - * so it is very important to \ - * get it turned on. */ \ - _CRTDBG_CHECK_CRT_DF || /* Include _CRT_BLOCK memory allocations \ - * in all leak detection and state differences. */ \ - _CRTDBG_DELAY_FREE_MEM_DF || /* Instead of truly freeing memory, \ - * keep the block allocated and \ - * in the internal heap list. \ - * The blocks are filled with the value0xDD \ - * so you know the memory is freed when \ - * looking at it in the debugger. \ - * By also not freeing the memory, \ - * this can help provide stress \ - * conditions for the program. */ \ - _CRTDBG_LEAK_CHECK_DF) /* Do memory leak checking at \ - * the end of the program. */ - -#endif /* (defined(_DEBUG)) */ -#endif /* (defined(RWVERBOSE)) */ - -#include <math.h> -/* - * Keep true calls to these functions since - * some x86 runtime libraries do not support _CIpow() etc - */ -#pragma function( acos, asin, cosh, fmod, pow, sinh , tanh ) - -#if (!defined(RWINT32FROMFLOAT)) - -static __inline RwInt32 -int32fromreal(RwReal x) -{ - RwInt16 savemode; - RwInt16 workmode; - RwInt32 res; - - _asm - { - fnstcw savemode ; get fpu mode - fld dword ptr[x] ; load rwreal x - - mov ax,savemode ; put fpu mode in register - or ah,0ch ; or-in truncate mode - - mov workmode,ax ; make ready to set fpu mode - fldcw workmode ; set fpu to truncate mode - fistp dword ptr[res]; store the rwint32eger result - fldcw savemode ; restore fpu mode - } - - return res; -} -#define RwInt32FromRealMacro(x) int32fromreal(x) - -#endif /* (!defined(RWINT32FROMFLOAT)) */ - -#if (!defined(NOASM)) -static __inline RwUInt32 -RwFastRealToUInt32(RwReal x) -{ - RwUInt32 res; - - __asm FLD DWord Ptr[x]; - __asm FISTP DWord Ptr[res]; - - return(res); -} -#endif /* (defined(NOASM)) */ - -#endif /* (defined(_MSC_VER)) */ - -#endif /* WIN_OSTYPES_H */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bamath.h ---*/ - -/**************************************************************************** - Defines - */ - -#if (!defined(RwInt32FromRealMacro)) -#define RwInt32FromRealMacro(x) \ - ((RwInt32)(x)) -#endif /* (!defined(RwInt32FromRealMacro)) */ - -#if (!defined(RwFastRealToUInt32)) -#define RwFastRealToUInt32(_x) \ - ((RwUInt32)RwInt32FromRealMacro(((RwReal)(_x)))) -#endif /* (!defined(RwFastRealToUInt32)) */ - -/* - * Ensure inclusion of prototypes for single precison maths functions - * e.g. from - * /usr/local/sce/ee/gcc/ee/include/math.h - * /Program Files/Intel/Compiler4.0/include/mathf.h - */ - -#if (defined(__ICL)) - -#if (defined(RWVERBOSE)) - -/* - * See - * http://www.eskimo.com/~scs/C-faq/q11.17.html - */ - -#define _STRINGIFY(X) #X -#define _STRINGIFY_EXP(X) _STRINGIFY(X) - -#pragma message ("Intel Compiler Version " _STRINGIFY_EXP(__ICL) ":" __FILE__ "(" _STRINGIFY_EXP(__LINE__) ")\n") -#pragma comment ( user, "comment:" "Intel Compiler Version " _STRINGIFY_EXP(__ICL) ":" __FILE__ "(" _STRINGIFY_EXP(__LINE__) ")\n") - -#endif /* (defined(RWVERBOSE)) */ - -#if (400 <= __ICL) -#if (defined(__cplusplus)) -#define _INC_MATH -#endif /* (defined(__cplusplus)) */ -#include <mathf.h> -#else /* (400 < __ICL) */ -#undef RW_USE_SPF -#endif /* (400 < __ICL) */ - -#endif /* (defined(__ICL)) */ - -#include <math.h> - -#define _RW_C1 ( (float) 4.1666667908e-02 ) -#define _RW_C2 ( (float)-1.3888889225e-03 ) -#define _RW_C3 ( (float) 2.4801587642e-05 ) -#define _RW_C4 ( (float)-2.7557314297e-07 ) -#define _RW_C5 ( (float) 2.0875723372e-09 ) -#define _RW_C6 ( (float)-1.1359647598e-11 ) -#define _RW_S1 ( (float)-1.6666667163e-01 ) -#define _RW_S2 ( (float) 8.3333337680e-03 ) -#define _RW_S3 ( (float)-1.9841270114e-04 ) -#define _RW_S4 ( (float) 2.7557314297e-06 ) -#define _RW_S5 ( (float)-2.5050759689e-08 ) -#define _RW_S6 ( (float) 1.5896910177e-10 ) -#define _RW_one ( (float) 1.0000000000e+00 ) -#define _RW_pS0 ( (float) 1.6666667163e-01 ) -#define _RW_pS1 ( (float)-3.2556581497e-01 ) -#define _RW_pS2 ( (float) 2.0121252537e-01 ) -#define _RW_pS3 ( (float)-4.0055535734e-02 ) -#define _RW_pS4 ( (float) 7.9153501429e-04 ) -#define _RW_pS5 ( (float) 3.4793309169e-05 ) -#define _RW_pi ( (float) 3.1415925026e+00 ) -#define _RW_pi_tol ( (float) 0.0312500000e+00 ) -#define _RW_pio2_hi ( (float) 1.5707962513e+00 ) -#define _RW_pio2_lo ( (float) 7.5497894159e-08 ) -#define _RW_qS1 ( (float)-2.4033949375e+00 ) -#define _RW_qS2 ( (float) 2.0209457874e+00 ) -#define _RW_qS3 ( (float)-6.8828397989e-01 ) -#define _RW_qS4 ( (float) 7.7038154006e-02 ) - -#define RwCosMinusPiToPiMacro(result, x) \ -MACRO_START \ -{ \ - const float z = x * x; \ - const float r = ( z * (_RW_C1 + \ - z * (_RW_C2 + \ - z * (_RW_C3 + \ - z * (_RW_C4 + \ - z * (_RW_C5 + \ - z * _RW_C6)))))); \ - result = (_RW_one - ((float) 0.5 * z - (z * r ))); \ -} \ -MACRO_STOP - -#define RwSinMinusPiToPiMacro(result, x) \ -do \ -{ \ - const float z = x * x; \ - const float v = z * x; \ - const float r = ( _RW_S2 + \ - z * (_RW_S3 + \ - z * (_RW_S4 + \ - z * (_RW_S5 + \ - z * _RW_S6))) ); \ - result = x + v * (_RW_S1 + z * r); \ -} \ -while(0) - -typedef union _rwIEEEFloatShapeType _rwIEEEFloatShapeType; -union _rwIEEEFloatShapeType -{ - float value; - unsigned int word; -}; - -#define _RW_GET_FLOAT_WORD(i,d) \ -do { \ - _rwIEEEFloatShapeType gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ -} while (0) - -/* Set a float from a 32 bit int. */ - -#define _RW_SET_FLOAT_WORD(d,i) \ -do { \ - _rwIEEEFloatShapeType sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ -} while (0) - -#define RwIEEEACosfMacro(result, x) \ -do \ -{ \ - float z, p, q, r, w, s, c, df; \ - int hx, ix; \ - \ - _RW_GET_FLOAT_WORD(hx, x); \ - ix = hx & 0x7fffffff; \ - if (ix >= 0x3f800000) \ - { /* |x|>=1 */ \ - if (hx > 0) \ - { \ - /* acos(1) = 0 */ \ - result = (0.0); \ - } \ - else \ - { \ - /* acos(-1)= _RW_pi */ \ - result = (_RW_pi + (float) 2.0 * _RW_pio2_lo); \ - } \ - \ - } \ - else if (ix < 0x3f000000) \ - { /* |x| < 0.5 */ \ - if (ix <= 0x23000000) \ - { \ - /*if |x|<2**-57 */ \ - result = (_RW_pio2_hi + _RW_pio2_lo); \ - } \ - else \ - { \ - z = x * x; \ - p = z * (_RW_pS0 + \ - z * (_RW_pS1 + \ - z * (_RW_pS2 + \ - z * (_RW_pS3 + \ - z * (_RW_pS4 + z * _RW_pS5))))); \ - q = _RW_one + z * (_RW_qS1 + \ - z * (_RW_qS2 + \ - z * (_RW_qS3 + z * _RW_qS4))); \ - r = p / q; \ - result = (_RW_pio2_hi - (x - (_RW_pio2_lo - x * r))); \ - } \ - \ - } \ - else if (hx < 0) \ - { /* x < -0.5 */ \ - z = (_RW_one + x) * (float) 0.5; \ - p = z * (_RW_pS0 + \ - z * (_RW_pS1 + \ - z * (_RW_pS2 + \ - z * (_RW_pS3 + \ - z * (_RW_pS4 + z * _RW_pS5))))); \ - q = _RW_one + z * (_RW_qS1 + \ - z * (_RW_qS2 + z * (_RW_qS3 + z * _RW_qS4))); \ - rwSqrtMacro(&s, z); \ - r = p / q; \ - w = r * s - _RW_pio2_lo; \ - result = (_RW_pi - (float) 2.0 * (s + w)); \ - } \ - else \ - { /* x > 0.5 */ \ - int idf; \ - \ - z = (_RW_one - x) * (float) 0.5; \ - rwSqrtMacro(&s, z); \ - df = s; \ - _RW_GET_FLOAT_WORD(idf, df); \ - _RW_SET_FLOAT_WORD(df, idf & 0xfffff000); \ - c = (z - df * df) / (s + df); \ - p = z * (_RW_pS0 + \ - z * (_RW_pS1 + \ - z * (_RW_pS2 + \ - z * (_RW_pS3 + \ - z * (_RW_pS4 + z * _RW_pS5))))); \ - q = _RW_one + z * (_RW_qS1 + \ - z * (_RW_qS2 + z * (_RW_qS3 + z * _RW_qS4))); \ - r = p / q; \ - w = r * s + c; \ - result = ((float) 2.0 * (df + w)); \ - } \ -} \ -while(0) - -#if (defined(RW_USE_SPF)) - -#define RwACos(_x) acosf(_x) -#define RwACosh(_x) acoshf(_x) -#define RwASin(_x) asinf(_x) -#define RwASinh(_x) asinhf(_x) - -#if (!defined(__ICL)) -/* - * No SPF version in - * Program Files/Intel/compilerXXX/include/mathf.h - * of atan2() - */ -#define RwATan2(_x, _y) atan2f(_x, _y) -#endif /* (!defined(__ICL)) */ - -#define RwATan(_x) atanf(_x) -#define RwATanh(_x) atanhf(_x) -#define RwCabs() cabsf() -#define RwCbrt(_x) cbrtf(_x) -#define RwCeil(_x) ceilf(_x) -#define RwCopysign(_x, _y) copysignf(_x, _y) -#define RwCos(_x) cosf(_x) -#define RwCosh(_x) coshf(_x) -#define RwDrem(_x, _y) dremf(_x, _y) -#define RwErfc(_x) erfcf(_x) -#define RwErf(_x) erff(_x) -#define RwExp(_x) expf(_x) -#define RwExpm1(_x) expm1f(_x) -#define RwFinite(_x) finitef(_x) -#define RwIlogb(_x) ilogbf(_x) -#define RwIsinf(_x) isinff(_x) -#define RwIsnan(_x) isnanf(_x) -#define RwFabs(_x) fabsf(_x) -#define RwFloor(_x) floorf(_x) -#define RwFmod(_x, _y) fmodf(_x, _y) -#define RwFrexp(_x, _iptr) frexpf(_x, _iptr) -#define RwGamma(_x) gammaf(_x) -#define RwGammaf_(_x, _iptr) gammaf_r(_x, _iptr) -#define RwHypot(_x, _y) hypotf(_x, _y) -#define RwInfinity() infinityf() -#define RwJ0(_x) j0f(_x) -#define RwJ1(_x) j1f(_x) -#define RwJn(_i, _x) jnf(_i, _x) -#define RwLdexp(_x, _i) ldexpf(_x, _i) -#define RwLgamma(_x) lgammaf(_x) -#define RwLgammaf_(_x, _iptr) lgammaf_r(_x, _iptr) -#define RwLog10(_x) log10f(_x) -#define RwLog1p(_x) log1pf(_x) -#define RwLog(_x) logf(_x) -#define RwModf(_x, _y) modff(_x, _y) -#define RwNan() nanf() -#define RwNextafter(_x, _y) nextafterf(_x, _y) -#define RwPow(_x, _y) powf(_x, _y) -#define RwRemainder(_x, _y) remainderf(_x, _y) -#define RwRint(_x) rintf(_x) -#define RwScalbn(_x, _i) scalbnf(_x, _i) -#define RwSin(_x) sinf(_x) -#define RwSinh(_x) sinhf(_x) -/* rwSqrtMacro/rwInvSqrtMacro are overloaded in drvmodel.h - * (if they are at all) and wrapped as func/macro below */ -#define RwTan(_x) tanf(_x) -#define RwTanh(_x) tanhf(_x) -#define RwY0(_x) y0f(_x) -#define RwY1(_x) y1f(_x) -#define RwYn(_i, _x) ynf(_i, _x) - -#endif /* (defined(RW_USE_SPF)) */ - -#if (!defined(RwACos)) -#define RwACos(_x) acos(_x) -#endif /* (!defined(RwACos)) */ -#if (!defined(RwACosh)) -#define RwACosh(_x) acosh(_x) -#endif /* (!defined(RwACosh)) */ -#if (!defined(RwASin)) -#define RwASin(_x) asin(_x) -#endif /* (!defined(RwASin)) */ -#if (!defined(RwASinh)) -#define RwASinh(_x) asinh(_x) -#endif /* (!defined(RwASinh)) */ -#if (!defined(RwATan2)) -#define RwATan2(_x, _y) atan2(_x, _y) -#endif /* (!defined(RwATan2)) */ -#if (!defined(RwATan)) -#define RwATan(_x) atan(_x) -#endif /* (!defined(RwATan)) */ -#if (!defined(RwATanh)) -#define RwATanh(_x) atanh(_x) -#endif /* (!defined(RwATanh)) */ -#if (!defined(RwCabs)) -#define RwCabs() cabs() -#endif /* (!defined(RwCabs)) */ -#if (!defined(RwCbrt)) -#define RwCbrt(_x) cbrt(_x) -#endif /* (!defined(RwCbrt)) */ -#if (!defined(RwCeil)) -#define RwCeil(_x) ceil(_x) -#endif /* (!defined(RwCeil)) */ -#if (!defined(RwCopysign)) -#define RwCopysign(_x, _y) copysign(_x, _y) -#endif /* (!defined(RwCopysign)) */ -#if (!defined(RwCos)) -#define RwCos(_x) cos(_x) -#endif /* (!defined(RwCos)) */ -#if (!defined(RwCosh)) -#define RwCosh(_x) cosh(_x) -#endif /* (!defined(RwCosh)) */ -#if (!defined(RwDrem)) -#define RwDrem(_x, _y) drem(_x, _y) -#endif /* (!defined(RwDrem)) */ -#if (!defined(RwErfc)) -#define RwErfc(_x) erfc(_x) -#endif /* (!defined(RwErfc)) */ -#if (!defined(RwEr)) -#define RwEr(_x) erf(_x) -#endif /* (!defined(RwEr)) */ -#if (!defined(RwExp)) -#define RwExp(_x) exp(_x) -#endif /* (!defined(RwExp)) */ -#if (!defined(RwExpm1)) -#define RwExpm1(_x) expm1(_x) -#endif /* (!defined(RwExpm1)) */ -#if (!defined(RwFinite)) -#define RwFinite(_x) finite(_x) -#endif /* (!defined(RwFinite)) */ -#if (!defined(RwIlogb)) -#define RwIlogb(_x) ilogb(_x) -#endif /* (!defined(RwIlogb)) */ -#if (!defined(RwIsin)) -#define RwIsin(_x) isinf(_x) -#endif /* (!defined(RwIsin)) */ -#if (!defined(RwIsnan)) -#define RwIsnan(_x) isnan(_x) -#endif /* (!defined(RwIsnan)) */ -#if (!defined(RwFabs)) -#define RwFabs(_x) fabs(_x) -#endif /* (!defined(RwFabs)) */ -#if (!defined(RwFloor)) -#define RwFloor(_x) floor(_x) -#endif /* (!defined(RwFloor)) */ -#if (!defined(RwFmod)) -#define RwFmod(_x, _y) fmod(_x, _y) -#endif /* (!defined(RwFmod)) */ -#if (!defined(RwFrexp)) -#define RwFrexp(_x, _iptr) frexp(_x, _iptr) -#endif /* (!defined(RwFrexp)) */ -#if (!defined(RwGamma)) -#define RwGamma(_x) gamma(_x) -#endif /* (!defined(RwGamma)) */ -#if (!defined(RwGammaf_)) -#define RwGammaf_(_x, _iptr) gammaf_r(_x, _iptr) -#endif /* (!defined(RwGammaf_)) */ -#if (!defined(RwHypot)) -#define RwHypot(_x, _y) hypot(_x, _y) -#endif /* (!defined(RwHypot)) */ -#if (!defined(RwInfinity)) -#define RwInfinity() infinity() -#endif /* (!defined(RwInfinity)) */ -#if (!defined(RwJ0)) -#define RwJ0(_x) j0(_x) -#endif /* (!defined(RwJ0)) */ -#if (!defined(RwJ1)) -#define RwJ1(_x) j1(_x) -#endif /* (!defined(RwJ1)) */ -#if (!defined(RwJn)) -#define RwJn(_i, _x) jn(_i, _x) -#endif /* (!defined(RwJn)) */ -#if (!defined(RwLdexp)) -#define RwLdexp(_x, _i) ldexp(_x, _i) -#endif /* (!defined(RwLdexp)) */ -#if (!defined(RwLgamma)) -#define RwLgamma(_x) lgamma(_x) -#endif /* (!defined(RwLgamma)) */ -#if (!defined(RwLgammaf_)) -#define RwLgammaf_(_x, _iptr) lgammaf_r(_x, _iptr) -#endif /* (!defined(RwLgammaf_)) */ -#if (!defined(RwLog10)) -#define RwLog10(_x) log10(_x) -#endif /* (!defined(RwLog10)) */ -#if (!defined(RwLog1p)) -#define RwLog1p(_x) log1p(_x) -#endif /* (!defined(RwLog1p)) */ -#if (!defined(RwLog)) -#define RwLog(_x) log(_x) -#endif /* (!defined(RwLog)) */ -#if (!defined(RwMod)) -#define RwMod(_x, _y) mod(_x, _y ) -#endif /* (!defined(RwMod)) */ -#if (!defined(RwNan)) -#define RwNan() nan() -#endif /* (!defined(RwNan)) */ -#if (!defined(RwNextafter)) -#define RwNextafter(_x, _y) nextafter(_x, _y) -#endif /* (!defined(RwNextafter)) */ -#if (!defined(RwPow)) -#define RwPow(_x, _y) pow(_x, _y) -#endif /* (!defined(RwPow)) */ -#if (!defined(RwRemainder)) -#define RwRemainder(_x, _y) remainder(_x, _y) -#endif /* (!defined(RwRemainder)) */ -#if (!defined(RwRint)) -#define RwRint(_x) rint(_x) -#endif /* (!defined(RwRint)) */ -#if (!defined(RwScalbn)) -#define RwScalbn(_x, _i) scalbn(_x, _i) -#endif /* (!defined(RwScalbn)) */ -#if (!defined(RwSin)) -#define RwSin(_x) sin(_x) -#endif /* (!defined(RwSin)) */ -#if (!defined(RwSinh)) -#define RwSinh(_x) sinh(_x) -#endif /* (!defined(RwSinh)) */ -#if (!defined(rwSqrt)) -/* NOTE: this is overloaded in drvmodel.h for some targets (SKY2 and XBOX atm) - * [we do in fact do overload w/ sqrtf there, if RW_USE_SPF, - * for D3D7, D3D8, OpenGL and SoftRas] */ -#define rwSqrt(_result, _x) rwSqrtMacro(_result, _x) -#endif /* (!defined(rwSqrt)) */ -#if (!defined(rwInvSqrt)) -/* NOTE: this is overloaded in drvmodel.h for some targets (SKY2 and XBOX atm) - * [we do in fact do overload w/ (1 / sqrtf) there, if RW_USE_SPF, - * for D3D7, D3D8, OpenGL and SoftRas] */ -#define rwInvSqrt(_recip, _x) rwInvSqrtMacro(_recip, _x) -#endif /* (!defined(rwInvSqrt)) */ -#if (!defined(RwTan)) -#define RwTan(_x) tan(_x) -#endif /* (!defined(RwTan)) */ -#if (!defined(RwTanh)) -#define RwTanh(_x) tanh(_x) -#endif /* (!defined(RwTanh)) */ -#if (!defined(RwY0)) -#define RwY0(_x) y0(_x) -#endif /* (!defined(RwY0)) */ -#if (!defined(RwY1)) -#define RwY1(_x) y1(_x) -#endif /* (!defined(RwY1)) */ -#if (!defined(RwYn)) -#define RwYn(_i, _x) yn(_i, _x) -#endif /* (!defined(RwYn)) */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/batypes.h ---*/ -#define rwLIBRARYBASEVERSION 0x31000 -#define rwLIBRARYCURRENTVERSION 0x33002 - -/* - * RWBUILDNUMBER - * This 16-bit int will be externally defined in an official build, and - * is used to construct chunk header library ID when streaming out. All - * unofficial builds will be stamped with the following:- - */ -#if !defined(RWBUILDNUMBER) -#define RWBUILDNUMBER 0xffff -#endif - -/* IMPORTANT: - * The following Doxygen comment MUST be copied into RwCore.h, - * so don't move it from here. */ - -/** - * \ingroup rwcore - * \page rwcoreoverview Core Library Overview - * - * LIBRARY: rwcore.lib - * HEADER: rwcore.h - * - * This library provides the fundamental RenderWare features. - * - * When creating a RenderWare application, this library must always be - * linked. - * - * Functionality includes: - * \li Immediate Modes (2D \ref rwim2d and 3D \ref rwim3d ) - * \li Plugin Management - * \li Base Datatypes - * \li Cameras \ref rwcamera - * \li Frames \ref rwframe - * \li the RenderWare Engine \ref rwengine - * - * RenderWare uses an object-oriented design philosophy, so this - * documentation is split across a number of objects. - * - * These objects are implemented in C, so C terminology is generally - * used, rather than C++ -- hence 'functions' instead of 'methods' and - * 'elements' instead of 'members'. - * - * If you are new to RenderWare programming, please read through the - * supplied User Guide. The RenderWare Engine \ref rwengine API is - * usually the starting point for new developers. - */ - - -#if (!defined(RWFORCEENUMSIZEINT)) -#define RWFORCEENUMSIZEINT ((RwInt32)((~((RwUInt32)0))>>1)) -#endif /* (!defined(RWFORCEENUMSIZEINT)) */ - -/* - * See - * http://www.eskimo.com/~scs/C-faq/q11.17.html - */ - -#define RW_STRINGIFY(X) #X -#define RW_STRINGIFY_EXPANDED(X) RW_STRINGIFY(X) - -/**************************************************************************** - Attributes - */ - -#if (defined(__GNUC__)) - -/* See http://www.gnu.org/software/gcc/onlinedocs/gcc_4.html#SEC91 */ - -#if (!(defined(__cplusplus) || defined(__MWERKS__) || defined(__RWUNUSED__))) -#define __RWUNUSED__ __attribute__ ((unused)) -#endif /* (!(defined(__cplusplus) || defined(__MWERKS__) || defined(__RWUNUSED__))) */ - -#if (!(defined(__RWUNUSEDRELEASE__) || defined(RWVALIDATEPARAM))) -#if (!( defined(__cplusplus) || defined(__MWERKS__) || defined(RWDEBUG))) -#define __RWUNUSEDRELEASE__ __attribute__ ((unused)) -#endif /* (!(defined(__cplusplus) || defined(__MWERKS__) || defined(RWDEBUG))) */ -#endif /* (!(defined(__RWUNUSEDRELEASE__) || defined(RWVALIDATEPARAM))) */ - -#if (!defined(__RWFORMAT__)) -#define __RWFORMAT__(_archetype, _string_index, _first_to_check) \ - __attribute__ ((format (_archetype, _string_index, _first_to_check))) -#endif /* (!defined(__RWFORMAT__)) */ - -#endif /* (defined(__GNUC__)) */ - -#if (!defined(__RWUNUSED__)) -#define __RWUNUSED__ /* No op */ -#endif /* (!defined(__RWUNUSED__)) */ - -#if (!defined(__RWUNUSEDRELEASE__)) -#define __RWUNUSEDRELEASE__ /* No op */ -#endif /* (!defined(__RWUNUSEDRELEASE__)) */ - -#if (!defined(__RWFORMAT__)) -#define __RWFORMAT__(_archetype, _string_index, _first_to_check) /* No op */ -#endif /* (!defined(__RWFORMAT__)) */ - -/**************************************************************************** - Calling conventions - */ - -#if (defined(WIN32)) -#define RWASMCALL __cdecl -#define RWASMAPI(TYPE) TYPE RWASMCALL -#endif /* (defined(WIN32)) */ - -#if (!defined(RWASMCALL)) -#define RWASMCALL /* No op */ -#endif /* (!defined(RWASMCALL)) */ - -#if (!defined(RWASMAPI)) -#define RWASMAPI(TYPE) TYPE -#endif /* (!defined(RWASMAPI)) */ - - -/* Maximum number of nested contexts */ -#define rwMAXPIPECONTEXT 10 - - -/**************************************************************************** - Macro wrappers. These are needed everywhere. - */ - -#ifndef MACRO_START -#define MACRO_START do -#endif /* MACRO_START */ - -#ifndef MACRO_STOP -#define MACRO_STOP while(0) -#endif /* MACRO_STOP */ - -/**************************************************************************** - Types needed everywhere - */ - -#ifdef FALSE -#undef FALSE -#endif -#define FALSE 0 - -#ifdef TRUE -#undef TRUE -#endif -#define TRUE !FALSE - -/**************************************************************************** - MS VC/C++ Specific - */ - -#if (defined(_MSC_VER)) -#if (_MSC_VER>=1000) - - -/* - * Check for correct compiler version - */ -#define RW_MSC_VER 1200 - -#if (0 && !defined(RW_NO_COMPILER_CHECK)) -#if (_MSC_VER != RW_MSC_VER ) -# pragma message (__FILE__ "(" RW_STRINGIFY_EXPANDED(__LINE__) "):" "\n This compiler is a different version (" RW_STRINGIFY_EXPANDED(_MSC_VER) ")\n to the compiler used to build the RenderWare product libraries (" RW_STRINGIFY_EXPANDED(RW_MSC_VER) ") \n To turn off this warning please define RW_NO_COMPILER_CHECK " ) -# pragma comment ( user, "comment:" __FILE__ "(" RW_STRINGIFY_EXPANDED(__LINE__) "):" "\n This compiler is a different version (" RW_STRINGIFY_EXPANDED(_MSC_VER) ")\n to the compiler used to build the RenderWare product libraries (" RW_STRINGIFY_EXPANDED(RW_MSC_VER) ") \n To turn off this warning please define RW_NO_COMPILER_CHECK " ) -#endif /* (_MSC_VER != RW_MSC_VER ) */ -#endif /* (0 && !defined(RW_NO_COMPILER_CHECK)) */ - -/* - * Output some compiler messages and object file comments - */ - -#pragma comment ( compiler ) - -#pragma comment ( user, "comment:" __DATE__" " __TIME__ " - " __FILE__ "(" RW_STRINGIFY_EXPANDED(__LINE__) ")") -#pragma comment ( user, "comment:" " _MSC_VER==" RW_STRINGIFY_EXPANDED(_MSC_VER) "; _M_IX86==" RW_STRINGIFY_EXPANDED(_M_IX86)) -#if (defined(rwLIBRARYCURRENTVERSION)) -#pragma comment ( user, "comment:" "rwLIBRARYCURRENTVERSION:" RW_STRINGIFY_EXPANDED(rwLIBRARYCURRENTVERSION) ) -#endif /* (defined(rwLIBRARYCURRENTVERSION)) */ - -#if (defined(RWDEBUG) && defined(RWVERBOSE)) - -/* #include <windows.h> */ -#if (defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) -#define _CRTDBG_MAP_ALLOC -#endif /* defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) */ -#include <crtdbg.h> - -#pragma message (__DATE__" " __TIME__ " - " __FILE__ "(" RW_STRINGIFY_EXPANDED(__LINE__) ")" ) -#pragma message ("_MSC_VER==" RW_STRINGIFY_EXPANDED(_MSC_VER) "; _M_IX86==" RW_STRINGIFY_EXPANDED(_M_IX86)) - -#if (defined(rwLIBRARYCURRENTVERSION)) -#pragma message ( "rwLIBRARYCURRENTVERSION:" RW_STRINGIFY_EXPANDED(rwLIBRARYCURRENTVERSION) ) -#endif /* (defined(rwLIBRARYCURRENTVERSION)) */ - -#endif /* (defined(RWDEBUG) && defined(RWVERBOSE) ) */ - -#endif /* (_MSC_VER>=1000) */ -#endif /* (defined(_MSC_VER)) */ - -/*******************/ -/* Primitive types */ -/*******************/ - -/* String construction stuff (gets us UNICODE support) */ -#ifdef RWUNICODE -#define _RWSTRING(x) L ## x -#else /* RWUNICODE */ -#define _RWSTRING(x) x -#endif /* RWUNICODE */ -#define RWSTRING(x) _RWSTRING(x) - -/* NB volatile keyword required for VC5.0 to ensure a reload - AMB */ -typedef union RwSplitBits RwSplitBits; -union RwSplitBits -{ - RwReal nReal; - volatile RwInt32 nInt; - volatile RwUInt32 nUInt; -}; - -typedef struct RwSplitFixed RwSplitFixed; - -#ifdef rwBIGENDIAN -struct RwSplitFixed -{ - RwInt16 integral; - RwUInt16 fractional; -}; - -#else /* rwBIGENDIAN */ -#ifdef rwLITTLEENDIAN -struct RwSplitFixed -{ - RwUInt16 fractional; - RwInt16 integral; -}; - -#else /* rwLITTLEENDIAN */ -#error "ENDIAN-ness undefined!" -#endif /* rwLITTLEENDIAN */ -#endif /* rwBIGENDIAN */ - -typedef union RwUnionReal RwUnionReal; -union RwUnionReal /* MSB is sign bit in any circumstance */ -{ - RwReal real; /* 4 bytes interpreted as RwReal */ - float floating; /* 4 bytes interpreted as float */ - RwFixed fixed; /* 4 bytes interpreted as 16:16 fixed */ - RwSplitFixed splitfixed; /* 4 bytes interpreted as 16:16 fixed */ -}; - -/*****************/ - -/* Complex types */ - -/*****************/ - -/** - * \ingroup datatypes - * \typedef RwV2d - * typedef for struct RwV2d - */ -typedef struct RwV2d RwV2d; -/** - * \ingroup datatypes - * \struct RwV2d - * This type represents points in a 2D space, such as device - * space, specified by the (x, y) coordinates of the point. - */ -struct RwV2d -{ - RwReal x; /**< X value*/ - RwReal y; /**< Y vlaue */ -}; - -/** - * \ingroup datatypes - * \typedef RwV3d - * typedef for struct RwV3d - */ -typedef struct RwV3d RwV3d; -/** - * \ingroup datatypes - * \struct RwV3d - * This type represents 3D points and vectors specified by - * the (x, y, z) coordinates of a 3D point or the (x, y, z) components of a - * 3D vector. - */ -struct RwV3d -{ - RwReal x; /**< X value */ - RwReal y; /**< Y value */ - RwReal z; /**< Z value */ -}; - -#define RWV4DALIGNMENT(_v4d) \ - (! (((rwV4DALIGNMENT)-1) & ((RwUInt32)(_v4d)))) - -/** - * \ingroup datatypes - * \struct RwV4d - * This type represents 4D points and vectors specified by - * the (x, y, z, w) coordinates of a 4D point or the (x, y, z, w) components of a - * 4D vector. - */ -struct RwV4d -{ - RwReal x; /**< X value */ - RwReal y; /**< Y value */ - RwReal z; /**< Z value */ - RwReal w; /**< W value */ -}; - -/** - * \ingroup datatypes - * \typedef RwV4d - * typedef for struct RwV4d - */ -typedef struct RwV4d RWALIGN(RwV4d, rwV4DALIGNMENT); - - -/** - * \ingroup datatypes - * \typedef RwRect - * typedef for struct RwRect - */ -typedef struct RwRect RwRect; -/** - * \ingroup datatypes - * \struct RwRect - * This type represents a 2D device space rectangle specified - * by the position of the top-left corner (the offset x, y) and its width (w) - * and height (h). - */ -struct RwRect -{ - RwInt32 x; /**< X value of the top-left corner */ - RwInt32 y; /**< Y value of the top-left corner */ - RwInt32 w; /**< Width of the rectangle */ - RwInt32 h; /**< Height of the rectangle */ -}; - -/** - * \ingroup datatypes - * \typedef RwSphere - * typedef for struct RwSphere - */ -typedef struct RwSphere RwSphere; -/** - * \ingroup datatypes - * \struct RwSphere - * This type represents a sphere specified by the position - * of its center and its radius - */ -struct RwSphere -{ - RwV3d center; /**< Sphere center */ - RwReal radius; /**< Sphere radius */ -}; - -#if (!defined(RwSphereAssign)) -#define RwSphereAssign(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwSphereAssign)) */ - -/** - * \ingroup datatypes - * \typedef RwLine - * typedef for struct RwLine - */ -typedef struct RwLine RwLine; -/** - * \ingroup datatypes - * \struct RwLine - * This type represents a 3D line specified by the position - * of its start and end points. - */ -struct RwLine -{ - RwV3d start; /**< Line start */ - RwV3d end; /**< Line end */ -}; - -#if (!defined(RwLineAssign)) -#define RwLineAssign(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwLineAssign)) */ - -/* The maximum number of texture coordinates */ -#define rwMAXTEXTURECOORDS 8 - -/** - * \ingroup datatypes - * RwTextureCoordinateIndex - * This type represents the index for texture coordinates. - */ -enum RwTextureCoordinateIndex -{ - rwNARWTEXTURECOORDINATEINDEX = 0, - rwTEXTURECOORDINATEINDEX0, - rwTEXTURECOORDINATEINDEX1, - rwTEXTURECOORDINATEINDEX2, - rwTEXTURECOORDINATEINDEX3, - rwTEXTURECOORDINATEINDEX4, - rwTEXTURECOORDINATEINDEX5, - rwTEXTURECOORDINATEINDEX6, - rwTEXTURECOORDINATEINDEX7, - rwTEXTURECOORDINATEINDEXFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwTextureCoordinateIndex RwTextureCoordinateIndex; - -/** - * \ingroup datatypes - * \typedef RwTexCoords - * typedef for struct RwTexCoords - */ -typedef struct RwTexCoords RwTexCoords; -/** - * \ingroup datatypes - * \struct RwTexCoords - * This type represents the the u and v texture - * coordinates of a particular vertex. - */ -struct RwTexCoords -{ - RwReal u; /**< U value */ - RwReal v; /**< V value */ -}; - - -/* Singley linked list macros. End marked as NULL */ - -typedef struct RwSLLink RwSLLink; /*** RwSLLink ***/ -struct RwSLLink -{ - RwSLLink *next; -}; - -#define rwSLLinkGetData(link,type,entry) \ - ((type *)(((RwUInt8 *)(link))-offsetof(type,entry))) - -#define rwSLLinkGetConstData(link,type,entry) \ - ((const type *)(((const RwUInt8 *)(link))-offsetof(type,entry))) - -#define rwSLLinkInitialize(linkvar) \ - (linkvar)->next = NULL; - -#define rwSLLinkGetNext(linkvar) \ - ((linkvar)->next) - -typedef struct RwSingleList RwSingleList; -struct RwSingleList -{ - RwSLLink link; -}; - -#define rwSingleListInitialize(list) \ - (list)->link.next= NULL; -#define rwSingleListEmpty(list) \ - (((list)->link.next)==NULL) -#define rwSingleListAddSLLink(list,linkvar) \ - ( (linkvar)->next = (list)->link.next, \ - (list)->link.next = (linkvar) ) -#define rwSingleListGetFirstSLLink(list) \ - ((list)->link.next) -#define rwSingleListGetTerminator(list) (NULL) - -/* Doubly linked list. End marked as start (its a ring) */ - -typedef struct RwLLLink RwLLLink; /*** RwLLLink ***/ -struct RwLLLink -{ - RwLLLink *next; - RwLLLink *prev; -}; - -#define rwLLLinkGetData(linkvar,type,entry) \ - ((type *)(((RwUInt8 *)(linkvar))-offsetof(type,entry))) - -#define rwLLLinkGetConstData(linkvar,type,entry) \ - ((const type *)(((const RwUInt8 *)(linkvar))-offsetof(type,entry))) - -#define rwLLLinkGetNext(linkvar) \ - ((linkvar)->next) - -#define rwLLLinkGetPrevious(linkvar) \ - ((linkvar)->prev) - -#define rwLLLinkInitialize(linkvar) \ - ( (linkvar)->prev = (RwLLLink *)NULL, \ - (linkvar)->next = (RwLLLink *)NULL ) - -#define rwLLLinkAttached(linkvar) \ - ((linkvar)->next) - -typedef struct RwLinkList RwLinkList; -struct RwLinkList -{ - RwLLLink link; -}; - -#define rwLinkListInitialize(list) \ - ( (list)->link.next = ((RwLLLink *)(list)), \ - (list)->link.prev = ((RwLLLink *)(list)) ) -#define rwLinkListEmpty(list) \ - (((list)->link.next) == (&(list)->link)) -#define rwLinkListAddLLLink(list, linkvar) \ - ( (linkvar)->next = (list)->link.next, \ - (linkvar)->prev = (&(list)->link), \ - ((list)->link.next)->prev = (linkvar), \ - (list)->link.next = (linkvar) ) -#define rwLinkListRemoveLLLink(linkvar) \ - ( ((linkvar)->prev)->next = (linkvar)->next, \ - ((linkvar)->next)->prev = (linkvar)->prev ) -#define rwLinkListGetFirstLLLink(list) \ - ((list)->link.next) -#define rwLinkListGetLastLLLink(list) \ - ((list)->link.prev) -#define rwLinkListGetTerminator(list) \ - (&((list)->link)) - -/** - * \ingroup datatypes - * \typedef RwSurfaceProperties - * typedef for struct RwSurfaceProperties - */ -typedef struct RwSurfaceProperties RwSurfaceProperties; -/** - * \ingroup datatypes - * \struct RwSurfaceProperties - * This type represents the ambient, diffuse and - * specular reflection coefficients of a particular geometry. Each coefficient - * is specified in the range 0.0 (no reflection) to 1.0 (maximum reflection). - */ -struct RwSurfaceProperties -{ - RwReal ambient; /**< ambient reflection coefficient */ - RwReal specular; /**< specular reflection coefficient */ - RwReal diffuse; /**< reflection coefficient */ -}; - -#if (!defined(RwSurfacePropertiesAssign)) -#define RwSurfacePropertiesAssign(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwSurfacePropertiesAssign)) */ - -/********** - * Macros * - **********/ - -/* ANSI C defines the offsetof(type,member) macro; should be in <stddef.h> */ - -/* If not, fall back to this: */ -#ifndef offsetof -#define offsetof(type, member) \ - ((size_t)((RwUInt8 *)&((type *) 0)->member - (RwUInt8 *)((type *) 0))) -#endif /* offsetof */ - -/* - * - * Numeric Macros to handle Fixed/Floating point versions of RenderWare - * - */ -#define RWFIX_MIN (1) -#define RWFIX_MAX (0x7fffffff) -#define RwFixedCast(A) (RwInt32FromRealMacro((A) * 65536.0f)) -#define RwFixedToInt(A) ((A) >> 16) -#define RwFixedToFloat(A) ((float)(((float)(A)) * (1.0f / 65536.0f))) -#define RwFixedToReal(a) ((RwReal)(((RwReal)(a)) * (1.0f / 65536.0f))) -#define RwRealToFixed(a) (RwInt32FromRealMacro((a) * 65536.0f)) -#define RwRealAbs(a) ((RwReal)((a) >= (RwReal)(0.0) ? (a) : (-(a)))) -#define RwRealMin2(a,b) ((RwReal)( ((a) <= (b)) ? (a) : (b))) -#define RwRealMax2(a,b) ((RwReal)( ((a) >= (b)) ? (a) : (b))) -#define RwRealMin3(a,b,c) RwRealMin2(a,RwRealMin2(b,c)) -#define RwRealMax3(a,b,c) RwRealMax2(a,RwRealMax2(b,c)) - -#ifndef NORWREALSHORTCUT -#define RToFixed RwRealToFixed -#define RAbs RwRealAbs -#define FxCast RwFixedCast -#define FxToInt RwFixedToInt -#define FxToFloat RwFixedToFloat -#define FxToReal RwFixedToFloat - -#endif - -#ifndef rwPI -#define rwPI ((RwReal)(3.1415926535f)) -#define rwPIOVER2 (rwPI / (RwReal)(2.0f)) -#endif -#define RWRGBALONG(r,g,b,a) \ - ((RwUInt32) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))) - -/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - RwPlane - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ - - -/* - * typedef for struct RwPlane - */ -typedef struct RwPlane RwPlane; -/* - * This type represents a plane - */ -struct RwPlane -{ - RwV3d normal; /**< Normal to the plane */ - RwReal distance; /**< Distance to plane from origin in normal direction*/ -}; - - -/**************************************************************************** - Defines - */ - -enum RwPlaneType -{ - rwXPLANE = 0, /* These are deliberately multiples of sizeof(RwReal) */ - rwYPLANE = 4, - rwZPLANE = 8, - rwPLANETYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwPlaneType RwPlaneType; - -#define rwSECTORATOMIC -1 -#define rwSECTORBUILD -2 /* Only used when building a world */ - -/* vect is a RwV3d, y is the component */ -#define GETCOORD(vect,y) \ - (*(RwReal *)(((RwUInt8 *)(&((vect).x)))+(RwInt32)(y))) -#define GETCONSTCOORD(vect,y) \ - (*(const RwReal *)(((const RwUInt8 *)(&((vect).x)))+(RwInt32)(y))) -#define SETCOORD(vect,y,value) \ - (((*(RwReal *)(((RwUInt8 *)(&((vect).x)))+(RwInt32)(y))))=(value)) -#define SETCONTCOORD(vect,y,value) \ - (((*(const RwReal *) \ - (((const RwUInt8 *) \ - (&((vect).x)))+(RwInt32)(y))))=(value)) -#define GETCOORDINT(vect,y) \ - (*(RwInt32 *)(((RwUInt8 *)(&((vect).x)))+(y))) -#define GETCONSTCOORDINT(vect,y) \ - (*(const RwInt32 *)(((const RwUInt8 *)(&((vect).x)))+(y))) - - -/** - * \ingroup rwcore - * \page inttypes Integer Types - * - * RenderWare supports a number of integer types: - * - * RwInt8 8-bit signed integer. - * \li RwUInt8 8-bit unsigned integer. - * \li RwChar Character type. - * \li RwInt16 16-bit signed integer. - * \li RwUInt16 16-bit unsigned integer. - * \li RwInt32 32-bit signed integer. - * \li RwUInt32 32-bit unsigned integer. - * \li RwInt64 64-bit signed integer. - * \li RwUInt64 64-bit unsigned integer. - * \li RwInt128 128-bit signed integer. - * \li RwUInt128 128-bit unsigned integer. - * \li RwBool Boolean type (in 32 bits). - * - * These types should be used in applications in preference to the underlying - * native types. - * - * The following constants indicate the maximum and minimum values possible - * for the various RenderWare integer types: - * - * \li RwInt32MAXVAL Maximum RwInt32 value. - * \li RwInt32MINVAL Minimum RwInt32 value. - * \li RwUInt32MAXVAL Maximum RwUInt32 value. - * \li RwUInt32MINVAL Minimum RwUInt32 value. - * \li RwInt16MAXVAL Maximum RwInt16 value. - * \li RwInt16MINVAL Minimum RwInt16 value. - * \li RwUInt16MAXVAL Maximum RwUInt16 value. - * \li RwUInt16MINVAL Minimum RwUInt16 value. - * - * \see RwReal - */ - -/** - * \ingroup datatypes - * \typedef RwReal - * - * RenderWare supports a single RwReal floating-point type to aid portability - * across platforms. This type should be used in applications in preference to - * the underlying native type. - * - * The constants RwRealMAXVAL and RwRealMINVAL are provided for determining - * the maximum and minimum values possible using the RwReal type. - * - * In addition, the following macros are available for operations on RwReal - * types: - * \li RwRealMin2(a, b) Find the minimum of two RwReal values. - * \li RwRealMax2(a, b) Find the maximum of two RwReal values. - * \li RwRealMin3(a, b, c) Find the minimum of three RwReal values. - * \li RwRealMax3(a, b, c) Find the maximum of three RwReal values. - * \li RwRealAbs(x) Find the absolute value of a RwReal value. - * - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwFixed - * - * RenderWare supports a single RwFixed fixed-point type. - * - * Although popular in the days when integer mathematics was much faster than - * floating point mathematics, fixed-point math is now rarely used. It is - * provided because it is still useful for some processes. - * - * The maximum and minimum size of an RwFixed value are defined by the constants - * RWFIX_MAX and RWFIX_MIN respectively. - * - * The following macros are provided to help you work with RwFixed datatypes: - * \li RwFixedCast(x) Cast the integer portion of an RwFixed to another type. - * \li RwFixedToInt(x) Convert an RwFixed to an integer. (The fractional portion is lost.) - * \li RwFixedToFloat(x) Convert an RwFixed to a float. - * \li RwFixedToReal(x) Convert an RwFixed to an RwReal. - * \li RwRealToFixed(x) Convert an RwReal to an RwFixed. (Some precision may be lost.) - */ - -/** - * \ingroup datatypes - * \typedef RwInt8 - * - * Signed 8 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwUInt8 - * - * Unsigned 8bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwChar - * - * Character type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwInt16 - * - * Signed 16 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwUInt16 - * - * Unsigned 16 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwInt32 - * - * Signed 32 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwUInt32 - * - * Unsigned 32 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwInt64 - * - * Signed 64 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwUInt64 - * - * Unsigned 64 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwInt128 - * - * Signed 128 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwUInt128 - * - * Unsigned 128 bit integer type. - * \see \ref inttypes - */ - -/** - * \ingroup datatypes - * \typedef RwBool - * - * Boolean type. - * \see \ref inttypes - */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/batype.h ---*/ -/**************************************************************************** - Defines -*/ - -/* - * Object Types - these are used in the binary object - * representations and in the debug library. They must - * be unique. They are the old system. - */ - -#define rwID_DATABASE 0x64617462 /* datb */ - -#define MAKECHUNKID(vendorID, chunkID) (((vendorID & 0xFFFFFF) << 8) | (chunkID & 0xFF)) -#define GETOBJECTID(chunkID) (chunkID & 0xFF) -#define GETVENDORID(chunkID) ((chunkID >> 8) & 0xFFFFFF) - -/*** - *** These are the vendor IDs. A customer must reserve a vendor ID in order - *** to be able to write toolkits (this prevents clashes between toolkits). - *** We reserve some for our own use as shown below. These are all 24 bit. - *** - *** IMPORTANT NOTE: DO NOT UNDER ANY CIRCUMSTANCES CHANGE THESE VALUES. IF - *** YOU ARE ADDING A NEW ONE, APPEND IT! - *** - *** They must all be unique. - ***/ - -enum RwPluginVendor -{ - rwVENDORID_CORE = 0x000000L, - rwVENDORID_CRITERIONTK = 0x000001L, - rwVENDORID_REDLINERACER = 0x000002L, - rwVENDORID_CSLRD = 0x000003L, - rwVENDORID_CRITERIONINT = 0x000004L, - rwVENDORID_CRITERIONWORLD = 0x000005L, - rwVENDORID_BETA = 0x000006L, - rwVENDORID_CRITERIONRM = 0x000007L, - rwVENDORID_CRITERIONRWA = 0x000008L, /* RenderWare Audio */ - rwPLUGINVENDORFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwPluginVendor RwPluginVendor; - -/*** - *** These are the core objects (8 bit IDs). They must all be unique. - *** We can get away without using the MAKECHUNKID macro because the - *** vendor ID in all cases will be zero (rwVENDORID_CORE). - *** - *** IMPORTANT NOTE: DO NOT UNDER ANY CIRCUMSTANCES CHANGE THESE VALUES. IF - *** YOU ARE ADDING A NEW ONE, APPEND IT! - ***/ - -/* These are the internal ones. Because the core ID is 0, we can get away without - * using the MAKECHUNKID macro for the CORE chunks. - */ - -enum RwCorePluginID -{ - rwID_NAOBJECT = 0x00, - rwID_STRUCT = 0x01, - rwID_STRING = 0x02, - rwID_EXTENSION = 0x03, - rwID_CAMERA = 0x05, - rwID_TEXTURE = 0x06, - rwID_MATERIAL = 0x07, - rwID_MATLIST = 0x08, - rwID_ATOMICSECT = 0x09, - rwID_PLANESECT = 0x0A, - rwID_WORLD = 0x0B, - rwID_SPLINE = 0x0C, - rwID_MATRIX = 0x0D, - rwID_FRAMELIST = 0x0E, - rwID_GEOMETRY = 0x0F, - rwID_CLUMP = 0x10, - rwID_LIGHT = 0x12, - rwID_UNICODESTRING = 0x13, - rwID_ATOMIC = 0x14, - rwID_TEXTURENATIVE = 0x15, - rwID_TEXDICTIONARY = 0x16, - rwID_ANIMDATABASE = 0x17, - rwID_IMAGE = 0x18, - rwID_SKINANIMATION = 0x19, - rwID_GEOMETRYLIST = 0x1A, - rwID_HANIMANIMATION = 0x1B, - rwID_TEAM = 0x1C, - rwID_CROWD = 0x1D, - rwID_DMORPHANIMATION = 0x1E, - rwID_RIGHTTORENDER = 0x1f, - rwID_MTEFFECTNATIVE = 0x20, - rwID_MTEFFECTDICT = 0x21, - rwID_TEAMDICTIONARY = 0x22, - rwID_PITEXDICTIONARY = 0x23, - rwID_TOC = 0x24, - rwID_PRTSTDGLOBALDATA = 0x25, - /* Insert before MAX and increment MAX */ - rwID_COREPLUGINIDMAX = 0x26, - rwCOREPLUGINIDFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwCorePluginID RwCorePluginID ; - -/*** - *** These are the Criterion internal plugin extensions. Use with rwVENDORID_CRITERIONINT. - *** - *** IMPORTANT NOTE: DO NOT UNDER ANY CIRCUMSTANCES CHANGE THESE VALUES. IF - *** YOU ARE ADDING A NEW ONE, APPEND IT! - ***/ - -enum RwCriterionPluginID -{ - rwID_COREPLUGIN = 0x01, - rwID_WORLDPLUGIN = 0x02, - rwID_TOOLPLUGIN = 0x03, - rwID_TOOL2PLUGIN = 0x04, - rwCRITERIONPLUGINIDFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwCriterionPluginID RwCriterionPluginID; - - -/*** - *** These are the Criterion internal platform identifies. - *** - *** IMPORTANT NOTE: DO NOT UNDER ANY CIRCUMSTANCES CHANGE THESE VALUES. IF - *** YOU ARE ADDING A NEW ONE, APPEND IT! - ***/ -enum RwPlatformID -{ - rwID_PCD3D7 = 1, - rwID_PCOGL, - rwID_MAC, - rwID_PS2, - rwID_XBOX, - rwID_GAMECUBE, - rwID_SOFTRAS, - rwID_PCD3D8, - rwPLATFROMIDFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwPlatformID RwPlatformID; - - -/**************************************************************************** - Global Types - */ - -typedef struct RwObject RwObject; -/** - * \ingroup datatypes - * \struct RwObject - * This should be considered an opaque type. Use - * the RwObject API functions to access. - */ -struct RwObject -{ - RwUInt8 type; /**< Internal Use */ - RwUInt8 subType; /**< Internal Use */ - RwUInt8 flags; /**< Internal Use */ - RwUInt8 privateFlags; /**< Internal Use */ - void *parent; /**< Internal Use */ - /* Often a Frame */ -}; - -/** - * \ingroup datatypes - * \typedef RwObjectCallBack - * callback function supplied for object callback functions. - * - * \return Pointer to the current object - * - * \param object Pointer to the current object, supplied by - * iterator. - * \param data Pointer to developer-defined data structure. - * - * \see RwFrameForAllObjects - * - */ -typedef RwObject *(*RwObjectCallBack)(RwObject *object, void *data); - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* TYPE METHODS */ - -/* Creation/cloning */ - -#define rwObjectCopy(d,s) \ -MACRO_START \ -{ \ - ((RwObject *)(d))->type = \ - ((const RwObject *)(s))->type; \ - ((RwObject *)(d))->subType = \ - ((const RwObject *)(s))->subType; \ - ((RwObject *)(d))->flags = \ - ((const RwObject *)(s))->flags; \ - ((RwObject *)(d))->privateFlags = \ - ((const RwObject *)(s))->privateFlags; \ - ((RwObject *)(d))->parent = \ - NULL; \ -} \ -MACRO_STOP - -#define rwObjectInitialize(o, t, s) \ -MACRO_START \ -{ \ - ((RwObject *)(o))->type = (RwUInt8)(t); \ - ((RwObject *)(o))->subType = (RwUInt8)(s); \ - ((RwObject *)(o))->flags = 0; \ - ((RwObject *)(o))->privateFlags = 0; \ - ((RwObject *)(o))->parent = NULL; \ -} \ -MACRO_STOP - -/* Debug */ -#define RwObjectGetType(o) (((const RwObject *)(o))->type) - -#define rwObjectSetType(o, t) (((RwObject *)(o))->type) = (RwUInt8)(t) - -/* Sub type */ -#define rwObjectGetSubType(o) (((const RwObject *)(o))->subType) -#define rwObjectSetSubType(o, t) (((RwObject *)(o))->subType) = (RwUInt8)(t) - -/* Flags */ -#define rwObjectGetFlags(o) (((const RwObject *)(o))->flags) -#define rwObjectSetFlags(o, f) (((RwObject *)(o))->flags) = (RwUInt8)(f) -#define rwObjectTestFlags(o, f) ((((const RwObject *)(o))->flags) & (RwUInt8)(f)) - -/* Private flags */ -#define rwObjectGetPrivateFlags(c) (((const RwObject *)(c))->privateFlags) -#define rwObjectSetPrivateFlags(c,f) (((RwObject *)(c))->privateFlags) = (RwUInt8)(f) -#define rwObjectTestPrivateFlags(c,flag) ((((const RwObject *)(c))->privateFlags) & (RwUInt8)(flag)) - -/* Hierarchy */ -#define rwObjectGetParent(object) (((const RwObject *)(object))->parent) -#define rwObjectSetParent(c,p) (((RwObject *)(c))->parent) = (void *)(p) - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/os/win/osintf.h ---*/ - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/rwstring.h ---*/ - -/**************************************************************************** - Defines - */ - -#define rwsprintf RWSRCGLOBAL(stringFuncs).vecSprintf -#define rwvsprintf RWSRCGLOBAL(stringFuncs).vecVsprintf -#define rwstrcpy RWSRCGLOBAL(stringFuncs).vecStrcpy -#define rwstrncpy RWSRCGLOBAL(stringFuncs).vecStrncpy -#define rwstrcat RWSRCGLOBAL(stringFuncs).vecStrcat -#define rwstrncat RWSRCGLOBAL(stringFuncs).vecStrncat -#define rwstrrchr RWSRCGLOBAL(stringFuncs).vecStrrchr -#define rwstrchr RWSRCGLOBAL(stringFuncs).vecStrchr -#define rwstrstr RWSRCGLOBAL(stringFuncs).vecStrstr -#define rwstrcmp RWSRCGLOBAL(stringFuncs).vecStrcmp -#define rwstricmp RWSRCGLOBAL(stringFuncs).vecStricmp -#define rwstrlen RWSRCGLOBAL(stringFuncs).vecStrlen -#define rwstrupr RWSRCGLOBAL(stringFuncs).vecStrupr -#define rwstrlwr RWSRCGLOBAL(stringFuncs).vecStrlwr -#define rwstrtok RWSRCGLOBAL(stringFuncs).vecStrtok -#define rwsscanf RWSRCGLOBAL(stringFuncs).vecSscanf - -#define rwstrdup(_result, _string) \ -do \ -{ \ - _result = ((RwChar*)NULL); \ - \ - if (((RwChar*)NULL) != (_string)) \ - { \ - _result = (RwChar *) \ - RwMalloc( (rwstrlen(_string) + 1) * \ - sizeof (RwChar) ); \ - \ - if (((RwChar*)NULL) != (_result)) \ - { \ - rwstrcpy(_result, _string); \ - } \ - } \ -} \ -while (0) - - -/**************************************************************************** - Global Types - */ - -typedef int (*vecSprintfFunc)(RwChar *buffer, - const RwChar *format, - ...) /* __RWFORMAT__(printf, 2, 3) */; -typedef int (*vecVsprintfFunc)(RwChar *buffer, - const RwChar *format, - va_list argptr); -typedef RwChar *(*vecStrcpyFunc)(RwChar *dest, - const RwChar *srce); -typedef RwChar *(*vecStrncpyFunc)(RwChar *dest, - const RwChar *srce, - size_t size); -typedef RwChar *(*vecStrcatFunc)(RwChar *dest, - const RwChar *srce); -typedef RwChar *(*vecStrncatFunc)(RwChar *dest, - const RwChar *srce, - size_t size); -typedef RwChar *(*vecStrrchrFunc)(const RwChar *string, - int findThis); -typedef RwChar *(*vecStrchrFunc)(const RwChar *string, - int findThis); -typedef RwChar *(*vecStrstrFunc)(const RwChar *string, - const RwChar *findThis); -typedef int (*vecStrcmpFunc)(const RwChar *string1, - const RwChar *string2); -typedef int (*vecStricmpFunc)(const RwChar *string1, - const RwChar *string2); -typedef size_t (*vecStrlenFunc)(const RwChar *string); -typedef RwChar *(*vecStruprFunc)(RwChar *string); -typedef RwChar *(*vecStrlwrFunc)(RwChar *string); -typedef RwChar *(*vecStrtokFunc)(RwChar *string, const RwChar *delimit); -typedef int (*vecSscanfFunc)(const RwChar *buffer, - const RwChar *format, - ...) /* __RWFORMAT__(scanf, 2, 3) */; - -typedef struct RwStringFunctions RwStringFunctions; -struct RwStringFunctions -{ - vecSprintfFunc vecSprintf ; - vecVsprintfFunc vecVsprintf; - vecStrcpyFunc vecStrcpy; - vecStrncpyFunc vecStrncpy; - vecStrcatFunc vecStrcat; - vecStrncatFunc vecStrncat; - vecStrrchrFunc vecStrrchr; - vecStrchrFunc vecStrchr; - vecStrstrFunc vecStrstr; - vecStrcmpFunc vecStrcmp; - vecStricmpFunc vecStricmp; - vecStrlenFunc vecStrlen; - vecStruprFunc vecStrupr; - vecStrlwrFunc vecStrlwr; - vecStrtokFunc vecStrtok; - vecSscanfFunc vecSscanf; -}; - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/rwdbgerr.h ---*/ -#define RWECODE(a,b) a, - -/* Construct an enum type with all the plugin error codes (for the app to use) */ -enum RwErrorCodePlugin_errcore -{ -#include "errcore.def" - rwLASTERROR_errcore = RWFORCEENUMSIZEINT -}; -typedef enum RwErrorCodePlugin_errcore RwErrorCodePlugin_errcore; - - -#undef RWECODE - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/resmem.h ---*/ - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bamemory.h ---*/ -#if (defined(RWMEMDEBUG)) -#ifdef _XBOX -/* Need OutputDebugString macros */ -#include <xtl.h> -#endif -#endif - -/**************************************************************************** - Defines - */ - -/* - * Debug fill bytes for compatibility with MSVC/C++ debug heap - * See - * \Program Files\Microsoft Visual Studio\VC98\CRT\SRC\DBGHEAP.C: - * static unsigned char _bNoMansLandFill = 0xFD; - * // fill no-man's land with this - * static unsigned char _bDeadLandFill = 0xDD; - * // fill free objects with this - * static unsigned char _bCleanLandFill = 0xCD; - * // fill new objects with this - */ - -#if (!defined(rwFREELISTNOMANSLANDFILL)) -#define rwFREELISTNOMANSLANDFILL 0xFD -#endif /* (!defined(rwFREELISTNOMANSLANDFILL)) */ - -#if (!defined(rwFREELISTDEADLANDFILL)) -#define rwFREELISTDEADLANDFILL 0xDD -#endif /* (!defined(rwFREELISTDEADLANDFILL)) */ - -#if (!defined(rwFREELISTCLEANLANDFILL)) -#define rwFREELISTCLEANLANDFILL 0xCD -#endif /* (!defined(rwFREELISTCLEANLANDFILL)) */ - -#define RWFREELISTALIGNED(_pData, _freelist) \ - (! (((RwUInt32)(_pData)) & ((_freelist)->alignmentMinusOne)) ) - -/***************************** - * REGULAR MEMORY ALLOCATION * - *****************************/ - -/** - * \ingroup rwmem - * \def RwMalloc - * RwMalloc(_s) is a macro for malloc(_s). - */ - -/** - * \ingroup rwmem - * \def RwFree - * RwFree(_p) is a macro for free(_p). - */ - -/** - * \ingroup rwmem - * \def RwCalloc - * RwCalloc(_n, _s) is a macro for calloc(_n, _s). - */ - -/** - * \ingroup rwmem - * \def RwRealloc - * RwRealloc(_p, _s) is a macro for realloc(_p, _s). - */ - -#if ( (defined(RWMEMDEBUG)) && defined(RWDEBUG) ) - -#if (!defined(RWNOFREELISTS)) -#define RWNOFREELISTS -#endif /* (!defined(RWNOFREELISTS)) */ - -#if (defined(rwPLUGIN_ID)) -#define _CLIENT_TAG \ - ( 0xFFFF & (rwPLUGIN_ID) ) -#endif /* (defined(rwPLUGIN_ID)) */ - -#if (!defined(_CLIENT_TAG)) -#define _CLIENT_TAG \ - ( 0xFFFF & (MAKECHUNKID(rwVENDORID_CRITERIONTK, 0x00) ) ) -#endif /* (!defined(_CLIENT_TAG)) */ - -# if (defined(_MSC_VER)) -# if ((_MSC_VER>=1000) && defined(_DEBUG)) - -/* Pick up _ASSERTE() macro */ -/* #include <windows.h> */ -#if (defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) -#define _CRTDBG_MAP_ALLOC -#endif /* defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) */ -#include <crtdbg.h> - -#define RwMalloc(_s) \ - _malloc_dbg((_s), \ - _CLIENT_BLOCK | ((_CLIENT_TAG)<<16), \ - __FILE__, \ - __LINE__) - -#define RwFree(_p) \ - _free_dbg((_p), \ - _CLIENT_BLOCK | ((_CLIENT_TAG)<<16)) - -#define RwCalloc(_n, _s) \ - _calloc_dbg((_n), (_s), \ - _CLIENT_BLOCK | ((_CLIENT_TAG)<<16), \ - __FILE__, \ - __LINE__) - -#define RwRealloc(_p, _s) \ - _realloc_dbg((_p), \ - (_s), \ - _CLIENT_BLOCK | ((_CLIENT_TAG)<<16), \ - __FILE__, \ - __LINE__) - -#define RWCRTORDBGFLAG(_flag) \ - do \ - { \ - int _DbgFlag; \ - \ - _DbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); \ - _DbgFlag |= (_flag); \ - _CrtSetDbgFlag(_DbgFlag); \ - } while(0) - -#define VALID_HEAP_STR \ - __FILE__##"("##RW_STRINGIFY_EXPANDED(__LINE__)##"): valid heap\n" - -#define RWCRTCHECKMEMORY() \ - do \ - { \ - int valid_heap; \ - \ - valid_heap = _CrtCheckMemory(); \ - _ASSERTE(valid_heap); \ - } while(0) - -/* - * if (valid_heap) \ - * OutputDebugString(VALID_HEAP_STR); \ - */ - -#define NO_LEAKS_FOUND_STR \ - __FILE__##"("##RW_STRINGIFY_EXPANDED(__LINE__)##"): no heap leaks found\n" - -#define RWCRTDUMPMEMORYLEAKS() \ - do \ - { \ - int leaks_found; \ - \ - leaks_found = _CrtDumpMemoryLeaks(); \ - _ASSERTE(!leaks_found); \ - if (!leaks_found) \ - OutputDebugString(NO_LEAKS_FOUND_STR); \ - } while(0) - -#define HEAP_DIFFERENCES_FOUND_STR \ - __FILE__##"("##RW_STRINGIFY_EXPANDED(__LINE__)##"): heap differences found\n" - -#define NO_DIFFERENCES_FOUND_STR \ - __FILE__##"("##RW_STRINGIFY_EXPANDED(__LINE__)##"): no heap differences found\n" - -#define RWCRTHEAPDIFFERENCESINCE(_Then) \ - do \ - { \ - /* only dump differences when \ - * there are in fact differences */ \ - _CrtMemState _Now; \ - _CrtMemState _Delta; \ - const int _DbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); \ - int Differences; \ - \ - _CrtMemCheckpoint(&_Now); \ - _CrtMemDifference(&_Delta, _Then, &_Now); \ - \ - (Differences) = ( ( 0 != _Delta.lCounts[_CLIENT_BLOCK] ) || \ - ( 0 != _Delta.lCounts[_NORMAL_BLOCK] ) || \ - ( (_DbgFlag & _CRTDBG_CHECK_CRT_DF) && \ - ( 0 != _Delta.lCounts[_CRT_BLOCK]) ) ); \ - \ - if ( (Differences) ) \ - { \ - /* difference detected: dump objects since _Then. */ \ - OutputDebugString(HEAP_DIFFERENCES_FOUND_STR); \ - _CrtMemDumpAllObjectsSince(_Then); \ - _CrtMemDumpStatistics(&_Delta); \ - } \ - else \ - { \ - OutputDebugString(NO_DIFFERENCES_FOUND_STR); \ - } \ - } while (0) - -#define RWCRTDBGBREAK() \ - _CrtDbgBreak() - -#define RWCRTDOFORALLCLIENTOBJECTS(_f, _c) \ - _CrtDoForAllClientObjects(_f, _c) - -#define RWCRTISMEMORYBLOCK(_p, _t, _r, _f, _l) \ - _CrtIsMemoryBlock(_p, _t, _r, _f, _l) - -#define RWCRTISVALIDHEAPPOINTER(_p) \ - _CrtIsValidHeapPointer(_p) - -#define RWCRTISVALIDPOINTER(_p, _n, _r) \ - _CrtIsValidPointer(_p, _n, _r) - -#define RWCRTMEMCHECKPOINT(_s) \ - _CrtMemCheckpoint(_s) - -#define RWCRTMEMDIFFERENCE(_s1, _s2, _s3) \ - _CrtMemDifference(_s1, _s2, _s3) - -#define RWCRTMEMDUMPALLOBJECTSSINCE(_s) \ - _CrtMemDumpAllObjectsSince(_s) - -#define RWCRTMEMDUMPSTATISTICS(_s) \ - _CrtMemDumpStatistics(_s) - -#define RWCRTSETALLOCHOOK(_f) \ - _CrtSetAllocHook(_f) - -#define RWCRTSETBREAKALLOC(_a) \ - _CrtSetBreakAlloc(_a) - -#define RWCRTSETDBGFLAG(_f) \ - _CrtSetDbgFlag(_f) - -#define RWCRTSETDUMPCLIENT(_f) \ - _CrtSetDumpClient(_f) - -#define RWCRTSETREPORTFILE(_t, _f) \ - _CrtSetReportFile(_t, _f) - -#define RWCRTSETREPORTHOOK(_f) \ - _CrtSetReportHook(_f) - -#define RWCRTSETREPORTMODE(_t, _f) \ - _CrtSetReportMode(_t, _f) - -#if (!defined(_CRTDBG_FLAGS)) -#define _CRTDBG_FLAGS \ - ( (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF | \ - _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF) & \ - ~(_CRTDBG_CHECK_ALWAYS_DF |_CRTDBG_RESERVED_DF) ) -#endif /* (!defined(_CRTDBG_FLAGS)) */ - -# endif /* ((_MSC_VER>=1000) && defined(_DEBUG)) */ -# endif /* (defined(_MSC_VER)) */ - - - -#if (!defined(rwDEADPTRFILL)) -#define rwDEADPTRFILL ((void *)0xDDDDDDDD) -#endif /* (!defined(rwDEADPTRFILL)) */ - -#endif /* (defined(RWDEBUG) && (defined(RWMEMDEBUG))) */ - -#if (!defined(rwDEADPTRFILL)) -#define rwDEADPTRFILL (NULL) -#endif /* (!defined(rwDEADPTRFILL)) */ - -#if (!defined(RwMalloc)) -#define RwMalloc(_s) ((RWSRCGLOBAL(memoryFuncs).rwmalloc)((_s))) -#endif /* (!defined(RwMalloc)) */ - -#if (!defined(RwFree)) -#define RwFree(_p) ((RWSRCGLOBAL(memoryFuncs).rwfree)((_p))) -#endif /* (!defined(RwFree)) */ - -#if (!defined(RwCalloc)) -#define RwCalloc(_n, _s) ((RWSRCGLOBAL(memoryFuncs).rwcalloc)((_n), (_s))) -#endif /* (!defined(RwCalloc)) */ - -#if (!defined(RwRealloc)) -#define RwRealloc(_p, _s) ((RWSRCGLOBAL(memoryFuncs).rwrealloc)((_p),(_s))) -#endif /* (!defined(RwRealloc)) */ - -#if (!defined(RWCRTORDBGFLAG)) -#define RWCRTORDBGFLAG(_flag) /* No op */ -#endif /* (!defined(RWCRTORDBGFLAG)) */ - -#if (!defined(RWCRTCHECKMEMORY)) -#define RWCRTCHECKMEMORY() /* No Op */ -#endif /* (!defined(RWCRTCHECKMEMORY)) */ - -#if (!defined(RWCRTDBGBREAK)) -#define RWCRTDBGBREAK() /* No Op */ -#endif /* (!defined(RWCRTDBGBREAK)) */ - -#if (!defined(RWCRTDOFORALLCLIENTOBJECTS)) -#define RWCRTDOFORALLCLIENTOBJECTS(_f, _c) /* No Op */ -#endif /* (!defined(RWCRTDOFORALLCLIENTOBJECTS)) */ - -#if (!defined(RWCRTDUMPMEMORYLEAKS)) -#define RWCRTDUMPMEMORYLEAKS() /* No Op */ -#endif /* (!defined(RWCRTDUMPMEMORYLEAKS)) */ - -#if (!defined(RWCRTHEAPDIFFERENCESINCE)) -#define RWCRTHEAPDIFFERENCESINCE(_Then) /* No Op */ -#endif /* (!defined(RWCRTHEAPDIFFERENCESINCE)) */ - -#if (!defined(RWCRTISMEMORYBLOCK)) -#define RWCRTISMEMORYBLOCK(_p, _t, _r, _f, _l) (NULL != (_p)) -#endif /* (!defined(RWCRTISMEMORYBLOCK)) */ - -#if (!defined(RWCRTISVALIDHEAPPOINTER)) -#define RWCRTISVALIDHEAPPOINTER(_p) (NULL != (_p)) -#endif /* (!defined(RWCRTISVALIDHEAPPOINTER)) */ - -#if (!defined(RWCRTISVALIDPOINTER)) -#define RWCRTISVALIDPOINTER(_p, _n, _r) (NULL != (_p)) -#endif /* (!defined(RWCRTISVALIDPOINTER)) */ - -#if (!defined(RWCRTMEMCHECKPOINT)) -#define RWCRTMEMCHECKPOINT(_s) /* No Op */ -#endif /* (!defined(RWCRTMEMCHECKPOINT)) */ - -#if (!defined(RWCRTMEMDIFFERENCE)) -#define RWCRTMEMDIFFERENCE(_s1, _s2, _s3) /* No Op */ -#endif /* (!defined(RWCRTMEMDIFFERENCE)) */ - -#if (!defined(RWCRTMEMDUMPALLOBJECTSSINCE)) -#define RWCRTMEMDUMPALLOBJECTSSINCE(_s) /* No Op */ -#endif /* (!defined(RWCRTMEMDUMPALLOBJECTSSINCE)) */ - -#if (!defined(RWCRTMEMDUMPSTATISTICS)) -#define RWCRTMEMDUMPSTATISTICS(_s) (NULL) -#endif /* (!defined(RWCRTMEMDUMPSTATISTICS)) */ - -#if (!defined(RWCRTSETALLOCHOOK)) -#define RWCRTSETALLOCHOOK(_f) (NULL) -#endif /* (!defined(RWCRTSETALLOCHOOK)) */ - -#if (!defined(RWCRTSETBREAKALLOC)) -#define RWCRTSETBREAKALLOC(_a) (0) -#endif /* (!defined(RWCRTSETBREAKALLOC)) */ - -#if (!defined(RWCRTSETDBGFLAG)) -#define RWCRTSETDBGFLAG(_f) (0) -#endif /* (!defined(RWCRTSETDBGFLAG)) */ - -#if (!defined(RWCRTSETDUMPCLIENT)) -#define RWCRTSETDUMPCLIENT(_f) (NULL) -#endif /* (!defined(RWCRTSETDUMPCLIENT)) */ - -#if (!defined(RWCRTSETREPORTFILE)) -#define RWCRTSETREPORTFILE(_t, _f) (NULL) -#endif /* (!defined(RWCRTSETREPORTFILE)) */ - -#if (!defined(RWCRTSETREPORTHOOK)) -#define RWCRTSETREPORTHOOK(_f) (NULL) -#endif /* (!defined(RWCRTSETREPORTHOOK)) */ - -#if (!defined(RWCRTSETREPORTMODE)) -#define RWCRTSETREPORTMODE(_t, _f) (0) -#endif /* (!defined(RWCRTSETREPORTMODE)) */ - -#if (!defined(RWREGSETBREAKALLOC)) -#define RWREGSETBREAKALLOC(_name) /* No op */ -#endif /* (!defined(RWREGSETBREAKALLOC)) */ - -#if (!defined(RWREGSETASSERTPRINT)) -#define RWREGSETASSERTPRINT(_name) /* No op */ -#endif /* (!defined(RWREGSETASSERTPRINT)) */ - -#if (!defined(RWGETWINREGDWORD)) -#define RWGETWINREGDWORD(_env_var, _match) /* No op */ -#endif /* (!defined(RWGETWINREGDWORD)) */ - -#if (!defined(RWGETWINREGBINARY)) -#define RWGETWINREGBINARY(_env_var, _match) /* No op */ -#endif /* (!defined(RWGETWINREGBINARY)) */ - -#if (!defined(RWGETWINREGSTRING)) -#define RWGETWINREGSTRING(_env_var, _match) /* No op */ -#endif /* (!defined(RWGETWINREGSTRING)) */ - -#if (!defined(_CRTDBG_FLAGS)) -#define _CRTDBG_FLAGS 0x33 -#endif /* (!defined(_CRTDBG_FLAGS)) */ - -/**************************************************************************** - Global Types - */ - -typedef struct RwMemoryFunctions RwMemoryFunctions; -/** - * \ingroup datatypes - * \struct RwMemoryFunctions - * This type represents the memory functions used - * by RenderWare. By default, the standard ANSI functions are used. The - * application may install an alternative interface providing that it is ANSI - * compliant (see API function \ref RwEngineInit): - */ -struct RwMemoryFunctions -{ - /* c.f. - * Program Files/Microsoft Visual Studio/VC98/Include/MALLOC.H - */ - void *(*rwmalloc)(size_t size); /**< rwmalloc malloc */ - void (*rwfree)(void *mem); /**< rwfree free */ - void *(*rwrealloc)(void *mem, size_t newSize); /**< rwrealloc realloc */ - void *(*rwcalloc)(size_t numObj, size_t sizeObj); /**< calloc calloc */ -}; - -typedef struct RwFreeBlock RwFreeBlock; -/* - * Freelists -- from Page 131 - * Advanced Animation and Rendering Techniques - * Alan Watt and Mark Watt - * Addison-Wesley 1993, - * ISBN 0-201-54412-1: - * - * "Lastly, on a more general note concerning speedups for renderers, the - * implementor should be aware that a lot of suggestions for improving - * efficiency fall into the category of ingenious, but complex, - * algorithms for very specific contexts that may save a few microseconds - * but which make your code unreadable. A more general computer science - * perspective that takes a `global view' of the renderer can be more - * fruitful. For example, the renderer devotes a lot of time to - * allocating and deallocating chunks of memory for storing data. A lot - * of these chunks are always the same size - such as those that are - * continually required to store the data structure for fragment lists. - * Using memory management techniques that recognize this fact can yield - * considerable dividends. One such scheme would be to hold a series of - * empty lists in memory for all the commonly used data structures. An - * empty list for fragments, say, would contain a list of previously - * allocated, but no longer needed, fragment structures. When the - * renderer needs memory for a new fragment, it looks first at this empty - * list. If there is nothing there it allocates space directly, - * otherwise it takes a fragments off the end of the list and uses that. - * Conversely, when the renderer no longer needs a fragment, instead of - * freeing it, it goes onto the end of the empty list. In the authors' - * experience, replacing the naive allocate/deallocate scheme with this - * way of managing memory can result in 100% speedup. " - */ -struct RwFreeBlock -{ - RwFreeBlock *nextBlock; -}; - -typedef struct RwFreeList RwFreeList; -struct RwFreeList -{ - void **freeListStack; /* Stack of unused entries */ - void **freeListStackTop; /* Pointer to the top of the stack */ - - RwFreeBlock *firstBlock; /* Data start */ - - RwInt32 blockSize; /* Size of block in bytes */ - RwInt32 entrySize; /* Entry size */ - RwInt32 alignmentMinusOne; /* Entry alignment minus 1 */ - RwInt32 entriesPerBlock; /* Amount of space in a block */ - - RwInt32 entriesAllocated; /* Total slots allocated - * (but not necessarily being used */ - - /* All freelists */ - RwLLLink lFreeList; - -#if (defined(RWDEBUG) && !defined(DOXYGEN)) - const RwChar *fileCreate; - RwUInt32 lineCreate; -#endif /* (defined(RWDEBUG) && !defined(DOXYGEN)) */ -}; - -/** - * \ingroup datatypes - * \ref RwFreeListCallBack represents - * the function called from \ref RwFreeListForAllUsed for all used entries in a - * given free list. - * - * \param pMem Pointer to the start of the current entries. - * - * \param pData User-defined data pointer. - * - * \see RwFreeListForAllUsed - * - */ -typedef void (*RwFreeListCallBack) (void *pMem, void *pData); -typedef void *(*RwMemoryAllocFn) (RwFreeList * fl); -typedef RwFreeList *(*RwMemoryFreeFn) (RwFreeList * fl, void *pData); - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -extern RwMemoryFunctions *RwOsGetMemoryInterface(void); - -/************* - * FREELISTS * - *************/ - -/* Allocation and freeing */ -#if (defined(RWDEBUG) && !defined(DOXYGEN)) - -extern RwFreeList *_rwFreeListCreate(RwInt32 entrySize, - RwInt32 entriesPerBlock, - RwInt32 alignment, - const RwChar *fileCreate, - RwUInt32 lineCreate ); - -#define RwFreeListCreate(entrySize, entriesPerBlock, alignment) \ - _rwFreeListCreate(entrySize, \ - entriesPerBlock, \ - alignment, \ - __FILE__, \ - __LINE__) -#else /* (defined(RWDEBUG) && !defined(DOXYGEN)) */ - -extern RwFreeList *RwFreeListCreate(RwInt32 entrySize, - RwInt32 entriesPerBlock, - RwInt32 alignment); -#endif /* (defined(RWDEBUG) && !defined(DOXYGEN)) */ - -extern RwBool RwFreeListDestroy(RwFreeList * freelist); -/* Garbage collection/enumeration */ -extern RwInt32 RwFreeListPurge(RwFreeList * freelist); -extern RwFreeList *RwFreeListForAllUsed(RwFreeList * freelist, - RwFreeListCallBack - fpCallBack, void *pData); -extern RwInt32 RwFreeListPurgeAllFreeLists(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#if (defined(RWDEBUG) && defined(RWNOFREELISTS) && !defined(RWKEEPFREELISTS)) - -#if ((defined(__MWERKS__) || defined(__GNUC__)) && defined(__R5900__)) - -/* - * for more on memalign, see - * http://www.gnu.org/manual/glibc-2.0.6/html_chapter/libc_3.html#SEC28 - */ -#include <rtdbmalloc.h> - -#define RwFreeListAlloc(_f) \ - memalign((1 + (_f)->alignmentMinusOne), (_f)->entrySize) - -#else /* ((defined(__MWERKS__) || defined(__GNUC__)) && defined(__R5900__)) */ - -#define RwFreeListAlloc(_f) \ - RwMalloc((_f)->entrySize) - -#endif /* ((defined(__MWERKS__) || defined(__GNUC__)) && defined(__R5900__)) */ - -#define RwFreeListFree(_f, _p) \ - RwFree((_p)) - -#endif /* (defined(RWDEBUG) && defined(RWNOFREELISTS) && !defined(RWKEEPFREELISTS)) */ - -#if (!defined(RwFreeListAlloc)) -#define RwFreeListAlloc(_f) \ - RWSRCGLOBAL(memoryAlloc)(_f) -#endif /* (!defined(RwFreeListAlloc)) */ - -#if (!defined(RwFreeListFree)) -#define RwFreeListFree(_f, _p) \ - RWSRCGLOBAL(memoryFree)(_f, _p) -#endif /* (!defined(RwFreeListFree)) */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bastream.h ---*/ - -/**************************************************************************** - Defines - */ - -#define rwSTREAMSTACKSIZE 512 - -/**************************************************************************** - Global Types - */ - -/** - * \ingroup datatypes - * \ref RwStreamType - * This type represents the different types of stream that - * can be used. - * See API section \ref rwstream - */ -enum RwStreamType -{ - rwNASTREAM = 0, /**<Invalid stream type */ - rwSTREAMFILE, /**<File */ - rwSTREAMFILENAME, /**<File name */ - rwSTREAMMEMORY, /**<Memory*/ - rwSTREAMCUSTOM, /**<Custom */ - rwSTREAMTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwStreamType RwStreamType; - -/** - * \ingroup datatypes - * \ref RwStreamAccessType - * This type represents the options available for - * accessing a stream when it is opened. - * See API section \ref rwstream */ -enum RwStreamAccessType -{ - rwNASTREAMACCESS = 0, /**<Invalid stream access */ - rwSTREAMREAD, /**<Read */ - rwSTREAMWRITE, /**<Write */ - rwSTREAMAPPEND, /**<Append */ - rwSTREAMACCESSTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwStreamAccessType RwStreamAccessType; - -/* Memory stream */ -/** - * \ingroup datatypes - * \typedef RwStreamMemory - * This should be considered an opaque type. - * Use the RwStream API functions to access. - */ -typedef struct RwStreamMemory RwStreamMemory; -#if (!defined(DOXYGEN)) -struct RwStreamMemory -{ - RwUInt32 position; /* Current 'memory' position 0 is first byte */ - RwUInt32 nSize; /* Space allocated currently */ - RwUInt8 *memBlock; /* Current memory block pointer */ -}; -#endif /* (!defined(DOXYGEN)) */ - - -typedef union RwStreamFile RwStreamFile; -/** - * \ingroup datatypes - * \union RwStreamFile - * This type is used to represent a file pointer for - * accessing data on disk through the stream mechanism. - * See API section \ref rwstream. */ -union RwStreamFile -{ - void *fpFile; /**< file pointer */ - const void *constfpFile; /**< const file pointer */ -}; - - -/* Custom stream function pointer types */ -typedef RwBool(*rwCustomStreamFnClose) (void *data); -typedef RwUInt32(*rwCustomStreamFnRead) (void *data, void *buffer, - RwUInt32 length); -typedef RwBool(*rwCustomStreamFnWrite) (void *data, - const void *buffer, - - RwUInt32 length); -typedef RwBool(*rwCustomStreamFnSkip) (void *data, - - RwUInt32 offset); - -/* Custom stream */ -/** - * \ingroup datatypes - * \typedef RwStreamCustom - * This should be considered an opaque type. - * Use the RwStream API functions to access. - */ -typedef struct RwStreamCustom RwStreamCustom; -#if (!defined(DOXYGEN)) -struct RwStreamCustom -{ - rwCustomStreamFnClose sfnclose; - rwCustomStreamFnRead sfnread; - rwCustomStreamFnWrite sfnwrite; - rwCustomStreamFnSkip sfnskip; - void *data; -}; -#endif /* (!defined(DOXYGEN)) */ - -/* Stream */ - -typedef union RwStreamUnion RwStreamUnion; -/** - * \ingroup datatypes - * \union RwStreamUnion - * The union of all supported stream types - */ -union RwStreamUnion -{ - RwStreamMemory memory; /**< memory */ - RwStreamFile file; /**< file */ - RwStreamCustom custom; /**< custom */ -}; - -/** - * \ingroup datatypes - * \typedef RwStream - * Binary stream for reading or writing object data. - * This should be considered an opaque type. - * Use the RwStream API functions to access. - */ -typedef struct RwStream RwStream; -#if (!defined(DOXYGEN)) -struct RwStream -{ - RwStreamType type; - RwStreamAccessType accessType; - RwInt32 position; - RwStreamUnion Type; - RwBool rwOwned; -}; -#endif /* (!defined(DOXYGEN)) */ - - -typedef struct RwMemory RwMemory; -/** - * \ingroup datatypes - * \struct RwMemory - * This type represents a block of allocated memory. - * It is used to specify an area of memory connected to a stream of type - * rwSTREAMMEMORY. - * See \ref rwstream */ -struct RwMemory -{ - RwUInt8 *start; /**< starting address */ - RwUInt32 length; /**< length in bytes*/ -}; - - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Open/Close streams */ - -extern RwStream * -_rwStreamInitialize(RwStream *stream, - RwBool rwOwned, - RwStreamType type, - RwStreamAccessType accessType, - const void *pData); - -extern RwStream * -RwStreamOpen(RwStreamType type, - RwStreamAccessType accessType, - const void *pData); - -extern RwBool -RwStreamClose(RwStream * stream, - void *pData); - - -/* Stream read/write */ -extern RwUInt32 -RwStreamRead(RwStream * stream, - void *buffer, - RwUInt32 length); - -extern RwStream * -RwStreamWrite(RwStream * stream, - const void *buffer, - RwUInt32 length); - - -/* Stream skipping */ -extern RwStream * -RwStreamSkip(RwStream * stream, - RwUInt32 offset); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/batkreg.h ---*/ - -/**************************************************************************** - Global Types - */ - -/** - * \ingroup datatypes - * \ref RwPluginDataChunkWriteCallBack represents the function - * registered by \ref RwCameraRegisterPluginStream, etc. as the function that - * writes extension data to a binary stream. - * - * \param stream Pointer to the binary stream - * - * \param binaryLength A RwInt32 value equal to the binary - * size (in bytes) of the extension data that will be written to the binary - * stream. - * - * \param object Pointer to the object containing the extension - * data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return Pointer to the stream - */ -typedef RwStream *(*RwPluginDataChunkWriteCallBack)(RwStream *stream, RwInt32 binaryLength, const void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginDataChunkReadCallBack represents the function - * registered by \ref RwCameraRegisterPluginStream, etc. as the function that - * reads extension data from a binary stream. - * - * \param stream Pointer to the binary stream - * - * \param binaryLength A RwInt32 value equal to the binary - * size (in bytes) of the extension data that will be read from a binary - * stream. - * - * \param object Pointer to the object containing the extension - * data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return Pointer to the stream - */ -typedef RwStream *(*RwPluginDataChunkReadCallBack)(RwStream *stream, RwInt32 binaryLength, void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginDataChunkGetSizeCallBack represents the callback - * registered by \ref RwCameraRegisterPluginStream, etc. as the function that - * determines the binary size of the extension data. - * - * \param object Pointer to the object containing the extension data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return A RwInt32 value equal to the size in bytes of the plugin extension data. - */ -typedef RwInt32(*RwPluginDataChunkGetSizeCallBack)(const void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginDataChunkAlwaysCallBack represents the callback - * registered by \ref RwCameraSetStreamAlwaysCallBack, etc. as the - * function that is called after the reading of plugin stream data is - * finished (useful to set up plugin data for plugins that found no - * data in the stream, but that cannot set up the data during the - * \ref RwPluginObjectConstructor callback). - * - * \param object Pointer to the object containing the extension data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - */ -typedef RwBool(*RwPluginDataChunkAlwaysCallBack)(void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginDataChunkRightsCallBack represents the callback - * registered by RwCameraSetStreamRightsCallBack, etc. as the - * function that is called after the reading of plugin stream data is - * finished, and the object finalised, if and only if the object's rights - * id was equal to that of the plugin registering the call. - * For convience the extension data is passed to the callback. - * - * \param object Pointer to the object containing the extension data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \param extraData An RwUInt32 writen with the plugin id. - */ -typedef RwBool(*RwPluginDataChunkRightsCallBack)(void *object, RwInt32 offsetInObject, RwInt32 sizeInObject, RwUInt32 extraData); - -/** - * \ingroup datatypes - * \ref RwPluginObjectConstructor represents the callback - * registered by \ref RwEngineRegisterPlugin, \ref RwCameraRegisterPlugin, etc. - * as the function that initializes either the global extension data (in the - * case of \ref RwEngineRegisterPlugin) or the object extension data (in all - * other cases). Registered by \ref RwCameraSetStreamAlwaysCallBack, etc. - * - * \param object Pointer to the object (global or otherwise) - * that contains the extension data. - * - * \param offsetInObject A RwInt32 value equal to the - * byte offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return Pointer to the object - */ -typedef void *(*RwPluginObjectConstructor)(void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginObjectCopy represents the callback registered by - * \ref RwCameraRegisterPlugin, etc. as the function that copies the object - * extension data when an object is duplicated. - * - * \param dstObject Pointer to the destination object that will - * receive the extension data. - * - * \param srcObject Pointer to the source object containing - * extension data. - * - * \param offsetInObject A RwInt32 value equal to the byte offset - * of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return Pointer to the object - */ -typedef void *(*RwPluginObjectCopy)(void *dstObject, const void *srcObject, RwInt32 offsetInObject, RwInt32 sizeInObject); - -/** - * \ingroup datatypes - * \ref RwPluginObjectDestructor represents the callback registered - * by \ref RwEngineRegisterPlugin, \ref RwCameraRegisterPlugin, etc. as the - * function that destroys either the global extension data (in the case of - * \ref RwEngineRegisterPlugin) or the object extension data (in all other - * cases). - * - * \param object Pointer to the object (global or otherwise) - * containing the extension data. - * - * \param offsetInObject A RwInt32 value equal to the byte - * offset of the extension data in the object. - * - * \param sizeInObject A RwInt32 value equal to the size - * (in bytes) of the extension data. - * - * \return Pointer to the object. - */ -typedef void *(*RwPluginObjectDestructor)(void *object, RwInt32 offsetInObject, RwInt32 sizeInObject); - -typedef void *(*RwPluginErrorStrCallBack)(void *); - -typedef struct RwPluginRegistry RwPluginRegistry; -typedef struct RwPluginRegEntry RwPluginRegEntry; - -struct RwPluginRegistry -{ - RwInt32 sizeOfStruct; - RwInt32 origSizeOfStruct; - RwInt32 maxSizeOfStruct; - RwInt32 staticAlloc; - RwPluginRegEntry *firstRegEntry; - RwPluginRegEntry *lastRegEntry; -}; - -struct RwPluginRegEntry -{ - RwInt32 offset; - RwInt32 size; - RwUInt32 pluginID; - RwPluginDataChunkReadCallBack readCB; - RwPluginDataChunkWriteCallBack writeCB; - RwPluginDataChunkGetSizeCallBack getSizeCB; - RwPluginDataChunkAlwaysCallBack alwaysCB; - RwPluginDataChunkRightsCallBack rightsCB; - RwPluginObjectConstructor constructCB; - RwPluginObjectDestructor destructCB; - RwPluginObjectCopy copyCB; - RwPluginErrorStrCallBack errStrCB; - RwPluginRegEntry *nextRegEntry; - RwPluginRegEntry *prevRegEntry; - RwPluginRegistry *parentRegistry; -}; - - - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/* Registering toolkits and allocating memory */ -extern RwBool -_rwPluginRegistrySetStaticPluginsSize(RwPluginRegistry * reg, - RwInt32 size); -extern RwInt32 -_rwPluginRegistryAddPlugin(RwPluginRegistry * reg, - RwInt32 size, - RwUInt32 pluginID, - RwPluginObjectConstructor constructCB, - RwPluginObjectDestructor destructCB, - RwPluginObjectCopy copyCB); -extern RwInt32 -_rwPluginRegistryGetPluginOffset(const RwPluginRegistry *reg, - RwUInt32 pluginID); - -/* Initializing/De-initializing instances */ -extern const -RwPluginRegistry *_rwPluginRegistryInitObject(const RwPluginRegistry * reg, - void *object); -extern const -RwPluginRegistry *_rwPluginRegistryDeInitObject(const RwPluginRegistry * reg, - void *object); -extern const -RwPluginRegistry *_rwPluginRegistryCopyObject(const RwPluginRegistry * reg, - void *dstObject, - const void *srcObject); - -#ifdef RWDEBUG -extern RwBool -_rwPluginRegistryValidateObject(const RwPluginRegistry * reg, - const void *object); -#endif /* RWDEBUG */ - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* Compatibility macros */ - -#define rwPluginRegistryOpen() \ - _rwPluginRegistryOpen() -#define rwPluginRegistryClose() \ - _rwPluginRegistryClose() -#define rwPluginRegistrySetStaticPluginsSize(reg, size) \ - _rwPluginRegistrySetStaticPluginsSize(reg, size) -#define rwPluginRegistryAddPlugin(reg, size, pluginID, constructCB, destructCB, copyCB) \ - _rwPluginRegistryAddPlugin(reg, size, pluginID, constructCB, destructCB, copyCB) -#define rwPluginRegistryGetPluginOffset(reg, pluginID) \ - _rwPluginRegistryGetPluginOffset(reg, pluginID) -#define rwPluginRegistryInitObject(reg, object) \ - _rwPluginRegistryInitObject(reg, object) -#define rwPluginRegistryDeInitObject(reg, object) \ - _rwPluginRegistryDeInitObject(reg, object) -#define rwPluginRegistryCopyObject(reg, dstObject, srcObject) \ - _rwPluginRegistryCopyObject(reg, dstObject, srcObject) -#define rwPluginRegistryValidateObject(reg, object) \ - _rwPluginRegistryValidateObject(reg, object) - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/batkbin.h ---*/ - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Plugin binary stream stuff */ -extern RwInt32 _rwPluginRegistryAddPluginStream( - RwPluginRegistry *reg, - RwUInt32 pluginID, - RwPluginDataChunkReadCallBack readCB, - RwPluginDataChunkWriteCallBack writeCB, - RwPluginDataChunkGetSizeCallBack getSizeCB); -extern RwInt32 _rwPluginRegistryAddPlgnStrmlwysCB( - RwPluginRegistry *reg, - RwUInt32 pluginID, - RwPluginDataChunkAlwaysCallBack alwaysCB); -extern RwInt32 _rwPluginRegistryAddPlgnStrmRightsCB( - RwPluginRegistry *reg, - RwUInt32 pluginID, - RwPluginDataChunkRightsCallBack rightsCB); -extern const RwPluginRegistry *_rwPluginRegistryReadDataChunks(const RwPluginRegistry *reg, - RwStream *stream, - void *object); -extern const RwPluginRegistry *_rwPluginRegistryWriteDataChunks(const RwPluginRegistry *reg, - RwStream *stream, - const void *object); -extern const RwPluginRegistry *_rwPluginRegistrySkipDataChunks(const RwPluginRegistry * reg, - RwStream * stream); -extern RwInt32 _rwPluginRegistryGetSize(const RwPluginRegistry *reg, const void *object); -extern const RwPluginRegistry *_rwPluginRegistryInvokeRights(const RwPluginRegistry *reg, - RwUInt32 id, - void *obj, - RwUInt32 extraData); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* Compatibility macros */ - -#define rwPluginRegistryAddPluginStream(reg, pluginID, readCB, writeCB, getSizeCB) \ - _rwPluginRegistryAddPluginStream(reg, pluginID, readCB, writeCB, getSizeCB) -#define rwPluginRegistryAddPluginStreamAlwaysCB(reg, pluginID, alwaysCB) \ - _rwPluginRegistryAddPlgnStrmlwysCB(reg, pluginID, alwaysCB) -#define rwPluginRegistryReadDataChunks(reg, stream, object) \ - _rwPluginRegistryReadDataChunks(reg, stream, object) -#define rwPluginRegistryWriteDataChunks(reg, stream, object) \ - _rwPluginRegistryWriteDataChunks(reg, stream, object) -#define rwPluginRegistrySkipDataChunks(reg, stream) \ - _rwPluginRegistrySkipDataChunks(reg, stream) -#define rwPluginRegistryGetSize(reg, object) \ - _rwPluginRegistryGetSize(reg, object) - - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bamatrix.h ---*/ - -/**************************************************************************** - Defines - */ - -#define RWMATRIXALIGNMENT(_mat) \ - (! (((rwMATRIXALIGNMENT)-1) & ((RwUInt32)(_mat)))) - -#if (defined(RWMATRIXMONITOR)) -# if (defined(_MSC_VER)) -# if ((_MSC_VER>=1000) && defined(_DEBUG)) - -typedef char MatrixString[1024]; - -#define RWMATRIXPRINT(_matrix) \ -MACRO_START \ -{ \ - MatrixString message; \ - MatrixString output; \ - \ - if (NULL != (_matrix)) \ - { \ - const RwV3d * const _x = &(_matrix)->right; \ - const RwV3d * const _y = &(_matrix)->up; \ - const RwV3d * const _z = &(_matrix)->at; \ - const RwV3d * const _w = &(_matrix)->pos; \ - \ - _snprintf(message, sizeof(MatrixString), \ - "[ [ %8.4f, %8.4f, %8.4f, %8.4f ]\n" \ - " [ %8.4f, %8.4f, %8.4f, %8.4f ]\n" \ - " [ %8.4f, %8.4f, %8.4f, %8.4f ]\n" \ - " [ %8.4f, %8.4f, %8.4f, %8.4f ] ]\n" \ - " %08x == flags\n", \ - _x->x, _x->y, _x->z, (RwReal) 0, \ - _y->x, _y->y, _y->z, (RwReal) 0, \ - _z->x, _z->y, _z->z, (RwReal) 0, \ - _w->x, _w->y, _w->z, (RwReal) 1, \ - (_matrix)->flags); \ - } \ - else \ - { \ - _snprintf(message, sizeof(MatrixString), \ - "NULL"); \ - } \ - \ - _snprintf(output, sizeof(MatrixString), \ - "%s(%d): %s [%p] ==\n%s\n", \ - __FILE__, __LINE__, \ - #_matrix, _matrix, message); \ - \ - OutputDebugString(RWSTRING(output)); \ -} \ -MACRO_STOP - -# endif /* ((_MSC_VER>=1000) && defined(_DEBUG)) */ -# endif /* (defined(_MSC_VER)) */ -#endif /* (defined(RWMATRIXMONITOR)) */ - -#if (!(defined(RWMATRIXPRINT))) -#define RWMATRIXPRINT(_matrix) /* No op */ -#endif /* (!(defined(RWMATRIXPRINT))) */ - -/** - * \ingroup datatypes - * enum RwOpCombineType - * This type represents a combination operator which - * can be applied to frames and matrices. - * The operator determines the order - * in which one object is combined with another - */ -enum RwOpCombineType -{ - rwCOMBINEREPLACE = 0, /**<Replace - - all previous transformations are lost */ - rwCOMBINEPRECONCAT, /**<Pre-concatenation - - the given transformation is applied - before all others */ - rwCOMBINEPOSTCONCAT, /**<Post-concatenation - - the given transformation is applied - after all others */ - rwOPCOMBINETYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; - -/** - * \ingroup datatypes - * \typedef RwOpCombineType typedef for enum RwOpCombineType - */ -typedef enum RwOpCombineType RwOpCombineType; - -/* External flags (bits 0-15) */ - -/* Internal flags (bits 16-31) */ -enum RwMatrixType -{ - rwMATRIXTYPENORMAL = 0x00000001, - rwMATRIXTYPEORTHOGANAL = 0x00000002, - rwMATRIXTYPEORTHONORMAL = 0x00000003, - rwMATRIXTYPEMASK = 0x00000003, - rwMATRIXTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwMatrixType RwMatrixType; - -enum RwMatrixFlag -{ - rwMATRIXINTERNALIDENTITY = 0x00020000, - rwMATRIXFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwMatrixFlag RwMatrixFlag; - -/* Flags describing what will optimize for */ -enum RwMatrixOptimizations -{ - rwMATRIXOPTIMIZE_IDENTITY = 0x00020000, - rwMATRIXOPTIMIZATIONSFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwMatrixOptimizations RwMatrixOptimizations; - -/**************************************************************************** - Global Types - */ - -#if (!defined(DOXYGEN)) -struct RwMatrixTag -{ - /* These are padded to be 16 byte quantities per line */ - RwV3d right; - RwUInt32 flags; - RwV3d up; - RwUInt32 pad1; - RwV3d at; - RwUInt32 pad2; - RwV3d pos; - RwUInt32 pad3; -}; - -/* - * RwMatrix & RwMatrixTag must be different otherwise the alignment - * directive is ignored when compiling under C++ on Visual C - */ -typedef struct RwMatrixTag RWALIGN(RwMatrix, rwMATRIXALIGNMENT); - -#else - -/* - * RwMatrix must appear as the struct name & the typedef, - * otherwise Doxygen puts RwMatrixTag in the API ref instead of RwMatrix! - */ - -/** - * \ingroup datatypes - * \typedef RwMatrix - * Matrix to define transformations. - * This should be considered an opaque type. - * Use the RwMatrix API functions to access. - */ -typedef struct RwMatrix RWALIGN(RwMatrix, rwMATRIXALIGNMENT); -#endif /* (!defined(DOXYGEN)) */ - -#if (!defined(RwMatrixCopyMacro)) -#define RwMatrixCopyMacro(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwMatrixCopyMacro)) */ - -#if (!defined(RwMatrixSetIdentityMacro)) -#define RwMatrixSetIdentityMacro(m) \ -MACRO_START \ -{ \ - (m)->right.x = (m)->up.y = (m)->at.z = (RwReal)((1.0)); \ - (m)->right.y = (m)->right.z = (m)->up.x = (RwReal)((0.0)); \ - (m)->up.z = (m)->at.x = (m)->at.y = (RwReal)((0.0)); \ - (m)->pos.x = (m)->pos.y = (m)->pos.z = (RwReal)((0.0)); \ - rwMatrixSetFlags((m), \ - rwMatrixGetFlags(m) | \ - (rwMATRIXINTERNALIDENTITY | \ - rwMATRIXTYPEORTHONORMAL)); \ -} \ -MACRO_STOP -#endif /* (!defined(RwMatrixSetIdentityMacro)) */ - -typedef void (RWASMCALL * rwMatrixMultFn) (RwMatrix * dstMat, - const RwMatrix * matA, - const RwMatrix * matB); - -/* - * \ingroup datatypes - * \typedef RwMatrixTolerance - * Typedef for RwMatrixTolerance structure - */ -typedef struct RwMatrixTolerance RwMatrixTolerance; - -/* - * \ingroup datatypes - * \struct RwMatrixTolerance - * Holds tolerances for matrix optimizations with \ref RwMatrixOptimize - */ -struct RwMatrixTolerance -{ - RwReal Normal; - /**< Tolerance within which matrix is deemed to be normal */ - RwReal Orthogonal; - /**< Tolerance within which matrix is deemed to be orthogonal */ - RwReal Identity; - /**< Tolerance within which matrix is deemed to be identity */ -}; - - -/**************************************************************************** - Function prototypes - */ - -/* Matrix operations */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -extern RwBool -RwEngineGetMatrixTolerances(RwMatrixTolerance * const tolerance); - -extern RwBool -RwEngineSetMatrixTolerances(const RwMatrixTolerance * const tolerance); - -/* Update */ -#define rwMatrixSetFlags(m, flagsbit) ((m)->flags = (flagsbit)) -#define rwMatrixGetFlags(m) ((m)->flags) -#define rwMatrixTestFlags(m, flagsbit) ((m)->flags & (RwInt32)(flagsbit)) - -/* Creation/destruction */ -extern RwBool -RwMatrixDestroy(RwMatrix * mpMat); - -extern RwMatrix * -RwMatrixCreate(void); - -#ifdef RWDEBUG - -/* Functions for debug */ -extern void -RwMatrixCopy(RwMatrix * dstMatrix, const RwMatrix * srcMatrix); - -extern void -RwMatrixSetIdentity(RwMatrix * matrix); - -#else /* RWDEBUG */ - -#define RwMatrixCopy(dst, src) RwMatrixCopyMacro(dst, src) -#define RwMatrixSetIdentity(m) RwMatrixSetIdentityMacro(m) - -#endif /* RWDEBUG */ - -/* Matrix multiply */ -extern RwMatrix * -RwMatrixMultiply(RwMatrix * matrixOut, - const RwMatrix * MatrixIn1, - const RwMatrix * matrixIn2); - -extern RwMatrix * -RwMatrixTransform(RwMatrix * matrix, - const RwMatrix * transform, - RwOpCombineType combineOp); - -/* Normalise */ -extern RwMatrix * -RwMatrixOrthoNormalize(RwMatrix * matrixOut, - const RwMatrix * matrixIn); - -/* Inversion */ -extern RwMatrix * -RwMatrixInvert(RwMatrix * matrixOut, - const RwMatrix * matrixIn); - -/* Unary matrix operations */ -extern RwMatrix * -RwMatrixScale(RwMatrix * matrix, - const RwV3d * scale, - RwOpCombineType combineOp); - -extern RwMatrix * -RwMatrixTranslate(RwMatrix * matrix, - const RwV3d * translation, - RwOpCombineType combineOp); - -extern RwMatrix * -RwMatrixRotate(RwMatrix * matrix, - const RwV3d * axis, - RwReal angle, - RwOpCombineType combineOp); - -extern RwMatrix * -RwMatrixRotateOneMinusCosineSine(RwMatrix * matrix, - const RwV3d * unitAxis, - RwReal oneMinusCosine, - RwReal sine, - RwOpCombineType combineOp); - -/* Query what the matrix is */ -extern const RwMatrix *RwMatrixQueryRotate(const RwMatrix * matrix, - RwV3d * unitAxis, - RwReal * angle, - RwV3d * center); - -/* Get components */ -#ifndef RWDEBUG - -#define RwMatrixGetRight(m) (&(m)->right) -#define RwMatrixGetUp(m) (&(m)->up) -#define RwMatrixGetAt(m) (&(m)->at) -#define RwMatrixGetPos(m) (&(m)->pos) - -#else /* RWDEBUG */ - -extern RwV3d * -RwMatrixGetRight(RwMatrix * matrix); - -extern RwV3d * -RwMatrixGetUp(RwMatrix * matrix); - -extern RwV3d * -RwMatrixGetAt(RwMatrix * matrix); - -extern RwV3d * -RwMatrixGetPos(RwMatrix * matrix); - -#endif /* RWDEBUG */ - -/* Update the internal matrix state wrt its elements */ -extern RwMatrix * -RwMatrixUpdate(RwMatrix * matrix); - -/* Update the internal matrix flags wrt its elements */ -extern RwMatrix * -RwMatrixOptimize(RwMatrix * matrix, - const RwMatrixTolerance * - tolerance); - -extern RwReal -_rwMatrixDeterminant(const RwMatrix * matrix); - -extern RwReal -_rwMatrixNormalError(const RwMatrix * matrix); - -extern RwReal -_rwMatrixOrthogonalError(const RwMatrix * matrix); - -extern RwReal -_rwMatrixIdentityError(const RwMatrix * matrix); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* Compatibility macros */ - -#define rwMatrixSetOptimizations(optimizeFlags) \ - _rwMatrixSetOptimizations(optimizeFlags) - -#define rwMatrixSetMultFn(multMat) \ - _rwMatrixSetMultFn(multMat) - -#define rwMatrixOpen(instance, offset, size) \ - _rwMatrixOpen(instance, offset, size) - -#define rwMatrixClose(instance, offset, size) \ - _rwMatrixClose(instance, offset, size) - -/* Initialisation/deinitialisation */ -#define rwMatrixInitialize(m, t) \ -MACRO_START \ -{ \ - rwMatrixSetFlags((m), (t)); \ -} \ -MACRO_STOP - -#define rwMatrixIsNormal(_matrix, _epsilon) \ - ( (_epsilon) >= _rwMatrixNormalError(_matrix) ) - -#define rwMatrixIsOrthogonal(_matrix, _epsilon) \ - ( (_epsilon) >= _rwMatrixOrthogonalError(_matrix) ) - -#define rwMatrixIsOrthonormal(_matrix, _epsilon) \ - ( rwMatrixIsNormal(_matrix, _epsilon) && \ - rwMatrixIsOrthogonal(_matrix, _epsilon) ) - -#define rwMatrixIsOrthonormalPositive(_matrix, _epsilon) \ - ( rwMatrixIsOrthonormal(_matrix, _epsilon) && \ -( (((RwReal)1) - (_epsilon)) <= _rwMatrixDeterminant(_matrix) ) ) - -#define rwMatrixIsIdentity(_matrix, _epsilon) \ - ( (_epsilon) >= _rwMatrixIdentityError(_matrix) ) - -#define rwMatrixValidFlags(_matrix, _epsilon) \ - ( (_matrix) && /* valid pointer */ \ - ( ( !( rwMatrixGetFlags(_matrix) & /* not flagged as identity */ \ - rwMATRIXINTERNALIDENTITY) ) || /* .. or actually is */ \ - rwMatrixIsIdentity(_matrix, _epsilon)) && \ - ( ( !( rwMatrixGetFlags(_matrix) & /* not flagged as normal */ \ - rwMATRIXTYPENORMAL) ) || /* ... or actually is */ \ - rwMatrixIsNormal(_matrix, _epsilon)) && \ - ( ( !( rwMatrixGetFlags(_matrix) & /* not flagged as orthogonal */ \ - rwMATRIXTYPEORTHOGANAL) ) || /* ... or actually is */ \ - rwMatrixIsOrthogonal(_matrix, _epsilon)) ) - -#define rwMat01Det(_mAA) \ - ( (_mAA) ) - -#define rwMat02Det(_mAA, _mAB, \ - _mBA, _mBB) \ - ( (_mAA) * rwMat01Det(_mBB) \ - - (_mAB) * rwMat01Det(_mBA) \ - ) - -#define rwMat03Det(_mAA, _mAB, _mAC, \ - _mBA, _mBB, _mBC, \ - _mCA, _mCB, _mCC) \ - ( (_mAA) * rwMat02Det(_mBB, _mBC, \ - _mCB, _mCC) \ - - (_mAB) * rwMat02Det(_mBA, _mBC, \ - _mCA, _mCC) \ - + (_mAC) * rwMat02Det(_mBA, _mBB, \ - _mCA, _mCB) \ - ) - -#define rwMat04Det(_mAA, _mAB, _mAC, _mAD, \ - _mBA, _mBB, _mBC, _mBD, \ - _mCA, _mCB, _mCC, _mCD, \ - _mDA, _mDB, _mDC, _mDD) \ - ( (_mAA) * rwMat03Det(_mBB, _mBC, _mBD, \ - _mCB, _mCC, _mCD, \ - _mDB, _mDC, _mDD) \ - - (_mAB) * rwMat03Det(_mBA, _mBC, _mBD, \ - _mCA, _mCC, _mCD, \ - _mDA, _mDC, _mDD) \ - + (_mAC) * rwMat03Det(_mBA, _mBB, _mBD, \ - _mCA, _mCB, _mCD, \ - _mDA, _mDB, _mDD) \ - - (_mAD) * rwMat03Det(_mBA, _mBB, _mBC, \ - _mCA, _mCB, _mCC, \ - _mDA, _mDB, _mDC) \ - ) - - -#define rwMat02Inv(_rAA, _rAB, \ - _rBA, _rBB) \ - _mAA, _mAB, \ - _mBA, _mBB) \ -MACRO_START \ -{ \ - RwSplitBits determinant; \ - \ - (_rAA) = rwMat01Det(_mBB); \ - (_rAB) = -rwMat01Det(_mAB); \ - \ - determinant.nReal = ( (_rAA) * (_mAA) + \ - (_rAB) * (_mBA) ); \ - \ - \ - { \ - const RwReal normalize = ( (determinant.nInt != 0)? \ - (((RwReal)1)/determinant.nReal): \ - ((RwReal)1) ); \ - \ - (_rAA) *= normalize; \ - (_rAB) *= normalize; \ - \ - (_rBA) = -rwMat01Det(_mBA) * normalize; \ - (_rBB) = rwMat01Det(_mAA) * normalize; \ - } \ -} \ -MACRO_STOP - -#define rwMat03Inv(_rAA, _rAB, _rAC, \ - _rBA, _rBB, _rBC, \ - _rCA, _rCB, _rCC, \ - _mAA, _mAB, _mAC, \ - _mBA, _mBB, _mBC, \ - _mCA, _mCB, _mCC) \ -MACRO_START \ -{ \ - RwSplitBits determinant; \ - \ - (_rAA)= rwMat02Det(_mBB, _mBC, \ - _mCB, _mCC); \ - (_rAB)= -rwMat02Det(_mAB, _mAC, \ - _mCB, _mCC); \ - (_rAC)= rwMat02Det(_mAB, _mAC, \ - _mBB, _mBC); \ - \ - determinant.nReal = ( (_rAA) * (_mAA) + \ - (_rAB) * (_mBA) + \ - (_rAC) * (_mCA) ); \ - \ - { \ - const RwReal normalize = ( (determinant.nInt != 0)? \ - (((RwReal)1)/determinant.nReal): \ - ((RwReal)1) ); \ - (_rAA) *= normalize; \ - (_rAB) *= normalize; \ - (_rAC) *= normalize; \ - \ - (_rBA)= -rwMat02Det(_mBA, _mBC, \ - _mCA, _mCC) * normalize ; \ - (_rBB)= rwMat02Det(_mAA, _mAC, \ - _mCA, _mCC) * normalize ; \ - (_rBC)= -rwMat02Det(_mAA, _mAC, \ - _mBA, _mBC) * normalize ; \ - \ - (_rCA)= rwMat02Det(_mBA, _mBB, \ - _mCA, _mCB) * normalize ; \ - (_rCB)= -rwMat02Det(_mAA, _mAB, \ - _mCA, _mCB) * normalize ; \ - (_rCC)= rwMat02Det(_mAA, _mAB, \ - _mBA, _mBB) * normalize ; \ - } \ - \ -} \ -MACRO_STOP - -#define rwMat04Inv(_rAA, _rAB, _rAC, _rAD, \ - _rBA, _rBB, _rBC, _rBD, \ - _rCA, _rCB, _rCC, _rCD, \ - _rDA, _rDB, _rDC, _rDD, \ - _mAA, _mAB, _mAC, _mAD, \ - _mBA, _mBB, _mBC, _mBD, \ - _mCA, _mCB, _mCC, _mCD, \ - _mDA, _mDB, _mDC, _mDD) \ -MACRO_START \ -{ \ - RwSplitBits determinant; \ - \ - (_rAA)= rwMat03Det(_mBB, _mBC, _mBD, \ - _mCB, _mCC, _mCD, \ - _mDB, _mDC, _mDD); \ - (_rAB)= -rwMat03Det(_mAB, _mAC, _mAD, \ - _mCB, _mCC, _mCD, \ - _mDB, _mDC, _mDD); \ - (_rAC)= rwMat03Det(_mAB, _mAC, _mAD, \ - _mBB, _mBC, _mBD, \ - _mDB, _mDC, _mDD); \ - (_rAD)= -rwMat03Det(_mAB, _mAC, _mAD, \ - _mBB, _mBC, _mBD, \ - _mCB, _mCC, _mCD); \ - \ - determinant.nReal = ( (_rAA) * (_mAA) + \ - (_rAB) * (_mBA) + \ - (_rAC) * (_mCA) + \ - (_rAD) * (_mDA) ); \ - \ - { \ - const RwReal normalize = ( (determinant.nInt != 0)? \ - (((RwReal)1)/determinant.nReal): \ - ((RwReal)1) ); \ - \ - (_rAA) *= normalize; \ - (_rAB) *= normalize; \ - (_rAC) *= normalize; \ - (_rAD) *= normalize; \ - \ - (_rBA)= -rwMat03Det(_mBA, _mBC, _mBD, \ - _mCA, _mCC, _mCD, \ - _mDA, _mDC, _mDD) * normalize ; \ - (_rBB)= rwMat03Det(_mAA, _mAC, _mAD, \ - _mCA, _mCC, _mCD, \ - _mDA, _mDC, _mDD) * normalize ; \ - (_rBC)= -rwMat03Det(_mAA, _mAC, _mAD, \ - _mBA, _mBC, _mBD, \ - _mDA, _mDC, _mDD) * normalize ; \ - (_rBD)= rwMat03Det(_mAA, _mAC, _mAD, \ - _mBA, _mBC, _mBD, \ - _mCA, _mCC, _mCD) * normalize ; \ - \ - (_rCA)= rwMat03Det(_mBA, _mBB, _mBD, \ - _mCA, _mCB, _mCD, \ - _mDA, _mDB, _mDD) * normalize ; \ - (_rCB)= -rwMat03Det(_mAA, _mAB, _mAD, \ - _mCA, _mCB, _mCD, \ - _mDA, _mDB, _mDD) * normalize ; \ - (_rCC)= rwMat03Det(_mAA, _mAB, _mAD, \ - _mBA, _mBB, _mBD, \ - _mDA, _mDB, _mDD) * normalize ; \ - (_rCD)= -rwMat03Det(_mAA, _mAB, _mAD, \ - _mBA, _mBB, _mBD, \ - _mCA, _mCB, _mCD) * normalize ; \ - \ - (_rDA)= -rwMat03Det(_mBA, _mBB, _mBC, \ - _mCA, _mCB, _mCC, \ - _mDA, _mDB, _mDC) * normalize ; \ - (_rDB)= rwMat03Det(_mAA, _mAB, _mAC, \ - _mCA, _mCB, _mCC, \ - _mDA, _mDB, _mDC) * normalize ; \ - (_rDC)= -rwMat03Det(_mAA, _mAB, _mAC, \ - _mBA, _mBB, _mBC, \ - _mDA, _mDB, _mDC) * normalize ; \ - (_rDD)= rwMat03Det(_mAA, _mAB, _mAC, \ - _mBA, _mBB, _mBC, \ - _mCA, _mCB, _mCC) * normalize ; \ - } \ -} \ -MACRO_STOP - - -/*--- Automatically derived from: C:/daily/rwsdk/driver/d3d8/drvmodel.h ---*/ -#ifndef D3D8_DRVMODEL_H -#define D3D8_DRVMODEL_H - -#if (defined(__ICL)) -/* Avoid voluminous - * 'warning #344: typedef name has already been declared (with same type)' - * warnings from MS include files - */ -#pragma warning( disable : 344 ) -#endif /* (defined(__ICL)) */ - -//nobody needed that - AAP -//#include <windows.h> - -#if (defined(RWDEBUG)) -#if (defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) -#define _CRTDBG_MAP_ALLOC -#endif /* defined(RWMEMDEBUG) && !defined(_CRTDBG_MAP_ALLOC)) */ -#include <crtdbg.h> -#define ERR_WRAP(A) (_rwRePrintErrorDDD3D((A), __FILE__, __LINE__)) -#endif /* (defined(RWDEBUG)) */ - -#if (!defined(ERR_WRAP)) -#define ERR_WRAP(A) (A) -#endif /* (!defined(ERR_WRAP)) */ - -/**************************************************************************** - Defines - */ - -/* Set true depth information (for fogging, eg) */ -#define RwIm2DVertexSetCameraX(vert, camx) /* Nothing */ -#define RwIm2DVertexSetCameraY(vert, camy) /* Nothing */ -#define RwIm2DVertexSetCameraZ(vert, camz) /* Nothing */ - -#define RwIm2DVertexSetRecipCameraZ(vert, recipz) ((vert)->rhw = recipz) - -#define RwIm2DVertexGetCameraX(vert) (cause an error) -#define RwIm2DVertexGetCameraY(vert) (cause an error) -#define RwIm2DVertexGetCameraZ(vert) (cause an error) -#define RwIm2DVertexGetRecipCameraZ(vert) ((vert)->rhw) - -/* Set screen space coordinates in a device vertex */ -#define RwIm2DVertexSetScreenX(vert, scrnx) ((vert)->x = (scrnx)) -#define RwIm2DVertexSetScreenY(vert, scrny) ((vert)->y = (scrny)) -#define RwIm2DVertexSetScreenZ(vert, scrnz) ((vert)->z = (scrnz)) -#define RwIm2DVertexGetScreenX(vert) ((vert)->x) -#define RwIm2DVertexGetScreenY(vert) ((vert)->y) -#define RwIm2DVertexGetScreenZ(vert) ((vert)->z) - -/* Set texture coordinates in a device vertex */ -#define RwIm2DVertexSetU(vert, texU, recipz) ((vert)->u = (texU)) -#define RwIm2DVertexSetV(vert, texV, recipz) ((vert)->v = (texV)) -#define RwIm2DVertexGetU(vert) ((vert)->u) -#define RwIm2DVertexGetV(vert) ((vert)->v) - -/* Modify the luminance stuff */ -#define RwIm2DVertexSetRealRGBA(vert, red, green, blue, alpha) \ - ((vert)->emissiveColor = \ - (((RwFastRealToUInt32(alpha)) << 24) | \ - ((RwFastRealToUInt32(red)) << 16) | \ - ((RwFastRealToUInt32(green)) << 8) | \ - ((RwFastRealToUInt32(blue))))) - -#define RwIm2DVertexSetIntRGBA(vert, red, green, blue, alpha) \ - ((vert)->emissiveColor = \ - ((((RwUInt32)(alpha)) << 24) | \ - (((RwUInt32)(red)) << 16) | \ - (((RwUInt32)(green)) << 8) | \ - (((RwUInt32)(blue))))) - -#define RwIm2DVertexGetRed(vert) \ - (((vert)->emissiveColor >> 16) & 0xFF) - -#define RwIm2DVertexGetGreen(vert) \ - (((vert)->emissiveColor >> 8) & 0xFF) - -#define RwIm2DVertexGetBlue(vert) \ - ((vert)->emissiveColor & 0xFF) - -#define RwIm2DVertexGetAlpha(vert) \ - (((vert)->emissiveColor >> 24) & 0xFF) - -#define RwIm2DVertexCopyRGBA(dst, src) \ - ((dst)->emissiveColor = (src)->emissiveColor) - -/* Clipper stuff */ - -#define RwIm2DVertexClipRGBA(o, i, n, f) \ -MACRO_START \ -{ \ - const RwInt32 _factor = \ - (RwFastRealToUInt32(i * (RwReal)(255))) & 255; \ - \ - (o)->emissiveColor = \ - (((((RwIm2DVertexGetAlpha(f) - RwIm2DVertexGetAlpha(n)) * \ - _factor) >> 8) + RwIm2DVertexGetAlpha(n)) << 24) | \ - (((((RwIm2DVertexGetRed(f) - RwIm2DVertexGetRed(n)) * \ - _factor) >> 8) + RwIm2DVertexGetRed(n)) << 16) | \ - (((((RwIm2DVertexGetGreen(f) - RwIm2DVertexGetGreen(n)) * \ - _factor) >> 8) + RwIm2DVertexGetGreen(n)) << 8) | \ - (((((RwIm2DVertexGetBlue(f) - RwIm2DVertexGetBlue(n)) * \ - _factor) >> 8) + RwIm2DVertexGetBlue(n))); \ -} \ -MACRO_STOP - -/* LEGACY-SUPPORT macros */ -#define RWIM2DVERTEXSetCameraX(vert, camx) RwIm2DVertexSetCameraX(vert, camx) -#define RWIM2DVERTEXSetCameraY(vert, camy) RwIm2DVertexSetCameraY(vert, camy) -#define RWIM2DVERTEXSetCameraZ(vert, camz) RwIm2DVertexSetCameraZ(vert, camz) -#define RWIM2DVERTEXSetRecipCameraZ(vert, recipz) \ - RwIm2DVertexSetRecipCameraZ(vert, recipz) -#define RWIM2DVERTEXGetCameraX(vert) RwIm2DVertexGetCameraX(vert) -#define RWIM2DVERTEXGetCameraY(vert) RwIm2DVertexGetCameraY(vert) -#define RWIM2DVERTEXGetCameraZ(vert) RwIm2DVertexGetCameraZ(vert) -#define RWIM2DVERTEXGetRecipCameraZ(vert) RwIm2DVertexGetRecipCameraZ(vert) -#define RWIM2DVERTEXSetScreenX(vert, scrnx) RwIm2DVertexSetScreenX(vert, scrnx) -#define RWIM2DVERTEXSetScreenY(vert, scrny) RwIm2DVertexSetScreenY(vert, scrny) -#define RWIM2DVERTEXSetScreenZ(vert, scrnz) RwIm2DVertexSetScreenZ(vert, scrnz) -#define RWIM2DVERTEXGetScreenX(vert) RwIm2DVertexGetScreenX(vert) -#define RWIM2DVERTEXGetScreenY(vert) RwIm2DVertexGetScreenY(vert) -#define RWIM2DVERTEXGetScreenZ(vert) RwIm2DVertexGetScreenZ(vert) -#define RWIM2DVERTEXSetU(vert, u, recipz) RwIm2DVertexSetU(vert, u, recipz) -#define RWIM2DVERTEXSetV(vert, v, recipz) RwIm2DVertexSetV(vert, v, recipz) -#define RWIM2DVERTEXGetU(vert) RwIm2DVertexGetU(vert) -#define RWIM2DVERTEXGetV(vert) RwIm2DVertexGetV(vert) -#define RWIM2DVERTEXSetRealRGBA(vert, red, green, blue, alpha) \ - RwIm2DVertexSetRealRGBA(vert, red, green, blue, alpha) -#define RWIM2DVERTEXSetIntRGBA(vert, red, green, blue, alpha) \ - RwIm2DVertexSetIntRGBA(vert, red, green, blue, alpha) -#define RWIM2DVERTEXGetRed(vert) RwIm2DVertexGetRed(vert) -#define RWIM2DVERTEXGetGreen(vert) RwIm2DVertexGetGreen(vert) -#define RWIM2DVERTEXGetBlue(vert) RwIm2DVertexGetBlue(vert) -#define RWIM2DVERTEXGetAlpha(vert) RwIm2DVertexGetAlpha(vert) -#define RWIM2DVERTEXCopyRGBA(dst, src) RwIm2DVertexCopyRGBA(dst, src) -#define RWIM2DVERTEXClipRGBA(o, i, n, f) RwIm2DVertexClipRGBA(o, i, n, f) - -/**************************************************************************** - Global Types - */ - -/* We use RwD3D8Vertex to drive the hardware in 2D mode */ - -/** - * \ingroup rwcoredriverd3d8 - * \typedef RwD3D8Vertex - * D3D8 vertex structure definition for 2D geometry - */ -typedef struct RwD3D8Vertex RwD3D8Vertex; -/** - * \ingroup rwcoredriverd3d8 - * \struct RwD3D8Vertex - * D3D8 vertex structure definition for 2D geometry - */ -struct RwD3D8Vertex -{ - RwReal x; /**< Screen X */ - RwReal y; /**< Screen Y */ - RwReal z; /**< Screen Z */ - RwReal rhw; /**< Reciprocal of homogeneous W */ - - RwUInt32 emissiveColor; /**< Vertex color */ - - RwReal u; /**< Texture coordinate U */ - RwReal v; /**< Texture coordinate V */ -}; - -/* Define types used */ - -/** - * \ingroup rwcoredriverd3d8 - * \typedef RwIm2DVertex - * Typedef for a RenderWare Graphics Immediate Mode 2D Vertex - */ -typedef RwD3D8Vertex RwIm2DVertex; - -/* LEGACY-SUPPORT macro */ -/** - * \ingroup rwcoredriverd3d8 - * \def RWIM2DVERTEX - * RWIM2DVERTEX is a legacy macro for RwIm2DVertex - */ -#define RWIM2DVERTEX RwIm2DVertex - -/** - * \ingroup rwcoredriverd3d8 - * \typedef RxVertexIndex - * - * Typedef for a RenderWare Graphics PowerPipe Immediate - * Mode Vertex - */ -typedef RwUInt16 RxVertexIndex; - -/** - * \ingroup rwcoredriverd3d8 - * \typedef RwImVertexIndex - * Typedef for a RenderWare Graphics Immediate Mode Vertex. - */ -typedef RxVertexIndex RwImVertexIndex; - -/* LEGACY-SUPPORT macro */ -/** - * \ingroup rwcoredriverd3d8 - * \def RWIMVERTEXINDEX - * RWIMVERTEXINDEX is a legacy macro for RwImVertexIndex - */ -#define RWIMVERTEXINDEX RwImVertexIndex - -/** - * \ingroup rwcoredriverd3d8 - * \struct RwD3D8Metrics - * Structure containing metrics counters - */ -typedef struct -{ - RwUInt32 numRenderStateChanges; /**< Number of Render States changed */ - RwUInt32 numTextureStageStateChanges; /**< Number of Texture Stage States changed */ - RwUInt32 numMaterialChanges; /**< Number of Material changes */ - RwUInt32 numLightsChanged; /**< Number of Lights changed */ -} -RwD3D8Metrics; - -#endif /* D3D8_DRVMODEL_H */ - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bavector.h ---*/ - -/* - * Typedef for pointer to Vector multiplication by Matrix function - */ - -typedef RwV3d *(*rwVectorMultFn) (RwV3d * pointsOut, - const RwV3d * pointsIn, - RwInt32 numPoints, - const RwMatrix * matrix); - - -/* If sqrt is overloaded for this platform, we will remove - * all the sqrt table stuff from the build entirely - * currently applies to SKY2 and XBOX - IDBS [2/11/2001] - * [and, if using the intel compiler version 400 or above, - * we will use the single-precision float "sqrtf" under - * D3D7, D3D8, OpenGL or SoftRas] */ -#if (defined(rwSqrtMacro)) -#define RWNOSQRTTABLE -#endif /* (defined(rwSqrtMacro)) */ -#if (defined(rwInvSqrtMacro)) -#define RWNOINVSQRTTABLE -#endif /* (defined(rwSqrtMacro)) */ - -#if (!defined(rwSqrtMacro)) -#define rwSqrtMacro(_root, _input) \ - ( *(_root) = _rwSqrt(_input) ) -#endif /* (!defined(rwSqrtMacro)) */ - -#if (!defined(rwInvSqrtMacro)) -#define rwInvSqrtMacro(_recip, _input) \ - ( *(_recip) = _rwInvSqrt(_input) ) -#endif /* (!defined(rwInvSqrtMacro)) */ - -#if (!defined(rwSqrtInvSqrtMacro)) -#define rwSqrtInvSqrtMacro(_root, _recip, _input) \ -MACRO_START \ -{ \ - RwReal _tmp = _input; \ - rwSqrt((_root), _tmp); \ - rwInvSqrt((_recip), _tmp); \ -} \ -MACRO_STOP -#endif /* (!defined(rwSqrtInvSqrtMacro)) */ - -/* Vector operations Macros */ - -#if (!defined(RwV2dAssignMacro)) -#define RwV2dAssignMacro(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwV2dAssignMacro)) */ - -#define RwV2dAddMacro(o, a, b) \ -MACRO_START \ -{ \ - (o)->x = (((a)->x) + ( (b)->x)); \ - (o)->y = (((a)->y) + ( (b)->y)); \ -} \ -MACRO_STOP - -#define RwV2dSubMacro(o, a, b) \ -MACRO_START \ -{ \ - (o)->x = (((a)->x) - ( (b)->x)); \ - (o)->y = (((a)->y) - ( (b)->y)); \ -} \ -MACRO_STOP - -#define RwV2dScaleMacro(o, i, s) \ -MACRO_START \ -{ \ - (o)->x = (((i)->x) * ( (s))); \ - (o)->y = (((i)->y) * ( (s))); \ -} \ -MACRO_STOP - -#define RwV2dDotProductMacro(a,b) \ - (( ((((a)->x) * ( (b)->x))) + \ - ( (((a)->y) * ( (b)->y))))) \ - -#define _rwV2dNormalizeMacro(_result, _out, _in) \ -MACRO_START \ -{ \ - RwReal length2 = RwV2dDotProductMacro((_in), (_in)); \ - rwInvSqrtMacro(&(_result), length2); \ - RwV2dScaleMacro((_out), (_in), (_result)); \ -} \ -MACRO_STOP - -#define RwV2dNormalizeMacro(_result, _out, _in) \ -MACRO_START \ -{ \ - RwReal length2 = RwV2dDotProductMacro((_in), (_in)); \ - RwReal recip; \ - \ - rwSqrtInvSqrtMacro(&(_result), &recip, length2); \ - RwV2dScaleMacro((_out), (_in), recip); \ -} \ -MACRO_STOP - -#define RwV2dLengthMacro(_result, _in) \ -MACRO_START \ -{ \ - (_result) = RwV2dDotProductMacro(_in, _in); \ - rwSqrtMacro(&(_result), (_result)); \ -} \ -MACRO_STOP - -#define RwV2dLineNormalMacro(_o, _a, _b) \ -MACRO_START \ -{ \ - RwReal recip; \ - \ - (_o)->y = (((_b)->x) - ( (_a)->x)); \ - (_o)->x = (((_a)->y) - ( (_b)->y)); \ - _rwV2dNormalizeMacro(recip, _o,_o); \ -} \ -MACRO_STOP - -#define RwV2dPerpMacro(o, a) \ -MACRO_START \ -{ \ - (o)->x = -(a)->y; \ - (o)->y = (a)->x; \ -} \ -MACRO_STOP - -/* RwV3d */ - -#if (!defined(RwV3dAssignMacro)) -#define RwV3dAssignMacro(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwV3dAssignMacro)) */ - - -#define RwV3dAddMacro(o, a, b) \ -MACRO_START \ -{ \ - (o)->x = (((a)->x) + ( (b)->x)); \ - (o)->y = (((a)->y) + ( (b)->y)); \ - (o)->z = (((a)->z) + ( (b)->z)); \ -} \ -MACRO_STOP - -#define RwV3dSubMacro(o, a, b) \ -MACRO_START \ -{ \ - (o)->x = (((a)->x) - ( (b)->x)); \ - (o)->y = (((a)->y) - ( (b)->y)); \ - (o)->z = (((a)->z) - ( (b)->z)); \ -} \ -MACRO_STOP - -#define RwV3dScaleMacro(o, a, s) \ -MACRO_START \ -{ \ - (o)->x = (((a)->x) * ( (s))); \ - (o)->y = (((a)->y) * ( (s))); \ - (o)->z = (((a)->z) * ( (s))); \ -} \ -MACRO_STOP - -#define RwV3dIncrementScaledMacro(o, a, s) \ -MACRO_START \ -{ \ - (o)->x += (((a)->x) * ( (s))); \ - (o)->y += (((a)->y) * ( (s))); \ - (o)->z += (((a)->z) * ( (s))); \ -} \ -MACRO_STOP - -#define RwV3dNegateMacro(o, a) \ -MACRO_START \ -{ \ - (o)->x = -(a)->x; \ - (o)->y = -(a)->y; \ - (o)->z = -(a)->z; \ -} \ -MACRO_STOP - -#define RwV3dDotProductMacro(a, b) \ - ((((( (((a)->x) * ((b)->x))) + \ - ( (((a)->y) * ((b)->y))))) + \ - ( (((a)->z) * ((b)->z))))) \ - -#define RwV3dCrossProductMacro(o, a, b) \ -MACRO_START \ -{ \ - (o)->x = \ - (( (((a)->y) * ( (b)->z))) - \ - ( (((a)->z) * ( (b)->y)))); \ - (o)->y = \ - (( (((a)->z) * ( (b)->x))) - \ - ( (((a)->x) * ( (b)->z)))); \ - (o)->z = \ - (( (((a)->x) * ( (b)->y))) - \ - ( (((a)->y) * ( (b)->x)))); \ -} \ -MACRO_STOP - -#define _rwV3dNormalizeMacro(_result, _out, _in) \ -MACRO_START \ -{ \ - RwReal length2 = RwV3dDotProductMacro(_in, _in); \ - rwInvSqrtMacro(&(_result), length2); \ - RwV3dScaleMacro(_out, _in, _result); \ -} \ -MACRO_STOP - -#define RwV3dNormalizeMacro(_result, _out, _in) \ -MACRO_START \ -{ \ - RwReal length2 = RwV3dDotProductMacro((_in), (_in)); \ - RwReal recip; \ - \ - rwSqrtInvSqrtMacro(&(_result), &recip, length2); \ - RwV3dScaleMacro((_out), (_in), recip); \ -} \ -MACRO_STOP - -#define RwV3dLengthMacro(_result, _in) \ -MACRO_START \ -{ \ - (_result) = RwV3dDotProductMacro(_in, _in); \ - rwSqrtMacro(&(_result), _result); \ -} \ -MACRO_STOP - -#if (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) - -#define RwV2dAssign(o, a) RwV2dAssignMacro(o, a) -#define RwV2dAdd(o, a, b) RwV2dAddMacro(o, a, b) -#define RwV2dSub(o, a, b) RwV2dSubMacro(o, a, b) -#define RwV2dLineNormal(_o, _a, _b) RwV2dLineNormalMacro(_o, _a, _b) -#define RwV2dScale(o, i, s) RwV2dScaleMacro(o, i, s) -#define RwV2dDotProduct(a,b) RwV2dDotProductMacro(a,b) -#define RwV2dPerp(o, a) RwV2dPerpMacro(o, a) -#define RwV3dAssign(o, a) RwV3dAssignMacro(o, a) -#define RwV3dAdd(o, a, b) RwV3dAddMacro(o, a, b) -#define RwV3dSub(o, a, b) RwV3dSubMacro(o, a, b) -#define RwV3dScale(o, a, s) RwV3dScaleMacro(o, a, s) -#define RwV3dIncrementScaled(o, a, s) RwV3dIncrementScaledMacro(o, a, s) -#define RwV3dNegate(o, a) RwV3dNegateMacro(o, a) -#define RwV3dDotProduct(a, b) RwV3dDotProductMacro(a, b) -#define RwV3dCrossProduct(o, a, b) RwV3dCrossProductMacro(o, a, b) - -#endif /* (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) */ - -#define RWRAD2DEG(_x) ((_x) * (((RwReal)180)/(rwPI))) - -#if (!defined(rw4OVERPISQ)) -#define rw4OVERPISQ ( ((RwReal)4) / ( rwPI * rwPI )) -#endif /* (!defined(rw4OVERPISQ)) */ - -#if (!defined(rwPI3)) -#define rwPI3 (rwPI * (RwReal)3) -#endif /* (!defined(rwPI3)) */ - -#if (!defined(rwPI3OVER2)) -#define rwPI3OVER2 ( rwPI3 / (RwReal)2 ) -#endif /* (!defined(rwPI3OVER2)) */ - -#if (!defined(rwPI3OVER8)) -#define rwPI3OVER8 (rwPI3 / (RwReal)8 ) -#endif /* (!defined(rwPI3OVER8)) */ - -#define RwQuadSin(_x) \ - ( rw4OVERPISQ * \ - ( ( (_x) < 0 ) ? \ - ( ( rwPI + (_x) ) * (_x) ) : \ - ( ( rwPI - (_x) ) * (_x) ) ) ) - -#define RwQuadASin(_result, _s) \ - ( rwPIOVER2 * ( ((_s)<0) ? \ - ( rwSqrtMacro((_result), 1.0f + (_s)) - 1 ) : \ - ( 1 - rwSqrtMacro((_result), 1.0f - (_s)) ) ) ) - -#define RwQuadCos(_x) \ - ( rw4OVERPISQ * \ - ( ( (_x) < -rwPIOVER2 ) ? \ - ( ( -rwPI3OVER2 - (_x) ) * ( -rwPIOVER2 - (_x) ) ) : \ - ( ( (_x) < rwPIOVER2) ? \ - ( ( rwPIOVER2 + (_x) ) * ( rwPIOVER2 - (_x) ) ) : \ - ( ( rwPIOVER2 - (_x) ) * ( rwPI3OVER2 - (_x) ) ) ) ) ) - -#define RwQuadACos(_result, _c) \ - ( rwPIOVER2 * ( ((_c)<0) ? \ - (2.0f - rwSqrtMacro((_result), 1.0f + (_c))): \ - rwSqrtMacro((_result), 1.0f - (_c))) ) - -#define RwQuadTan(_x) \ - ( rwPI3 * (_x) / ( rwPI * rwPI - (_x) * (_x) * 4.0f ) ) - -#define RwQuadATan(_result, _t) \ - ( ( rwSqrtMacro((_result), (rwPI3OVER8 * rwPI3OVER8) + \ - (_t) * (_t) * (rwPIOVER2 * rwPIOVER2) ) - rwPI3OVER8 ) \ - / ( _t) ) - -#define RwQuadATan2(_result, _s, _c) \ - ( ( rwSqrtMacro((_result), (_c) * (_c) * (rwPI3OVER8 * rwPI3OVER8) + \ - (_s) * (_s) * (rwPIOVER2 * rwPIOVER2) ) \ - - (_c) * rwPI3OVER8 ) / ( _s) ) - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Other useful stuff */ - -extern RwReal RwV3dNormalize(RwV3d * out, const RwV3d * in); -extern RwReal RwV3dLength(const RwV3d * in); - -extern RwReal RwV2dLength(const RwV2d * in); -extern RwReal RwV2dNormalize(RwV2d * out, const RwV2d * in); - -#if ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ) - -extern void RwV2dAssign(RwV2d * out, - const RwV2d * ina); -extern void RwV2dAdd(RwV2d * out, - const RwV2d * ina, const RwV2d * inb); -extern void RwV2dLineNormal(RwV2d * out, - const RwV2d * ina, const RwV2d * inb); -extern void RwV2dSub(RwV2d * out, - const RwV2d * ina, const RwV2d * inb); -extern void RwV2dPerp(RwV2d * out, const RwV2d * in); -extern void RwV2dScale(RwV2d * out, - const RwV2d * in, RwReal scalar); -extern RwReal RwV2dDotProduct(const RwV2d * ina, const RwV2d * inb); - -extern void RwV3dAssign(RwV3d * out, - const RwV3d * ina); -extern void RwV3dAdd(RwV3d * out, - const RwV3d * ina, const RwV3d * inb); -extern void RwV3dSub(RwV3d * out, - const RwV3d * ina, const RwV3d * inb); -extern void RwV3dScale(RwV3d * out, - const RwV3d * in, RwReal scalar); -extern void RwV3dIncrementScaled(RwV3d * out, - const RwV3d * in, RwReal scalar); -extern void RwV3dNegate(RwV3d * out, const RwV3d * in); -extern RwReal RwV3dDotProduct(const RwV3d * ina, const RwV3d * inb); -extern void RwV3dCrossProduct(RwV3d * out, - const RwV3d * ina, const RwV3d * inb); - -#endif /* ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ) */ - -/* Transform points/vectors */ -extern RwV3d *RwV3dTransformPoints(RwV3d * pointsOut, - const RwV3d * pointsIn, - RwInt32 numPoints, - const RwMatrix * matrix); -extern RwV3d *RwV3dTransformVectors(RwV3d * vectorsOut, - const RwV3d * vectorsIn, - RwInt32 numPoints, - const RwMatrix * matrix); - -/* SPI */ - -#if (!defined(RWNOSQRTTABLE)) -extern RwReal _rwSqrt(const RwReal num); -#endif /* (!defined(RWNOSQRTTABLE)) */ -#if (!defined(RWNOINVSQRTTABLE)) -extern RwReal _rwInvSqrt(const RwReal num); -#endif /* (!defined(RWNOINVSQRTTABLE)) */ - -extern RwReal _rwV3dNormalize(RwV3d * out, const RwV3d * in); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#define rwVectorOpen(instance, offset, size) \ - _rwVectorOpen(instance, offset, size) - -#define rwVectorClose(instance, offset, size) \ - _rwVectorClose(instance, offset, size) - -#define rwVectorSetMultFn(multPoint,multVector) \ - _rwVectorSetMultFn(multPoint,multVector) - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/balist.h ---*/ -/**************************************************************************** - Global Types - */ - -typedef struct RwSList RwSList; -struct RwSList -{ - RwUInt8 *listElements; - RwInt32 numElementsFilled; - RwInt32 numElementsAlloced; - RwInt32 entrySize; -}; - - - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* SList functions */ -extern RwSList *_rwSListCreate(RwInt32 size); -extern RwBool _rwSListDestroy(RwSList *sList); -extern RwBool _rwSListDestroyArray(RwUInt8 *array); -extern void _rwSListDestroyEndEntries(RwSList *sList, RwInt32 amount); -extern RwBool _rwSListDestroyEntry(RwSList *sList, RwInt32 entry); -extern void _rwSListEmpty(RwSList *sList); -extern void *_rwSListGetArray(RwSList *sList); -extern void *_rwSListGetEntry(RwSList *sList, RwInt32 entry); -extern void *_rwSListGetNewEntry(RwSList *sList); -extern void *_rwSListGetNewEntries(RwSList *sList, RwInt32 entry); -extern RwInt32 _rwSListGetNumEntries(const RwSList *sList); -extern RwBool _rwSListReleaseArray(RwSList *sList); -extern void *_rwSListToArray(RwSList *sList); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* Comparibility macros */ - -#define rwSListCreate(size) \ - _rwSListCreate(size) -#define rwSListDestroy(sList) \ - _rwSListDestroy(sList) -#define rwSListDestroyArray(array) \ - _rwSListDestroyArray(array) -#define rwSListDestroyEndEntries(sList, amount) \ - _rwSListDestroyEndEntries(sList, amount) -#define rwSListDestroyEntry(sList, entry) \ - _rwSListDestroyEntry(sList, entry) -#define rwSListEmpty(sList) \ - _rwSListEmpty(sList) -#define rwSListGetArray(sList) \ - _rwSListGetArray(sList) -#define rwSListGetEntry(sList, entry) \ - _rwSListGetEntry(sList, entry) -#define rwSListGetNewEntry(sList) \ - _rwSListGetNewEntry(sList) -#define rwSListGetNewEntries(sList, entry) \ - _rwSListGetNewEntries(sList, entry) -#define rwSListGetNumEntries(sList) \ - _rwSListGetNumEntries(sList) -#define rwSListReleaseArray(sList) \ - _rwSListReleaseArray(sList) -#define rwSListToArray(sList) \ - _rwSListToArray(sList) - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/baimmedi.h ---*/ - -/**************************************************************************** - Defines - */ - - -/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - Immediate mode interface V2.0 - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ - -/** - * \ingroup datatypes - * RwRenderState - * This type represents the various render states that - * can be set using the API function \ref RwRenderStateSet. This function also - * takes a render state value or pointer to an object depending on the type. - * For render states that are toggles, the value should be TRUE to switch the - * state on and FALSE to turn it off. - * - * Note that many of these render states may not be supported on certain - * platforms. The \ref RwRenderStateSet functions will return FALSE in such cases. - */ -enum RwRenderState -{ - rwRENDERSTATENARENDERSTATE = 0, - rwRENDERSTATETEXTURERASTER, /**<Raster to texture with. \ref RwRenderStateSet - * takes a pointer to an \ref RwRaster */ - rwRENDERSTATETEXTUREADDRESS, /**<\ref RwTextureAddressMode: wrap, clamp, mirror or border */ - rwRENDERSTATETEXTUREADDRESSU, /**<\ref RwTextureAddressMode in u only */ - rwRENDERSTATETEXTUREADDRESSV, /**<\ref RwTextureAddressMode in v only */ - rwRENDERSTATETEXTUREPERSPECTIVE, /**<Perspective correction on/off */ - rwRENDERSTATEZTESTENABLE, /**<Z-buffer test on/off */ - rwRENDERSTATESHADEMODE, /**<\ref RwShadeMode: flat or gouraud shading */ - rwRENDERSTATEZWRITEENABLE, /**<Z-buffer write on/off */ - rwRENDERSTATETEXTUREFILTER, /**<\ref RwTextureFilterMode: point sample, bilinear, trilinear, etc */ - rwRENDERSTATESRCBLEND, /**<Source alpha \ref RwBlendFunction: src alpha, 1-src alpha, etc */ - rwRENDERSTATEDESTBLEND, /**<Destination alpha \ref RwBlendFunction */ - rwRENDERSTATEVERTEXALPHAENABLE, /**<Vertex alpha transparency on/off */ - rwRENDERSTATEBORDERCOLOR, /**<Border color for \ref RwTextureAddressMode rwTEXTUREADDRESSBORDER. - * The value should be a packed RwUInt32 in ARGB form. The macro - * RWRGBALONG(r, g, b, a) may be used to construct this using 8-bit - * color components. */ - rwRENDERSTATEFOGENABLE, /**<Fogging on/off (all polygons will be fogged) */ - rwRENDERSTATEFOGCOLOR, /**<Color used for fogging. The value should be a packed RwUInt32 - * in ARGB form. The macro RWRGBALONG(r, g, b, a) may be used to - * construct this using 8-bit color components */ - rwRENDERSTATEFOGTYPE, /**<Sets \ref RwFogType, the type of fogging to use */ - rwRENDERSTATEFOGDENSITY, /**<Select the fog density for \ref RwFogType of rwFOGTYPEEXPONENTIAL - * or rwFOGTYPEEXPONENTIAL2. The value should be a pointer to - * an RwReal in the range 0 to 1. */ - rwRENDERSTATEFOGTABLE, /**<Install a 256 entry fog table placed between fog distance and far - * clip-plane */ - rwRENDERSTATEALPHAPRIMITIVEBUFFER, /**<Render transparent alpha polygons last - on/off. \e Not \e supported - * \e on \e any \e platform.*/ - rwRENDERSTATECULLMODE, /**<Sets \ref RwCullMode, for selecting face culling. */ - rwRENDERSTATESTENCILENABLE, /**< TRUE to enable stenciling, or FALSE to disable stenciling. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only. */ - rwRENDERSTATESTENCILFAIL, /**< Stencil test operator for the fail case. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILZFAIL, /**< Stencil operation to perform if the stencil test passes - * and the depth test (z-test) fails. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILPASS, /**< Stencil operation to perform if both the stencil and the - * depth (z) tests pass. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILFUNCTION, /**< Comparison function for the stencil test. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILFUNCTIONREF, /**< Integer reference value for the stencil test. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILFUNCTIONMASK, /**< Mask applied to the reference value and each stencil buffer - * entry to determine the significant bits for the stencil test. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - rwRENDERSTATESTENCILFUNCTIONWRITEMASK, /**< Write mask applied to values written into the stencil buffer. - * \e Supported \e on \e Xbox, \e D3D8, \e and \e OpenGL \e only */ - - rwRENDERSTATEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwRenderState RwRenderState; - - -/** - * \ingroup datatypes - * RwShadeMode - * This type represents the options available for setting the - * rwRENDERSTATESHADEMODE render state */ -enum RwShadeMode -{ - rwSHADEMODENASHADEMODE = 0, /**<Invalid shading mode */ - rwSHADEMODEFLAT, /**<Flat shading */ - rwSHADEMODEGOURAUD, /**<Gouraud shading */ - rwSHADEMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwShadeMode RwShadeMode; - - -/** - * \ingroup datatypes - * RwTextureFilterMode - * This type represents the options available for texture - * filtering (see API functions \ref RwTextureSetFilterMode and \ref RwRenderStateSet)*/ -enum RwTextureFilterMode -{ - rwFILTERNAFILTERMODE = 0, /**<Invalid filter mode */ - rwFILTERNEAREST, /**<Point sampled */ - rwFILTERLINEAR, /**<Bilinear */ - rwFILTERMIPNEAREST, /**<Point sampled per pixel mip map */ - rwFILTERMIPLINEAR, /**<Bilinear per pixel mipmap */ - rwFILTERLINEARMIPNEAREST, /**<MipMap interp point sampled */ - rwFILTERLINEARMIPLINEAR, /**<Trilinear */ - rwTEXTUREFILTERMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwTextureFilterMode RwTextureFilterMode; - - -/** - * \ingroup datatypes - * RwFogType - * This type represents the options available to the - * rwRENDERSTATEFOGTYPE render state (see \ref RwRenderState);*/ -enum RwFogType -{ - rwFOGTYPENAFOGTYPE = 0, /**<Invalid fog type */ - rwFOGTYPELINEAR, /**<Linear fog */ - rwFOGTYPEEXPONENTIAL, /**<Exponential fog */ - rwFOGTYPEEXPONENTIAL2, /**<Exponential^2 fog */ - rwFOGTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwFogType RwFogType; - - -/** - * \ingroup datatypes - * RwBlendFunction - * This type represents the options available - * to the rwRENDERSTATESRCBLEND and rwRENDERSTATEDESTBLEND render states - * (see \ref RwRenderState). In the following description, - * a subscript s refers to a source value while subscript d refers to a - * destination value.*/ -enum RwBlendFunction -{ - rwBLENDNABLEND = 0, /**<Invalid blend mode */ - rwBLENDZERO, /**<(0, 0, 0, 0 ) */ - rwBLENDONE, /**<(1, 1, 1, 1 ) */ - rwBLENDSRCCOLOR, /**<(Rs, Gs, Bs, As ) */ - rwBLENDINVSRCCOLOR, /**<(1-Rs, 1-Gs, 1-Bs, 1-As) */ - rwBLENDSRCALPHA, /**<(As, As, As, As ) */ - rwBLENDINVSRCALPHA, /**<(1-As, 1-As, 1-As, 1-As) */ - rwBLENDDESTALPHA, /**<(Ad, Ad, Ad, Ad ) */ - rwBLENDINVDESTALPHA, /**<(1-Ad, 1-Ad, 1-Ad, 1-Ad) */ - rwBLENDDESTCOLOR, /**<(Rd, Gd, Bd, Ad ) */ - rwBLENDINVDESTCOLOR, /**<(1-Rd, 1-Gd, 1-Bd, 1-Ad) */ - rwBLENDSRCALPHASAT, /**<(f, f, f, 1 ) f = min (As, 1-Ad) */ - rwBLENDFUNCTIONFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwBlendFunction RwBlendFunction; - - -/** - * \ingroup datatypes - * RwTextureAddressMode - * This type represents the options available for - * applying textures to polygons (see API functions \ref RwTextureSetAddressing - * and \ref RwRenderStateSet, and the \ref RwRenderState type) */ -enum RwTextureAddressMode -{ - rwTEXTUREADDRESSNATEXTUREADDRESS = 0, /**<Invalid addressing mode */ - rwTEXTUREADDRESSWRAP, /**<UV wraps (tiles) */ - rwTEXTUREADDRESSMIRROR, /**<Alternate UV is flipped */ - rwTEXTUREADDRESSCLAMP, /**<UV is clamped to 0-1 */ - rwTEXTUREADDRESSBORDER, /**<Border colour takes effect outside of 0-1 */ - rwTEXTUREADDRESSMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwTextureAddressMode RwTextureAddressMode; - -/** - * \ingroup datatypes - * RwStencilOperation - * This type represents the stencil operations to perform - * based on the results of the - * \ref rwRENDERSTATESTENCILFAIL, \ref rwRENDERSTATESTENCILZFAIL - * and \ref rwRENDERSTATESTENCILPASS tests. - */ -enum RwStencilOperation -{ - rwSTENCILOPERATIONNASTENCILOPERATION = 0, - rwSTENCILOPERATIONKEEP, /* Do not update the entry in the stencil buffer */ - rwSTENCILOPERATIONZERO, /* Set the stencil-buffer entry to 0 */ - rwSTENCILOPERATIONREPLACE, /* Replace the stencil-buffer entry with reference value */ - rwSTENCILOPERATIONINCRSAT, /* Increment the stencil-buffer entry, clamping to the maximum value */ - rwSTENCILOPERATIONDECRSAT, /* Decrement the stencil-buffer entry, clamping to zero */ - rwSTENCILOPERATIONINVERT, /* Invert the bits in the stencil-buffer entry */ - rwSTENCILOPERATIONINCR, /* Increment the stencil-buffer entry, wrapping to zero if the new value exceeds the maximum value */ - rwSTENCILOPERATIONDECR, /* Decrement the stencil-buffer entry, wrapping to the maximum value if the new value is less than zero */ - rwSTENCILOPERATIONFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwStencilOperation RwStencilOperation; - -/** - * \ingroup datatypes - * RwStencilFunction - * This type represents the options available for - * the comparison function for the stencil test \ref rwRENDERSTATESTENCILFUNCTION. - */ -enum RwStencilFunction -{ - rwSTENCILFUNCTIONNASTENCILFUNCTION = 0, - rwSTENCILFUNCTIONNEVER, /* Always fail the test */ - rwSTENCILFUNCTIONLESS, /* Accept the new pixel if its value is less than the value of the current pixel */ - rwSTENCILFUNCTIONEQUAL, /* Accept the new pixel if its value equals the value of the current pixel */ - rwSTENCILFUNCTIONLESSEQUAL, /* Accept the new pixel if its value is less than or equal to the value of the current pixel */ - rwSTENCILFUNCTIONGREATER, /* Accept the new pixel if its value is greater than the value of the current pixel */ - rwSTENCILFUNCTIONNOTEQUAL, /* Accept the new pixel if its value does not equal the value of the current pixel */ - rwSTENCILFUNCTIONGREATEREQUAL, /* Accept the new pixel if its value is greater than or equal to the value of the current pixel */ - rwSTENCILFUNCTIONALWAYS, /* Always pass the test */ - rwSTENCILFUNCTIONFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwStencilFunction RwStencilFunction; - -/** - * \ingroup datatypes - * RwCullMode - * This type represents the options available for culling polygons during rendering. - * and \ref RwRenderStateSet, and the \ref RwRenderState type) */ -enum RwCullMode -{ - rwCULLMODENACULLMODE = 0, - rwCULLMODECULLNONE, /**< Both front and back-facing triangles are drawn. */ - rwCULLMODECULLBACK, /**< Just front-facing triangles are drawn */ - rwCULLMODECULLFRONT, /**< Just rear-facing triangles are drawn */ - - rwCULLMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwCullMode RwCullMode; - -/** - * \ingroup datatypes - * RwPrimitiveType - * This type represents the different types of indexed - * line and indexed triangle primitives that are available when rendering 2D - * and 3D immediate mode objects (see API functions \ref RwIm2DRenderIndexedPrimitive, - * \ref RwIm2DRenderPrimitive, \ref RwIm3DRenderIndexedPrimitive and \ref RwIm3DRenderPrimitive). - * Indices are into a vertex list and must be defined in a counter-clockwise order - * (as seen from the camera) to be visible.*/ -enum RwPrimitiveType -{ - rwPRIMTYPENAPRIMTYPE = 0, /**<Invalid primative type */ - rwPRIMTYPELINELIST = 1, /**<Unconnected line segments, each line is specified by - * both its start and end index, independently of other lines - * (for example, 3 segments specified as 0-1, 2-3, 4-5) */ - rwPRIMTYPEPOLYLINE = 2, /**<Connected line segments, each line's start index - * (except the first) is specified by the index of the end of - * the previous segment (for example, 3 segments specified as - * 0-1, 1-2, 2-3) */ - rwPRIMTYPETRILIST = 3, /**<Unconnected triangles: each triangle is specified by - * three indices, independently of other triangles (for example, - * 3 triangles specified as 0-1-2, 3-4-5, 6-7-8) */ - rwPRIMTYPETRISTRIP = 4, /**<Connected triangles sharing an edge with, at most, one - * other forming a series (for example, 3 triangles specified - * as 0-2-1, 1-2-3-, 2-4-3) */ - rwPRIMTYPETRIFAN = 5 , /**<Connected triangles sharing an edge with, at most, - * two others forming a fan (for example, 3 triangles specified - * as 0-2-1, 0-3-2, 0-4-3) */ - rwPRIMTYPEPOINTLIST = 6, /**<Points 1, 2, 3, etc. This is not - * supported by the default RenderWare - * immediate or retained-mode pipelines - * (except on PlayStation 2), it is intended - * for use by user-created pipelines */ - rwPRIMITIVETYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwPrimitiveType RwPrimitiveType; - - - - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Expose Z buffer range */ -extern RwReal RwIm2DGetNearScreenZ(void); -extern RwReal RwIm2DGetFarScreenZ(void); - -extern RwBool RwRenderStateGet(RwRenderState state, void *value); -extern RwBool RwRenderStateSet(RwRenderState state, void *value); - -extern RwBool RwIm2DRenderLine(RwIm2DVertex *vertices, RwInt32 numVertices, RwInt32 vert1, RwInt32 vert2); -extern RwBool RwIm2DRenderTriangle(RwIm2DVertex *vertices, RwInt32 numVertices, - RwInt32 vert1, RwInt32 vert2, RwInt32 vert3 ); -extern RwBool RwIm2DRenderPrimitive(RwPrimitiveType primType, RwIm2DVertex *vertices, RwInt32 numVertices); -extern RwBool RwIm2DRenderIndexedPrimitive(RwPrimitiveType primType, RwIm2DVertex *vertices, RwInt32 numVertices, - RwImVertexIndex *indices, RwInt32 numIndices); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/badevice.h ---*/ -/***************************************************************************/ -/************************* System Requests *********************************/ -/***************************************************************************/ - -/* Device controls: - * - * rwDEVICESYSTEMOPEN(NULL, RwEngineOpenParams *openParams, 0) - * rwDEVICESYSTEMCLOSE(NULL, NULL, 0) - * rwDEVICESYSTEMSTART(NULL, NULL, 0) - * rwDEVICESYSTEMSTOP(NULL, NULL, 0) - * rwDEVICESYSTEMREGISTER(RwDevice *coreDeviceBlock, RwMemoryFunctions *memFuncs, 0) - * rwDEVICESYSTEMGETNUMMODES(RwInt32 *numModes, NULL, 0) - * rwDEVICESYSTEMGETMODEINFO(RwVideoMode *modeinfo, NULL, RwInt32 modeNum) - * rwDEVICESYSTEMUSEMODE(NULL, NULL, RwInt32 modeNum) - * rwDEVICESYSTEMFOCUS(NULL, NULL, RwBool gainFocus) - * rwDEVICESYSTEMINITPIPELINE(NULL, NULL, 0) - * rwDEVICESYSTEMGETMODE(RwInt32 *curMode, NULL, 0) - * rwDEVICESYSTEMSTANDARDS(RwStandardFunc *fnPtrArray, NULL, RwInt32 arraySize) - * rwDEVICESYSTEMGETTEXMEMSIZE(RwInt32 *texMemSizeOut, NULL, 0) - * rwDEVICESYSTEMGETNUMSUBSYSTEMS(RwInt32 *numSubSystemsOut, NULL, 0) - * rwDEVICESYSTEMGETSUBSYSTEMINFO(RwSubSystemInfo *subSystemInfo, NULL, RwInt32 subSystemNum) - * rwDEVICESYSTEMGETCURRENTSUBSYSTEM(RwInt32 *curSubSystem, NULL, 0) - * rwDEVICESYSTEMSETSUBSYSTEM(NULL, NULL, RwInt32 subSystemNum) - * rwDEVICESYSTEMFINALIZESTART(NULL, NULL, 0) - * rwDEVICESYSTEMINITIATESTOP(NULL, NULL, 0) - * rwDEVICESYSTEMRXPIPELINEREQUESTPIPE(RxPipeline **pipelineRef, NULL, RwInt32 pipeType) - * rwDEVICESYSTEMDD - start of device specific controls - */ - -#define rwPIPETYPEMATERIAL 0 -#define rwPIPETYPEWORLDSECTORINSTANCE 1 -#define rwPIPETYPEATOMICINSTANCE 2 - -enum RwCoreDeviceSystemFn -{ - rwDEVICESYSTEMOPEN = 0x00, - rwDEVICESYSTEMCLOSE, - rwDEVICESYSTEMSTART, - rwDEVICESYSTEMSTOP, - rwDEVICESYSTEMREGISTER, - rwDEVICESYSTEMGETNUMMODES, - rwDEVICESYSTEMGETMODEINFO, - rwDEVICESYSTEMUSEMODE, - rwDEVICESYSTEMFOCUS, - rwDEVICESYSTEMINITPIPELINE, - rwDEVICESYSTEMGETMODE, - rwDEVICESYSTEMSTANDARDS, - rwDEVICESYSTEMGETTEXMEMSIZE, - rwDEVICESYSTEMGETNUMSUBSYSTEMS, - rwDEVICESYSTEMGETSUBSYSTEMINFO, - rwDEVICESYSTEMGETCURRENTSUBSYSTEM, - rwDEVICESYSTEMSETSUBSYSTEM, - rwDEVICESYSTEMFINALIZESTART, - rwDEVICESYSTEMINITIATESTOP, - rwDEVICESYSTEMGETMAXTEXTURESIZE, - rwDEVICESYSTEMRXPIPELINEREQUESTPIPE, - rwDEVICESYSTEMGETMETRICBLOCK, - rwDEVICESYSTEMDD = 0x1000, - rwCOREDEVICESYSTEMFNFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwCoreDeviceSystemFn RwCoreDeviceSystemFn; - -/******************************************************************************/ -/********************* Standard functions *************************************/ -/******************************************************************************/ - -#define rwSTANDARDNASTANDARD 0 -#define rwSTANDARDCAMERABEGINUPDATE 1 /* Start 3d camera update */ -#define rwSTANDARDRGBTOPIXEL 2 /* For an RGB value return a pixel value */ -#define rwSTANDARDPIXELTORGB 3 /* For a pixel value returns a RGB value */ -#define rwSTANDARDRASTERCREATE 4 /* Create an raster */ -#define rwSTANDARDRASTERDESTROY 5 /* Raster destroy */ -#define rwSTANDARDIMAGEGETRASTER 6 /* Get image from a raster */ -#define rwSTANDARDRASTERSETIMAGE 7 /* Set raster from an image */ -#define rwSTANDARDTEXTURESETRASTER 8 /* Set texture's raster */ -#define rwSTANDARDIMAGEFINDRASTERFORMAT 9 /* Find a suitable raster format for an image */ -#define rwSTANDARDCAMERAENDUPDATE 10 /* End 3d camera update */ -#define rwSTANDARDSETRASTERCONTEXT 11 /* Start destination of 2d operations */ -#define rwSTANDARDRASTERSUBRASTER 12 /* Make a raster inside another raster */ -#define rwSTANDARDRASTERCLEARRECT 13 /* Clear a rectangle of the current dest raster */ -#define rwSTANDARDRASTERCLEAR 14 /* Clear the current dest raster */ -#define rwSTANDARDRASTERLOCK 15 /* Lock a raster to get it's pixels */ -#define rwSTANDARDRASTERUNLOCK 16 /* Unlock a raster to return it's pixels */ -#define rwSTANDARDRASTERRENDER 17 /* Render a raster (not scaled, but masked) */ -#define rwSTANDARDRASTERRENDERSCALED 18 /* Render a raster (scaled and masked) */ -#define rwSTANDARDRASTERRENDERFAST 19 /* Render a raster (not scaled or masked) */ -#define rwSTANDARDRASTERSHOWRASTER 20 /* Show a camera raster */ -#define rwSTANDARDCAMERACLEAR 21 /* Clear a camera's raster and/or Z raster */ -#define rwSTANDARDHINTRENDERF2B 22 /* Set hint for rendering direction in the world */ -#define rwSTANDARDRASTERLOCKPALETTE 23 /* Lock a raster to get it's palette */ -#define rwSTANDARDRASTERUNLOCKPALETTE 24 /* Unlock a raster to return it's palette */ -#define rwSTANDARDNATIVETEXTUREGETSIZE 25 /* Get size of native texture when written to a stream */ -#define rwSTANDARDNATIVETEXTUREREAD 26 /* Read native texture from the stream */ -#define rwSTANDARDNATIVETEXTUREWRITE 27 /* Write native texture to the stream */ -#define rwSTANDARDRASTERGETMIPLEVELS 28 /* Get the number of mip levels in a raster */ -#define rwSTANDARDNUMOFSTANDARD 29 - -/**************************************************************************** - Global Types - */ - -/* Standard functions */ -typedef RwBool (*RwStandardFunc)(void *pOut,void *pInOut,RwInt32 nI); - -typedef struct RwEngineOpenParams RwEngineOpenParams; - -/** - * \ingroup datatypes - * \struct RwEngineOpenParams - * This type is used to specify device dependent parameters - * for use by the API function \ref RwEngineOpen. - * For a Windows application the displayID field - * should be set to the window's handle (of type HWND). - * For NULL and sky libraries displayID=0: - */ -struct RwEngineOpenParams -{ - void *displayID; /**< Display Identifier */ -}; - -/* nOption is one of a list of possible System defines (see above) */ -typedef RwBool - (*RwSystemFunc)(RwInt32 nOption, - void *pOut, - void *pInOut, - RwInt32 nIn); - -/* Device block */ -typedef RwBool - (*RwRenderStateSetFunction)(RwRenderState nState,void *pParam); - -typedef RwBool - (*RwRenderStateGetFunction)(RwRenderState nState,void *pParam); - -typedef RwBool - (*RwIm2DRenderLineFunction)(RwIm2DVertex *vertices, - RwInt32 numVertices, - RwInt32 vert1, - RwInt32 vert2); - -typedef RwBool - (*RwIm2DRenderTriangleFunction)(RwIm2DVertex *vertices, - RwInt32 numVertices, - RwInt32 vert1, - RwInt32 vert2, - RwInt32 vert3); - -typedef RwBool - (*RwIm2DRenderPrimitiveFunction)(RwPrimitiveType primType, - RwIm2DVertex *vertices, - RwInt32 numVertices); - -typedef RwBool - (*RwIm2DRenderIndexedPrimitiveFunction)(RwPrimitiveType primType, - RwIm2DVertex *vertices, - RwInt32 numVertices, - RwImVertexIndex *indices, - RwInt32 numIndices); - -typedef RwBool - (*RwIm3DRenderLineFunction)(RwInt32 vert1, - RwInt32 vert2); - -typedef RwBool - (*RwIm3DRenderTriangleFunction)(RwInt32 vert1, - RwInt32 vert2, - RwInt32 vert3); - -typedef RwBool - (*RwIm3DRenderPrimitiveFunction)(RwPrimitiveType primType); - -typedef RwBool - (*RwIm3DRenderIndexedPrimitiveFunction)(RwPrimitiveType primtype, - RwImVertexIndex *indices, - RwInt32 numIndices); - - -typedef struct RwDevice RwDevice; -/** - * \ingroup datatypes - * \struct RwDevice - * Structure describing a display device - */ -struct RwDevice -{ - RwReal gammaCorrection; /**<Gamma correction */ - RwSystemFunc fpSystem; /**< System handler */ - RwReal zBufferNear; /**< Near Z buffer value */ - RwReal zBufferFar; /**< Far Z buffer value */ - - /* Immediate mode functions */ - RwRenderStateSetFunction fpRenderStateSet; /**< Internal Use */ - RwRenderStateGetFunction fpRenderStateGet; /**< Internal Use */ - - /* Render functions */ - RwIm2DRenderLineFunction fpIm2DRenderLine; /**< Internal Use */ - RwIm2DRenderTriangleFunction fpIm2DRenderTriangle; /**< Internal Use */ - RwIm2DRenderPrimitiveFunction fpIm2DRenderPrimitive; /**< Internal Use */ - RwIm2DRenderIndexedPrimitiveFunction fpIm2DRenderIndexedPrimitive; /**< Internal Use */ - - RwIm3DRenderLineFunction fpIm3DRenderLine; /**< Internal Use */ - RwIm3DRenderTriangleFunction fpIm3DRenderTriangle; /**< Internal Use */ - RwIm3DRenderPrimitiveFunction fpIm3DRenderPrimitive; /**< Internal Use */ - RwIm3DRenderIndexedPrimitiveFunction fpIm3DRenderIndexedPrimitive; /**< Internal Use */ -}; - -typedef struct RwMetrics RwMetrics; -/** - * \ingroup datatypes - * \struct RwMetrics - * This structure provides information about the performance - * of the application. The metrics are recorded only in the metrics - * libraries. To use metrics you should compile with the RWMETRICS - * preprocessor symbol defines, and link with the metrics libraries - * that ship with the SDK. The metrics are recorded on a per-frame - * basis. Each platform may provide additional information that - * is specific to that platform. Note that either the - * \ref numTextureUploads or \ref numResourceAllocs being non-zero can - * be considered as bad news and will indicate a significantly - * reduced rendering performance. - */ -struct RwMetrics -{ - RwUInt32 numTriangles; /**< Number of triangles processed */ - RwUInt32 numProcTriangles; /**< Number of mesh triangles processed */ - RwUInt32 numVertices; /**< Number of vertices processed */ - RwUInt32 numTextureUploads; /**< Number of textures swapped */ - RwUInt32 sizeTextureUploads; /**< Size of textures swapped */ - RwUInt32 numResourceAllocs; /**< Number of resource blocks swapped */ - void *devSpecificMetrics; /**< Device specific metrics */ -}; - -#define SUBSYSTEMNAME_MAXLEN 80 - -typedef struct RwSubSystemInfo RwSubSystemInfo; -/** - * \ingroup datatypes - * \struct RwSubSystemInfo - * This type is used to represent information about a device. - * The only available field specifies a character string - * which identifies the subsystem - * (see API function \ref RwEngineGetSubSystemInfo). */ -struct RwSubSystemInfo -{ - RwChar name[SUBSYSTEMNAME_MAXLEN]; /**< Sub system string */ -}; - - -/* Video modes */ -/* These are flag bits which may be ORd */ - -/** - * \ingroup datatypes - * RwVideoModeFlag - * These flags specify the type of display that RenderWare - * will use. The flags may be OR'd together to build composite modes. - * Note that not all modes are supported on all platforms. - */ -enum RwVideoModeFlag -{ - rwVIDEOMODEEXCLUSIVE = 0x1, /**<Exclusive (i.e. full-screen) */ - rwVIDEOMODEINTERLACE = 0x2, /**<Interlaced */ - rwVIDEOMODEFFINTERLACE = 0x4, /**<Flicker Free Interlaced */ - rwVIDEOMODEFSAA0 = 0x8, /**< \if sky2 - * Full-screen antialiasing mode 0 - * \endif */ - rwVIDEOMODEFSAA1 = 0x10, /**< \if sky2 - * Full-screen antialiasing mode 1 - * \endif */ - rwVIDEOMODEFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwVideoModeFlag RwVideoModeFlag; - -typedef struct RwVideoMode RwVideoMode; -/** - * \ingroup datatypes - * \struct RwVideoMode - * This type represents a video mode available on a device specified - * by the frame buffer resolution (width and height) and depth, - * and a flag indicating whether the device has exclusive use of - * the mode (see API function \ref RwEngineGetVideoModeInfo): */ -struct RwVideoMode -{ - RwInt32 width; /**< Width */ - RwInt32 height; /**< Height */ - RwInt32 depth; /**< Depth */ - RwVideoModeFlag flags; /**< Flags */ -}; - -/** - * \ingroup datatypes - * RwEngineInitFlag - * Engine initialization flags. An application can use - * these to control the memory manager that RenderWare uses for dynamic - * memory management. By default RenderWare uses FreeLists. This is the - * preferred way of using RenderWare. If the application does not want - * RenderWare to use the memory manager, then the application can pass - * rwENGINEINITNOFREELISTS as the argument to \ref RwEngineInit and - * RenderWare will replace freelist calls to corresponding calls to - * RwMalloc and RwFree. This will result in more memory management - * related calls. - */ -enum RwEngineInitFlag -{ - rwENGINEINITFREELISTS = 0, /**<Use Freelists */ - rwENGINEINITNOFREELISTS = 0x1, /**<Don't use Freelists */ - rwENGINEINITFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwEngineInitFlag RwEngineInitFlag; - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Get the library binary version */ -extern RwInt32 RwEngineGetVersion(void); - -/* Sequence of events to get RenderWare up and running */ -extern RwBool RwEngineInit(RwMemoryFunctions *memFuncs, RwUInt32 initFlags, RwUInt32 resArenaSize); -extern RwInt32 RwEngineRegisterPlugin(RwInt32 size, RwUInt32 pluginID, - RwPluginObjectConstructor initCB, - RwPluginObjectDestructor termCB); -extern RwInt32 RwEngineGetPluginOffset(RwUInt32 pluginID); -extern RwBool RwEngineOpen(RwEngineOpenParams *initParams); -extern RwBool RwEngineStart(void); -extern RwBool RwEngineStop(void); -extern RwBool RwEngineClose(void); -extern RwBool RwEngineTerm(void); - -/* Finding out about the rendering sub systems available */ -extern RwInt32 RwEngineGetNumSubSystems(void); -extern RwSubSystemInfo *RwEngineGetSubSystemInfo(RwSubSystemInfo *subSystemInfo, RwInt32 subSystemIndex); -extern RwInt32 RwEngineGetCurrentSubSystem(void); -extern RwBool RwEngineSetSubSystem(RwInt32 subSystemIndex); - -/* Finding out about the modes available */ -extern RwInt32 RwEngineGetNumVideoModes(void); -extern RwVideoMode *RwEngineGetVideoModeInfo(RwVideoMode *modeinfo, RwInt32 modeIndex); -extern RwInt32 RwEngineGetCurrentVideoMode(void); -extern RwBool RwEngineSetVideoMode(RwInt32 modeIndex); - -/* Finding out how much texture memory is available */ -extern RwInt32 RwEngineGetTextureMemorySize(void); -extern RwInt32 RwEngineGetMaxTextureSize(void); - -/* Getting/Releasing the focus */ -extern RwBool RwEngineSetFocus(RwBool enable); - -/* Getting metrics */ -extern RwMetrics *RwEngineGetMetrics(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bafsys.h ---*/ - -/**************************************************************************** - Global Types - */ - -/* - * \typedef rwFnFexist - * Returns TRUE if file with given name exists, FALSE if it doesn't. - */ -typedef RwBool (*rwFnFexist)(const RwChar *name); - -/* - * \typedef rwFnFopen - * Mimics ANSI C Standard Library fopen. - */ -typedef void *(*rwFnFopen)(const RwChar *name, const RwChar *mode); - -/* - * \typedef rwFnFclose - * Mimics ANSI C Standard Library fclose. - */ -typedef int (*rwFnFclose)(void *fptr); - -/* - * \typedef rwFnFread - * Mimics ANSI C Standard Library fread. - */ -typedef size_t (*rwFnFread)(void *addr, size_t size, size_t count, void *fptr); - -/* - * \typedef rwFnFwrite - * Mimics ANSI C Standard Library fwrite. - */ -typedef size_t (*rwFnFwrite)(const void *addr, size_t size, size_t count, void *fptr); - -/* - * \typedef rwFnFgets - * Mimics ANSI C Standard Library fgets. - */ -typedef RwChar *(*rwFnFgets)(RwChar *buffer, int maxLen, void *fptr); - -/* - * \typedef rwFnFputs - * Mimics ANSI C Standard Library fputs. - */ -typedef int (*rwFnFputs)(const RwChar *buffer, void *fptr); - -/* - * \typedef rwFnFeof - * Mimics ANSI C Standard Library feof. - */ -typedef int (*rwFnFeof)(void *fptr); - -/* - * \typedef rwFnFseek - * Mimics ANSI C Standard Library fseek. - */ -typedef int (*rwFnFseek)(void *fptr, long offset, int origin); - -/* - * \typedef rwFnFflush - * Mimics ANSI C Standard Library fflush. - */ -typedef int (*rwFnFflush)(void *fptr); - -/* - * \typedef rwFnFtell - * Mimics ANSI C Standard Library ftell. - */ -typedef int (*rwFnFtell)(void *fptr); - - -/** - * \ingroup datatypes - * \typedef RwFileFunctions - * typedef for struct RwFileFunctions - */ -typedef struct RwFileFunctions RwFileFunctions; -/** - * \ingroup datatypes - * \struct RwFileFunctions - * This type is used to specify the file access - * functions used by RenderWare. The default file system uses the standard - * ANSI functions. The application may install an alternative file system - * providing it complies with the ANSI interface -- see API - * function \ref RwOsGetFileInterface. - * - * The function types associated with this type are defined as follows - * - * \verbatim - RwBool (*rwFnFexist)(const RwChar *name) - void *(*rwFnFopen)(const RwChar *name, const RwChar *access) - int (*rwFnFclose)(void *fptr) - size_t (*rwFnFread)(void *addr, size_t size, size_t count, void *fptr) - size_t (*rwFnFwrite)(const void *addr, size_t size, size_t count, - void *fptr) - RwChar *(*rwFnFgets)(RwChar *buffer, int maxLen, void *fptr) - int (*rwFnFputs)(const RwChar *buffer, void *fptr) - int (*rwFnFeof)(void *fptr) - int (*rwFnFseek)(void *fptr, long offset, int origin) - int (*rwFnFflush)(void *fptr) - int (*rwFnFtell)(void *fptr) - \endverbatim - * Note the function argument lists are consistent with the ANSI - * standard file access interface: - */ -struct RwFileFunctions -{ - rwFnFexist rwfexist; /**< Pointer to fexist function */ - rwFnFopen rwfopen; /**< Pointer to fopen function */ - rwFnFclose rwfclose; /**< Pointer to fclose function */ - rwFnFread rwfread; /**< Pointer to fread function */ - rwFnFwrite rwfwrite; /**< Pointer to fwrite function */ - rwFnFgets rwfgets; /**< Pointer to fgets function */ - rwFnFputs rwfputs; /**< Pointer to puts function */ - rwFnFeof rwfeof; /**< Pointer to feof function */ - rwFnFseek rwfseek; /**< Pointer to fseek function */ - rwFnFflush rwfflush; /**< Pointer to fflush function */ - rwFnFtell rwftell; /**< Pointer to ftell function */ -}; - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -extern RwFileFunctions *RwOsGetFileInterface(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/baerr.h ---*/ -/**************************************************************************** - Global Types - */ - -typedef struct RwError RwError; -/** - * \ingroup datatypes - * \struct RwError - * This type represents a RenderWare error specified by the - * ID of the plugin that the error was issued from (pluginID) and the error - * code itself (errorCode) (see API function \ref RwErrorGet). - * \param pluginID The ID of the plugin that issued the error. - * \param errorCode A value representing the error code. - */ -struct RwError -{ - RwInt32 pluginID; /**< Internal Use */ - RwInt32 errorCode; /**< Internal Use */ -}; - -#define RWECODE(a,b) a, - -/* common errors have the MSB set */ - -enum RwErrorCodeCommon -{ - E_RW_NOERROR = (int)0x80000000L, -#include "errcom.def" - E_RW_LASTERROR = RWFORCEENUMSIZEINT -}; -typedef enum RwErrorCodeCommon RwErrorCodeCommon; - -#undef RWECODE - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -extern RwError *RwErrorGet(RwError *code); -extern RwError *RwErrorSet(RwError *code); -extern RwInt32 _rwerror(RwInt32 code, ...); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/badebug.h ---*/ - -/**************************************************************************** - Global Types - */ - -/** - * \ingroup datatypes - * RwDebugType - * This type represents the different types of debug and - * trace messages that can be sent to the currently installed debug handler - * (see API function \ref RwDebugSendMessage)*/ -enum RwDebugType -{ - rwNADEBUGTYPE = 0, /**<Invalid */ - rwDEBUGASSERT, /**<Send an assert message */ - rwDEBUGERROR, /**<Send an error message */ - rwDEBUGMESSAGE, /**<Send an informational message */ - rwDEBUGTRACE, /**<Send a trace message */ - rwDEBUGTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwDebugType RwDebugType; - -/** - * \ingroup datatypes - * \ref RwDebugHandler - * This type represents the - * function called from \ref RwDebugSendMessage for sending a message to the - * RenderWare debug stream. - * - * \param type Type of debug message (assert, error, etc.). - * - * \param string Pointer to a string containing the error - * message. - * - * \see RwDebugSetHandler - */ -typedef void (*RwDebugHandler) (RwDebugType type, - - const RwChar * string); - -#ifdef RWDEBUG - -#define RwDebugSendMessage(type, funcName, message) \ - _rwDebugSendMessage(type, \ - RWSTRING(__FILE__), \ - __LINE__, \ - funcName, \ - message) - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Setting the debug message handler */ -extern RwDebugHandler RwDebugSetHandler(RwDebugHandler handler); -extern void RwDebugSetTraceState(RwBool state); - -extern void _rwDebugSendMessage(RwDebugType type, - const RwChar * file, - const RwInt32 line, - const RwChar * funcName, - const RwChar * message); - -/* Sending a message */ -extern RwChar *_rwdberrcommon(RwInt32 code, ...); -extern RwChar *_rwdbsprintf(const RwChar * format, - ...) __RWFORMAT__(printf, 1, 2); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#else /* RWDEBUG */ - -#define RwDebugSetHandler(handler) -#define RwDebugSetTraceState(state) -#define RwDebugSendMessage(type, funcName, message) - -#if (!defined(RWREGSETDEBUGTRACE)) -#define RWREGSETDEBUGTRACE(_name) /* No op */ -#endif /* (!defined(RWREGSETDEBUGTRACE)) */ - -#endif /* RWDEBUG */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/balibtyp.h ---*/ -/* Finding MSBs */ - -#define RWBYTEFINDMSB(a) \ - (_rwMsbBit[(a)]-1) - -#define RWWORDFINDMSB(a) \ - (((a)&0xff00)?RWBYTEFINDMSB((a)>>8)+8: RWBYTEFINDMSB(a)) - -#define RWLONGFINDMSB(a) \ - (((a)&0xffff0000UL)?RWWORDFINDMSB((a)>>16)+16: RWWORDFINDMSB(a)) - -/**************************************************************************** - Defines - */ - -/* macros used to access plugin data in objects */ -#define RWPLUGINOFFSET(_type, _base, _offset) \ - ((_type *)((RwUInt8 *)(_base) + (_offset))) - -#define RWPLUGINOFFSETCONST(_type, _base, _offset) \ - ((const _type *)((const RwUInt8 *)(_base) + (_offset))) - -/* macro used to access global data structure (the root type is RwGlobals) */ -#define RWSRCGLOBAL(variable) \ - (((RwGlobals *)RwEngineInstance)->variable) - -#define RWASSERTISTYPE(_f, _t) \ - RWASSERT((((const RwObject *)(_f))->type)==(_t)) - -/**************************************************************************** - Global Types - */ - -enum RwEngineStatus -{ - rwENGINESTATUSIDLE = 0, /* This needs to be zero */ - rwENGINESTATUSINITED = 1, - rwENGINESTATUSOPENED = 2, - rwENGINESTATUSSTARTED = 3, - rwENGINESTATUSFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -}; -typedef enum RwEngineStatus RwEngineStatus; - -typedef struct RwGlobals RwGlobals; -struct RwGlobals -{ -#ifdef RWDEBUG - RwDebugHandler debugFunction; /* debug string handler */ - void *debugFile; /* debug output file */ - RwInt32 debugStackDepth; /* current depth of function stack */ - RwBool debugTrace; /* is function tracing enabled */ -#endif - - /* Current entities */ - void *curCamera; /* Current camera */ - void *curWorld; /* Current World */ - - /* Checking counters */ - RwUInt16 renderFrame; /* Camera display count */ - RwUInt16 lightFrame; /* Used to ensure each light is applied only once. */ - RwUInt16 pad[2]; /* Longword align it again */ - - /* For the currently accessed device */ - RwDevice dOpenDevice; - - /* Standard renderers and functions */ - RwStandardFunc stdFunc[rwSTANDARDNUMOFSTANDARD]; - - /* All of the frames which have been updated */ - RwLinkList dirtyFrameList; - - /* The file functions */ - RwFileFunctions fileFuncs; - - /* The string functions */ - RwStringFunctions stringFuncs; - - /* The memory allocation functions */ - RwMemoryFunctions memoryFuncs; -#ifdef RWDEBUG - RwBool freeListExtraDebug; -#endif /* RWDEBUG */ - - /* virtual memory alloc/free functions */ - RwMemoryAllocFn memoryAlloc; - RwMemoryFreeFn memoryFree; - - RwMetrics *metrics; - - /* Current engine status */ - RwEngineStatus engineStatus; - - /* Resource arena init size. */ - RwUInt32 resArenaInitSize; -}; - -typedef struct RwModuleInfo RwModuleInfo; -struct RwModuleInfo -{ - RwInt32 globalsOffset; - RwInt32 numInstances; -}; - - - -/**************************************************************************** - Program wide globals - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#ifdef RWGLOBALSIZE -extern RwUInt32 ourGlobals[RWGLOBALSIZE / sizeof(RwUInt32)]; -#define RwEngineInstance ourGlobals -#else /* RWGLOBALSIZE */ -extern void *RwEngineInstance; -#endif /* RWGLOBALSIZE */ - -extern RwInt8 _rwMsbBit[]; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/baresour.h ---*/ - -#define RWRESOURCESGLOBAL(var) (RWPLUGINOFFSET(rwResourcesGlobals, \ - RwEngineInstance, resourcesModule.globalsOffset)->var) - -/** - * \ingroup datatypes - * \typedef RwResEntry - * RwResEntry object. Instanced data block in resources arena. - * This should be considered an opaque - * type. Use the RwResEntry API functions to access. - */ -typedef struct RwResEntry RwResEntry; - -/** - * \ingroup datatypes - * \typedef RwResEntryDestroyNotify - * This type represents the function - * called from \ref RwResourcesFreeResEntry (and indirectly from - * \ref RwResourcesEmptyArena) immediately before the memory used by the - * specified resources entry is released. - * - * \param resEntry Pointer to the instanced data. - */ -typedef void (*RwResEntryDestroyNotify) (RwResEntry * resEntry); - -#if (!defined(DOXYGEN)) -struct RwResEntry -{ - RwLLLink link; /**< Node in the list of resource elements */ - RwInt32 size; /**< Size of this node */ - void *owner; /**< Owner of this node */ - RwResEntry **ownerRef; /**< Pointer to pointer to this (enables de-alloc) */ - RwResEntryDestroyNotify destroyNotify; /**< This is called right before destruction */ -}; -#endif /* (!defined(DOXYGEN)) */ - -typedef struct rwResources rwResources; -struct rwResources -{ - RwInt32 maxSize; - RwInt32 currentSize; - RwInt32 reusageSize; - - void *memHeap; - - RwLinkList entriesA; - RwLinkList entriesB; - - RwLinkList *freeEntries; - RwLinkList *usedEntries; -}; - -typedef struct rwResourcesGlobals rwResourcesGlobals; -struct rwResourcesGlobals -{ - rwResources res; -}; - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Setting the resources arena size */ -extern RwBool RwResourcesSetArenaSize(RwUInt32 size); -extern RwInt32 RwResourcesGetArenaSize(void); -extern RwInt32 RwResourcesGetArenaUsage(void); -extern RwBool RwResourcesEmptyArena(void); - -/* Allocate */ -extern RwResEntry *RwResourcesAllocateResEntry(void *owner, - RwResEntry **ownerRef, - RwInt32 size, - RwResEntryDestroyNotify - destroyNotify); -/* Deallocate */ -extern RwBool RwResourcesFreeResEntry(RwResEntry * entry); -/* Mark all as unused */ -extern void _rwResourcesPurge(void); -#if ((defined(RWDEBUG)) || (defined(RWSUPPRESSINLINE))) -/* Mark as used */ -extern RwResEntry *RwResourcesUseResEntry(RwResEntry * entry); -#endif /* ((defined(RWDEBUG)) || (defined(RWSUPPRESSINLINE))) */ - -extern RwModuleInfo resourcesModule; - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#if ((!defined(RWDEBUG)) && (!defined(RWSUPPRESSINLINE))) -#define RwResourcesUseResEntry(_ntry) \ - ((((_ntry)->link.next)? \ - (rwLinkListRemoveLLLink(&((_ntry)->link)), \ - rwLinkListAddLLLink(RWRESOURCESGLOBAL(res.usedEntries), \ - &((_ntry)->link))): \ - NULL), \ - (_ntry)) -#endif /* ((!defined(RWDEBUG)) && (!defined(RWSUPPRESSINLINE))) */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/bacolor.h ---*/ -/**************************************************************************** - Global Types - */ - -typedef struct RwRGBAReal RwRGBAReal; -/** - * \ingroup datatypes - * \struct RwRGBAReal - * This structure represents a RGBA color which has - * components specified as real values. - * - * A color component of an RwRGBA with the value 255 generally corresponds - * to the associated component in an RwRGBAReal with the value 1.0f. - * However, any values can be substituted to denormalize/normalize - * RwRGBAReal and create different effects. For example, while light colors - * are expressed as normalized RGBA, interesting effects can be gained using - * larger values. - * - * It should also be noted that a color component of an RwRGBA with the - * value 0 generally corresponds to the associcated component in an - * RwRGBAReal with the value 0.0. - */ -struct RwRGBAReal -{ - RwReal red; /**< red component */ - RwReal green; /**< green component */ - RwReal blue; /**< blue component */ - RwReal alpha; /**< alpha component */ -}; - -#if (!defined(RwRGBARealAssign)) -#define RwRGBARealAssign(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwRGBARealAssign)) */ - -typedef struct RwRGBA RwRGBA; -/** - * \ingroup datatypes - * \struct RwRGBA - * This structure represents a RGBA color - * which has integer components specified in the range 0 to 255. */ -struct RwRGBA -{ - RwUInt8 red; /**< red component */ - RwUInt8 green; /**< green component */ - RwUInt8 blue; /**< blue component */ - RwUInt8 alpha; /**< alpha component */ -}; - -#if (!defined(RwRGBAAssign)) -#define RwRGBAAssign(_target, _source) \ - ( *(_target) = *(_source) ) -#endif /* (!defined(RwRGBAAssign)) */ - -#define RwRGBARealAddMacro(o,a,b) \ -MACRO_START \ -{ \ - (o)->red = (((a)->red) + ( (b)->red)); \ - (o)->green = (((a)->green) + ( (b)->green)); \ - (o)->blue = (((a)->blue) + ( (b)->blue)); \ - (o)->alpha = (((a)->alpha) + ( (b)->alpha)); \ -} \ -MACRO_STOP - -#define RwRGBARealSubMacro(o,a,b) \ -MACRO_START \ -{ \ - (o)->red = (((a)->red) - ( (b)->red)); \ - (o)->green = (((a)->green) - ( (b)->green)); \ - (o)->blue = (((a)->blue) - ( (b)->blue)); \ - (o)->alpha = (((a)->alpha) - ( (b)->alpha)); \ -} \ -MACRO_STOP - -#define RwRGBARealScaleMacro(o,a,scale) \ -MACRO_START \ -{ \ - (o)->red = (((a)->red) * ( scale)); \ - (o)->green = (((a)->green) * ( scale)); \ - (o)->blue = (((a)->blue) * ( scale)); \ - (o)->alpha = (((a)->alpha) * ( scale)); \ -} \ -MACRO_STOP - -/* Conversion macros */ -#define RwRGBAFromRwRGBARealMacro(o, i) \ -MACRO_START \ -{ \ - RwInt32 quantize; \ - \ - quantize = RwInt32FromRealMacro( ((i)->red * (RwReal)255.0) \ - + (RwReal)0.5 ); \ - (o)->red = (RwUInt8) quantize; \ - quantize = RwInt32FromRealMacro( ((i)->green * (RwReal)255.0) \ - + (RwReal)0.5 ); \ - (o)->green = (RwUInt8) quantize; \ - quantize = RwInt32FromRealMacro( ((i)->blue * (RwReal)255.0) \ - + (RwReal)0.5 ); \ - (o)->blue = (RwUInt8) quantize; \ - quantize = RwInt32FromRealMacro( ((i)->alpha * (RwReal)255.0) \ - + (RwReal)0.5 ); \ - (o)->alpha = (RwUInt8) quantize; \ - \ -} \ -MACRO_STOP - -#define RwRGBARealFromRwRGBAMacro(o, i) \ -MACRO_START \ -{ \ - (o)->red = \ - (((RwReal)(((i)->red))) * ( (RwReal)((1.0/255.0)))); \ - (o)->green = \ - (((RwReal)(((i)->green))) * ( (RwReal)((1.0/255.0)))); \ - (o)->blue = \ - (((RwReal)(((i)->blue))) * ( (RwReal)((1.0/255.0)))); \ - (o)->alpha = \ - (((RwReal)(((i)->alpha))) * ( (RwReal)((1.0/255.0)))); \ -} \ -MACRO_STOP - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -#if (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) - -#define RwRGBARealAdd(o,a,b) \ - RwRGBARealAddMacro(o,a,b) - -#define RwRGBARealSub(o,a,b) \ - RwRGBARealSubMacro(o,a,b) - -#define RwRGBARealScale(o,a,scale) \ - RwRGBARealScaleMacro(o,a,scale) - -#define RwRGBAFromRwRGBAReal(o, i) \ - RwRGBAFromRwRGBARealMacro(o, i) - -#define RwRGBARealFromRwRGBA(o, i) \ - RwRGBARealFromRwRGBAMacro(o, i) - -#else /* (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) */ - -/* Function versions for debug */ -extern void RwRGBARealAdd(RwRGBAReal *result, - const RwRGBAReal *source1, - const RwRGBAReal *source2); - -extern void RwRGBARealSub(RwRGBAReal *result, - const RwRGBAReal *source1, - const RwRGBAReal *source2); - -extern void RwRGBARealScale(RwRGBAReal *result, - const RwRGBAReal *source, - RwReal scalar); - -extern void RwRGBAFromRwRGBAReal(RwRGBA *result, - const RwRGBAReal *source); - -extern void RwRGBARealFromRwRGBA(RwRGBAReal *result, - RwRGBA *source); - -#endif /* (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/babinmtx.h ---*/ - -/**************************************************************************** - Global types - */ - -/* Matrix stream format */ -typedef struct rwStreamMatrix RwMatrixChunkInfo; -typedef struct rwStreamMatrix rwStreamMatrix; -struct rwStreamMatrix -{ - RwV3d right; - RwV3d up; - RwV3d at; - RwV3d pos; - RwInt32 type; -}; - - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Matrix binary format */ -extern RwUInt32 RwMatrixStreamGetSize(const RwMatrix * matrix); -extern RwMatrix *RwMatrixStreamRead(RwStream * stream, - RwMatrix * matrix); -extern const RwMatrix *RwMatrixStreamWrite(const RwMatrix * matrix, - RwStream * stream); -extern RwMatrixChunkInfo *RwMatrixChunkInfoRead(RwStream * stream, - RwMatrixChunkInfo * - matrixChunkInfo, - RwInt32 * bytesRead); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -/*--- Automatically derived from: C:/daily/rwsdk/src/plcore/babinary.h ---*/ -/**************************************************************************** - Defines - */ - -#ifndef rwCHUNKHEADERSIZE -#define rwCHUNKHEADERSIZE (sizeof(RwUInt32)*3) -#endif /* rwCHUNKHEADERSIZE */ - -/* Compatibility macro */ -#define RwStreamWriteInt(_stream, _ints, _numBytes) \ - RwStreamWriteInt32(_stream, _ints, _numBytes) - -#define RwStreamReadInt(_stream, _ints, _numBytes) \ - RwStreamReadInt32(_stream, _ints, _numBytes) - -#define RwMemLittleEndian(_mem, _size) \ - RwMemLittleEndian32(_mem, _size) - -#define RwMemNative(_mem, _size) \ - RwMemNative32(_mem, _size) - -/**************************************************************************** - Global Types - */ - -typedef struct RwChunkHeaderInfo RwChunkHeaderInfo; -/** - * \ingroup datatypes - * \struct RwChunkHeaderInfo - * Holds data for a chunk header read from a - * stream with \ref RwStreamReadChunkHeaderInfo. */ -struct RwChunkHeaderInfo -{ - RwUInt32 type; /**< chunk ID - see \ref RwStreamFindChunk */ - RwUInt32 length; /**< length of the chunk data in bytes */ - RwUInt32 version; /**< version of the chunk data. - * See \ref RwEngineGetVersion. */ - RwUInt32 buildNum; /**< build number of the RenderWare libraries - * previously used to stream out the data */ - RwBool isComplex; /**< Internal Use */ -}; - -/**************************************************************************** - Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Chunk header stuff */ -extern RwBool RwStreamFindChunk(RwStream *stream, RwUInt32 type, - RwUInt32 *lengthOut, RwUInt32 *versionOut); - -#define RwStreamWriteChunkHeader(stream, type, size) \ - _rwStreamWriteVersionedChunkHeader( \ - stream, type, size, rwLIBRARYCURRENTVERSION, RWBUILDNUMBER) - -extern RwStream *_rwStreamWriteVersionedChunkHeader(RwStream *stream, - RwInt32 type, - RwInt32 size, - RwUInt32 version, - RwUInt32 buildNum); - -extern RwStream *RwStreamWriteReal(RwStream *stream, const RwReal *reals, - RwUInt32 numBytes); -extern RwStream *RwStreamWriteInt32(RwStream *stream, const RwInt32 *ints, - RwUInt32 numBytes); -extern RwStream *RwStreamWriteInt16(RwStream *stream, const RwInt16 *ints, - RwUInt32 numBytes); - -extern RwStream *RwStreamReadReal(RwStream *stream, RwReal *reals, - RwUInt32 numBytes); -extern RwStream *RwStreamReadInt32(RwStream *stream, RwInt32 *ints, - RwUInt32 numBytes); -extern RwStream *RwStreamReadInt16(RwStream *stream, RwInt16 *ints, - RwUInt32 numBytes); - -/* Binary Portability Functions */ -extern void *RwMemLittleEndian16(void *mem, RwUInt32 size); -extern void *RwMemLittleEndian32(void *mem, RwUInt32 size); -extern void *RwMemNative16(void *mem, RwUInt32 size); -extern void *RwMemNative32(void *mem, RwUInt32 size); -extern void *RwMemRealToFloat32(void *mem, RwUInt32 size); -extern void *RwMemFloat32ToReal(void *mem, RwUInt32 size); - -extern RwStream * -RwStreamReadChunkHeaderInfo(RwStream *stream, RwChunkHeaderInfo *chunkHeaderInfo); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* RWPLCORE_H */ |