summaryrefslogtreecommitdiffstats
path: root/rwsdk/include/d3d8/rwplcore.h
diff options
context:
space:
mode:
Diffstat (limited to 'rwsdk/include/d3d8/rwplcore.h')
-rw-r--r--rwsdk/include/d3d8/rwplcore.h6080
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 */