summaryrefslogtreecommitdiffstats
path: root/sdk/rwsdk/include/d3d8/rpworld.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/rwsdk/include/d3d8/rpworld.h')
-rw-r--r--sdk/rwsdk/include/d3d8/rpworld.h3758
1 files changed, 0 insertions, 3758 deletions
diff --git a/sdk/rwsdk/include/d3d8/rpworld.h b/sdk/rwsdk/include/d3d8/rpworld.h
deleted file mode 100644
index 0d0489ce..00000000
--- a/sdk/rwsdk/include/d3d8/rpworld.h
+++ /dev/null
@@ -1,3758 +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/rpworld.h>
- * Automatically Generated on: Thu Jan 23 11:06:24 2003
- *
- ************************************************************************/
-
-#ifndef RPWORLD_H
-#define RPWORLD_H
-
-/*--- Check For Previous Required Includes ---*/
-#ifndef RWCORE_H
-#error "Include RWCORE.H before including this file"
-#endif /* RWCORE_H */
-
-/*--- System Header Files ---*/
-#include <stdarg.h>
-#include <stdlib.h>
-
-/*--- Error enumerations ---*/
-#include "rpworld.rpe"
-
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/native.h ---*/
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/wrldpipe.h ---*/
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/nodeD3D8WorldSectorAllInOne.h ---*/
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RxNodeDefinition *RxNodeDefinitionGetD3D8WorldSectorAllInOne(void);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/nodeD3D8AtomicAllInOne.h ---*/
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RxNodeDefinition *RxNodeDefinitionGetD3D8AtomicAllInOne(void);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/D3D8VertexBufferManager.h ---*/
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern void RwD3D8VertexBufferManagerChangeDefaultSize(RwUInt32 defaultSize);
-
-extern RwBool _rxD3D8VertexBufferManagerCreate(RwUInt32 fvf,
- RwUInt32 size,
- void **vertexBuffer,
- RwUInt32 *baseIndex);
-
-extern void _rxD3D8VertexBufferManagerDestroy(RwUInt32 fvf,
- RwUInt32 size,
- void *vertexBuffer,
- RwUInt32 baseIndex);
-
-extern RwBool _rxD3D8VertexBufferManagerCreateNoFVF(RwUInt32 stride,
- RwUInt32 size,
- void **vertexBuffer,
- RwUInt32 *baseIndex);
-
-extern void _rxD3D8VertexBufferManagerDestroyNoFVF(RwUInt32 stride,
- RwUInt32 size,
- void *vertexBuffer,
- RwUInt32 baseIndex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/bamateri.h ---*/
-
-/*
- * Handling surface materials
- * Materials describe how things are to appear when rendered
- *
- * Copyright (c) 1998 Criterion Software Ltd.
- */
-
-/****************************************************************************
- Global Types
- */
-
-
-typedef struct RpMaterialChunkInfo RpMaterialChunkInfo;
-typedef struct RpMaterialChunkInfo _rpMaterial;
-
-#if (!defined(DOXYGEN))
-struct RpMaterialChunkInfo
-{
- RwInt32 flags; /* Material flags - unused currently -
- * for future expansion */
- RwRGBA color; /* Color of material. */
- RwInt32 unused; /* Not used */
- RwBool textured; /* Are we textured? */
- RwSurfaceProperties surfaceProps;/* Surface properties */
-};
-#endif /* (!defined(DOXYGEN)) */
-
-#if (!defined(RwMaterialAssign))
-#define RwMaterialAssign(_target, _source) \
- ( *(_target) = *(_source) )
-#endif /* (!defined(RwMaterialAssign)) */
-
-/**
- * \ingroup rpmaterial
- * \struct RpMaterial
- * Material object. This should be
- * considered an opaque type. Use the RpMaterial API functions to access.
- */
-typedef struct RpMaterial RpMaterial;
-
-#if (!defined(DOXYGEN))
-struct RpMaterial
-{
- RwTexture *texture; /**< texture */
- RwRGBA color; /**< color */
- RxPipeline *pipeline; /**< pipeline */
- RwSurfaceProperties surfaceProps; /**< surfaceProps */
- RwInt16 refCount; /* C.f. rwsdk/world/bageomet.h:RpGeometry */
- RwInt16 pad;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpmaterial
- * \ref RpMaterialCallBack
- * represents the function called from \ref RpGeometryForAllMaterials and
- * \ref RpWorldForAllMaterials for all materials referenced by polygons in a
- * given geometry. This function should return a pointer to the current
- * material to indicate success. The callback may return NULL to terminate
- * further callbacks on the materials.
- *
- * \param material Pointer to the current material
- * \param data Pointer to developer-defined data structure.
- *
- * \return Pointer to the current material.
- */
-typedef RpMaterial *(*RpMaterialCallBack)(RpMaterial *material, void *data);
-
-/****************************************************************************
- <macro/inline functionality
- */
-
-#define RpMaterialAddRefMacro(_material) \
- (((_material)->refCount++), (_material))
-
-#define RpMaterialAddRefVoidMacro(_material) \
-MACRO_START \
-{ \
- (_material)->refCount++; \
-} \
-MACRO_STOP
-
-
-#define RpMaterialSetColorMacro(_material, _color) \
- (RwRGBAAssign(&((_material)->color), (_color)), (_material))
-
-#define RpMaterialGetColorMacro(_material) \
- (&((_material)->color))
-
-#define RpMaterialSetSurfacePropertiesMacro(_material, _surfProps) \
- (RwSurfacePropertiesAssign(&((_material)->surfaceProps), \
- (_surfProps)), (_material))
-
-#define RpMaterialSetSurfacePropertiesVoidMacro(_material, _surfProps) \
-MACRO_START \
-{ \
- RwSurfacePropertiesAssign(&((_material)->surfaceProps), \
- (_surfProps)); \
-} \
-MACRO_STOP
-
-#define RpMaterialGetSurfacePropertiesMacro(_material) \
- (&((_material)->surfaceProps))
-
-#define RpMaterialGetTextureMacro(_material) \
- ((_material)->texture)
-
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpMaterialAddRef(_material) \
- RpMaterialAddRefMacro(_material)
-
-#define RpMaterialSetColor(_material, _color) \
- RpMaterialSetColorMacro(_material, _color)
-
-#define RpMaterialGetColor(_material) \
- RpMaterialGetColorMacro(_material)
-
-#define RpMaterialSetSurfaceProperties(_material, _surfProps) \
- RpMaterialSetSurfacePropertiesMacro(_material, _surfProps)
-
-#define RpMaterialGetSurfaceProperties(_material) \
- RpMaterialGetSurfacePropertiesMacro(_material)
-
-#define RpMaterialGetTexture(_material) \
- RpMaterialGetTextureMacro(_material)
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-extern void RpMaterialSetFreeListCreateParams( RwInt32 blockSize,
- RwInt32 numBlocksToPrealloc );
-
-/* Creating, destroying and referencing materials */
-extern RpMaterial *RpMaterialCreate(void);
-extern RwBool RpMaterialDestroy(RpMaterial *material);
-extern RpMaterial *RpMaterialClone(RpMaterial *material);
-
-/* Textures */
-extern RpMaterial *RpMaterialSetTexture(RpMaterial *material, RwTexture *texture);
-
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-extern RpMaterial *RpMaterialAddRef(RpMaterial *material);
-
-/* Textures */
-extern RwTexture *RpMaterialGetTexture(const RpMaterial *material);
-
-/* Setting and getting colors */
-extern RpMaterial *RpMaterialSetColor(RpMaterial *material, const RwRGBA *color);
-extern const RwRGBA *RpMaterialGetColor(const RpMaterial *material);
-
-/* Setting and getting surface properties */
-extern RpMaterial *
-RpMaterialSetSurfaceProperties(RpMaterial *material,
- const RwSurfaceProperties *surfaceProperties);
-
-extern const RwSurfaceProperties *
-RpMaterialGetSurfaceProperties(const RpMaterial *material);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-
-/* Attaching toolkits */
-extern RwInt32 RpMaterialRegisterPlugin(RwInt32 size, RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-extern RwInt32 RpMaterialRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack readCB,
- RwPluginDataChunkWriteCallBack writeCB,
- RwPluginDataChunkGetSizeCallBack getSizeCB);
-extern RwInt32 RpMaterialSetStreamAlwaysCallBack(
- RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-extern RwInt32 RpMaterialSetStreamRightsCallBack(RwUInt32 pluginID,
- RwPluginDataChunkRightsCallBack rightsCB);
-extern RwInt32 RpMaterialGetPluginOffset(RwUInt32 pluginID);
-extern RwBool RpMaterialValidatePlugins(const RpMaterial *material);
-
-/* Binary format */
-extern RwUInt32 RpMaterialStreamGetSize(const RpMaterial *material);
-extern RpMaterial *RpMaterialStreamRead(RwStream *stream);
-extern const RpMaterial *RpMaterialStreamWrite(const RpMaterial *material, RwStream *stream);
-extern RpMaterialChunkInfo *
-_rpMaterialChunkInfoRead(RwStream *stream,
- RpMaterialChunkInfo *materialChunkInfo,
- RwInt32 *bytesRead);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define RpMaterialChunkInfoRead(stream, materialChunkInfo, bytesRead) \
- _rpMaterialChunkInfoRead(stream, materialChunkInfo, bytesRead)
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/bamatlst.h ---*/
-/****************************************************************************
- Global Types
- */
-
-typedef struct RpMaterialList RpMaterialList;
-
-#if (!defined(DOXYGEN))
-struct RpMaterialList
-{
- RpMaterial **materials;
- RwInt32 numMaterials;
- RwInt32 space;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define rpMaterialListGetNumMaterials(mlist) ((mlist)->numMaterials)
-
-/* Setting up and destroying material lists */
-extern RpMaterialList *_rpMaterialListInitialize(RpMaterialList *matList);
-extern RpMaterialList *_rpMaterialListDeinitialize(RpMaterialList *matList);
-
-/* Accessing material lists */
-extern RpMaterial ** _rpMaterialListAlloc(RwUInt32 count);
-extern RpMaterial *_rpMaterialListGetMaterial(const RpMaterialList *matList,
- RwInt32 matIndex);
-extern RpMaterialList * _rpMaterialListSetSize(RpMaterialList * matList,
- RwInt32 size);
-extern RpMaterialList *_rpMaterialListCopy(RpMaterialList *matListOut,
- const RpMaterialList *matListIn);
-extern RwInt32 _rpMaterialListAppendMaterial(RpMaterialList *matList,
- RpMaterial *material);
-extern RwInt32 _rpMaterialListFindMaterialIndex(const RpMaterialList *matList,
- const RpMaterial *material);
-
-/* Binary format */
-extern RwUInt32 _rpMaterialListStreamGetSize(const RpMaterialList *matList);
-extern RpMaterialList *_rpMaterialListStreamRead(RwStream *stream,
- RpMaterialList *matList);
-extern const RpMaterialList *_rpMaterialListStreamWrite(const RpMaterialList *matList,
- RwStream *stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define rpMaterialListInitialize(_matList) \
- _rpMaterialListInitialize(_matList)
-
-#define rpMaterialListDeinitialize(_matList) \
- _rpMaterialListDeinitialize(_matList)
-
-#define rpMaterialListGetMaterial(_matList, _matIndex) \
- _rpMaterialListGetMaterial(_matList, _matIndex)
-
-#define rpMaterialListCopy(_matListOut, _matListIn) \
- _rpMaterialListCopy(_matListOut, _matListIn)
-
-#define rpMaterialListAppendMaterial(_matList, _material) \
- _rpMaterialListAppendMaterial(_matList, _material)
-
-#define rpMaterialListStreamRead(_stream, _matList) \
- _rpMaterialListStreamRead(_stream, _matList)
-
-#define rpMaterialListStreamWrite(_matList, _stream) \
- _rpMaterialListStreamWrite(_matList, _stream)
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/bamesh.h ---*/
-
-/*
- *
- * Purpose: Provide construction and enumeration facilities for meshes.
- *
- * Copyright (c) 1998 Criterion Software Ltd.
- */
-
-#define RPMESHGLOBAL(var) \
- (RWPLUGINOFFSET(rpMeshGlobals, \
- RwEngineInstance, \
- meshModule.globalsOffset)->var)
-
-#define rwPRIMTYPEOR \
- (rwPRIMTYPELINELIST | \
- rwPRIMTYPEPOLYLINE | \
- rwPRIMTYPETRILIST | \
- rwPRIMTYPETRISTRIP | \
- rwPRIMTYPETRIFAN | \
- rwPRIMTYPEPOINTLIST)
-
-#define rpMESHHEADERPRIMTYPEOR \
- (0 /* rpMESHHEADERTRILIST*/ | \
- rpMESHHEADERTRISTRIP | \
- rpMESHHEADERTRIFAN | \
- rpMESHHEADERLINELIST | \
- rpMESHHEADERPOLYLINE | \
- rpMESHHEADERPOINTLIST)
-
-/****************************************************************************
- Global variables
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RwModuleInfo meshModule;
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/****************************************************************************
- Global types
- */
-
-/*
- * typedef for header structure listing all meshes
- * constituting a single RpGeometry or RpWorldSector
- */
-typedef struct RpMeshHeader RpMeshHeader;
-
-/**
- * \ingroup rpmesh
- * \ref RpMeshHeaderFlags
- * represents the different types of mesh.
- * \see RpMeshHeader
- */
-enum RpMeshHeaderFlags
-{
- /* NOTE: trilists are denoted by absence of any other
- * primtype flags, so be careful that you test:
- * (triListFlag == (flags&triListFlag))
- * or:
- * (0 == (flags&rpMESHHEADERPRIMMASK))
- * and not:
- * (flags&triListFlag)
- */
- rpMESHHEADERTRISTRIP = 0x0001, /**< Render as tristrips */
- rpMESHHEADERTRIFAN = 0x0002, /**< On PlayStation 2 these will be converted to trilists */
- rpMESHHEADERLINELIST = 0x0004, /**< Render as linelists */
- rpMESHHEADERPOLYLINE = 0x0008, /**< On PlayStation 2 these will be converted to linelists */
- rpMESHHEADERPOINTLIST = 0x0010, /**< Pointlists are supported only if rendered by
- * custom pipelines; there is no default RenderWare
- * way to render pointlists. */
-
- rpMESHHEADERPRIMMASK = 0x00FF, /**< All bits reserved for specifying primitive type */
- rpMESHHEADERUNINDEXED = 0x0100, /**< Topology is defined implicitly by vertex
- * order, ergo the mesh contains no indices */
- rpMESHHEADERFLAGSFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-
-/*
- * Typedef for RpMeshHeaderFlags enumeration
- * representing the different types of mesh
- */
-typedef enum RpMeshHeaderFlags RpMeshHeaderFlags;
-
-typedef struct rpMeshGlobals rpMeshGlobals;
-
-#if (!defined(DOXYGEN))
-struct rpMeshGlobals
-{
- RwInt16 nextSerialNum;
- RwFreeList *triStripListEntryFreeList;
- RwUInt8 meshFlagsToPrimType[rpMESHHEADERPRIMTYPEOR];
- RwUInt8 primTypeToMeshFlags[rwPRIMTYPEOR];
-};
-#endif /* (!defined(DOXYGEN)) */
-
-typedef struct RpBuildMeshTriangle RpBuildMeshTriangle;
-
-/**
- * \ingroup rpmesh
- * \struct RpBuildMeshTriangle
- * This type represents an array of indices into
- * the object vertex array. Used during the construction
- * of tristrips.
- *
- * See API functions
- * \see RpBuildMeshGeneratePreprocessTriStrip
- * \see RpBuildMeshGenerateExhaustiveTriStrip
- * \see RpBuildMeshGenerateTrivialTriStrip
- * \see RpBuildMeshGenerateDefaultTriStrip
- * and
- * \see RpMeshSetTriStripMethod
- * \see RpMeshGetTriStripMethod
- */
-struct RpBuildMeshTriangle
-{
- RwUInt16 vertIndex[3]; /**< indices into object vertex
- * array. */
- RpMaterial *material; /**< pointer to material used to
- * render the mesh. */
-};
-
-typedef struct RpBuildMesh RpBuildMesh;
-
-/**
- * \ingroup rpmesh
- * \struct RpBuildMesh
- * This type represents a mesh ready for tri stripping.
- *
- * See API functions
- * \see RpBuildMeshGeneratePreprocessTriStrip
- * \see RpBuildMeshGenerateExhaustiveTriStrip
- * \see RpBuildMeshGenerateTrivialTriStrip
- * \see RpBuildMeshGenerateDefaultTriStrip
- * and
- * \see RpMeshSetTriStripMethod
- * \see RpMeshGetTriStripMethod
- */
-struct RpBuildMesh
-{
- RwUInt32 triangleBufferSize; /**< number of triangles
- * space has been allocated
- * for. */
- RwUInt32 numTriangles; /**< number of triangles to be
- * tristripped. */
- RpBuildMeshTriangle *meshTriangles; /**< pointer to build mesh
- * triangles. */
-};
-
-typedef struct RpMesh RpMesh;
-
-/**
- * \ingroup rpmesh
- * \struct RpMesh
- * This type represents a single polygon mesh.
- * A mesh is defined as a collection of triangles derived from an RpGeometry
- * or RpWorldSector which have a common material.
- *
- * See API functions \see RpGeometryForAllMeshes and
- * \see RpWorldSectorForAllMeshes and
- * the corresponding function callback types:
- */
-struct RpMesh
-{
- RxVertexIndex *indices; /**< vertex indices defining the mesh */
- RwUInt32 numIndices; /**< number of vertices in mesh */
- RpMaterial *material; /**< pointer to material used to
- * render the mesh. */
-};
-
-/**
- * \ingroup rpmesh
- * \struct RpMeshHeader
- * Header for all meshes that constitute a single RpGeometry or RpWorldSector
- */
-struct RpMeshHeader
-{
- RwUInt32 flags; /**< \see RpMeshHeaderFlags */
- RwUInt16 numMeshes; /**< Number of meshes in object */
- RwUInt16 serialNum; /**< Determine if mesh has changed
- * since last instance */
- RwUInt32 totalIndicesInMesh; /**< Total triangle index
- * count in all meshes
- */
- RwUInt32 firstMeshOffset; /**< Offset in bytes from end this
- * structure RpMeshHeader
- * to the first mesh
- */
-};
-
-/**
- * \ingroup rpmesh
- * \ref RpMeshCallBack is the callback
- * function supplied to \ref RpGeometryForAllMeshes and
- * \ref RpWorldSectorForAllMeshes for all meshes in a given geometry.
- *
- * This function should return a pointer to the current mesh to indicate
- * success. The callback may return NULL to terminate further callbacks
- * on the meshes.
- *
- * \param mesh Pointer to the current mesh, supplied by
- * iterator.
- * \param meshHeader Pointer to the meshes header
- * \param data Pointer to developer-defined data structure.
- *
- * \return Returns a pointer to the current mesh if successful or NULL
- * if an error occurred.
- */
-typedef RpMesh *(*RpMeshCallBack) (RpMesh * mesh,
- RpMeshHeader * meshHeader,
- void *pData);
-
-/****************************************************************************
- Function prototypes
- */
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpMeshHeaderGetPrimType(_mshHdr) \
- ( (RwPrimitiveType)RPMESHGLOBAL(meshFlagsToPrimType)[(_mshHdr)->flags & \
- rpMESHHEADERPRIMMASK] )
-
-#define RpMeshHeaderSetPrimType(_mshHdr, _prmTyp) \
- ( (_mshHdr)->flags = \
- ((_mshHdr)->flags & ~rpMESHHEADERPRIMMASK) | \
- (rpMESHHEADERPRIMMASK & \
- RPMESHGLOBAL(primTypeToMeshFlags)[(_prmTyp) & \
- rpMESHHEADERPRIMMASK]), \
- (_mshHdr) )
-
-#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* Opening and closing module */
-extern void *_rpMeshOpen(void *instance, RwInt32 offset,
- RwInt32 size);
-extern void *_rpMeshClose(void *instance, RwInt32 offset,
- RwInt32 size);
-
-extern RwInt16 _rpMeshGetNextSerialNumber(void);
-
-/* Create a build mesh with nothing in */
-extern RpBuildMesh *_rpBuildMeshCreate(RwUInt32 bufferSize);
-
-/* Destroy a build mesh */
-extern RwBool _rpBuildMeshDestroy(RpBuildMesh * mesh);
-
-/* Destroy a build mesh */
-extern RwBool _rpMeshDestroy(RpMeshHeader * mesh);
-
-/* Add a triangle to a mesh */
-extern RpBuildMesh *_rpBuildMeshAddTriangle(RpBuildMesh * mesh,
- RpMaterial * material,
- RwInt32 vert1,
- RwInt32 vert2,
- RwInt32 vert3);
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-/* Get primtype from a mesh header */
-extern RwPrimitiveType RpMeshHeaderGetPrimType(RpMeshHeader *
- meshHeader);
-
-/* Set primtype for a mesh header */
-extern RpMeshHeader *RpMeshHeaderSetPrimType(RpMeshHeader *
- meshHeader,
- RwPrimitiveType
- primType);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-/* Enumerate meshes within a mesh header */
-extern RpMeshHeader *_rpMeshHeaderForAllMeshes(RpMeshHeader *
- meshHeader,
- RpMeshCallBack
- fpCallBack,
- void *pData);
-
-/* Mesh serialisation functions */
-extern RwStream *_rpMeshWrite(const RpMeshHeader * meshHeader,
- const void *object,
- RwStream * stream,
- const RpMaterialList * matList);
-extern RpMeshHeader *_rpMeshRead(RwStream * stream,
- const void *object,
- const RpMaterialList * matList);
-extern RwInt32 _rpMeshSize(const RpMeshHeader *meshHeader,
- const void *object);
-/* Mesh header create/destroy functions */
-extern void _rpMeshHeaderDestroy(RpMeshHeader * meshHeader);
-extern RpMeshHeader * _rpMeshHeaderCreate(RwUInt32 size);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/basector.h ---*/
-
-/*
- * Handling atomic sectors
- * Atomic sectors are use to divide up the world into manageable portions
- *
- * Copyright (c) 1998 Criterion Software Ltd.
-*/
-
-/****************************************************************************
- Defines
- */
-
-/* Type ID */
-#define rpWorldSector 0xff /* Not a true 'type'! */
-
-#define rpMINDISTANCEBETWEENVERTICES (RwReal)(0.0001)
-
-#define RPV3DFROMVERTEXNORMAL(v, n) \
- (v).x = (((RwReal)((n).x)) * ( (RwReal)(1.0/128))); \
- (v).y = (((RwReal)((n).y)) * ( (RwReal)(1.0/128))); \
- (v).z = (((RwReal)((n).z)) * ( (RwReal)(1.0/128)))
-
-#define RPVERTEXNORMALFROMRWV3D(n, v) \
- { \
- RwFixed naTmp[3]; \
- \
- naTmp[0] = RwRealToFixed((v).x); \
- naTmp[1] = RwRealToFixed((v).y); \
- naTmp[2] = RwRealToFixed((v).z); \
- \
- if (naTmp[0] >= RwIntToFixed(1)) \
- { \
- naTmp[0] = RwIntToFixed(1)-1; \
- } \
- if (naTmp[0] <= RwIntToFixed(-1)) \
- { \
- naTmp[0] = RwIntToFixed(-1)+1; \
- } \
- if (naTmp[1] >= RwIntToFixed(1)) \
- { \
- naTmp[1] = RwIntToFixed(1)-1; \
- } \
- if (naTmp[1] <= RwIntToFixed(-1)) \
- { \
- naTmp[1] = RwIntToFixed(-1)+1; \
- } \
- if (naTmp[2] >= RwIntToFixed(1)) \
- { \
- naTmp[2] = RwIntToFixed(1)-1; \
- } \
- if (naTmp[2] <= RwIntToFixed(-1)) \
- { \
- naTmp[2] = RwIntToFixed(-1)+1; \
- } \
- \
- (n).x = (RwInt8)(naTmp[0]>>9); \
- (n).y = (RwInt8)(naTmp[1]>>9); \
- (n).z = (RwInt8)(naTmp[2]>>9); \
- }
-
-/****************************************************************************
- Global types
- */
-
-typedef struct RpVertexNormal RpVertexNormal;
-
-#if (!defined(DOXYGEN))
-struct RpVertexNormal
-{
- RwInt8 x;
- RwInt8 y;
- RwInt8 z;
- RwUInt8 pad; /* pad character to force alignment */
-};
-
-typedef struct RpPolygon RpPolygon;
-
-struct RpPolygon
-{
- RwUInt16 matIndex;
- RwUInt16 vertIndex[3];
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpworldsector
- * \struct RpWorldSector
- * World Sector object. This should be
- * considered an opaque type. Use the RpWorldSector API functions to access.
- */
-typedef struct RpWorldSector RpWorldSector;
-
-#if (!defined(DOXYGEN))
-struct RpWorldSector
-{
- RwInt32 type;
-
- RpPolygon *polygons; /* Polygons themselves */
-
- RwV3d *vertices; /* Vertex positions */
- RpVertexNormal *normals; /* Vertex normals */
-
- RwTexCoords *texCoords[rwMAXTEXTURECOORDS]; /* Texture coordinates */
-
- RwRGBA *preLitLum; /* Pre lit luminances */
-
- /* Pointer to memory allocated for vertex and poly pointers */
- RwResEntry *repEntry;
-
- /* Atomics in this sectors */
- /* The pointers are frigged so they look like they are pointing to
- Atomics when they are pointing to here */
- RwLinkList collAtomicsInWorldSector; /* Coll priority */
- RwLinkList noCollAtomicsInWorldSector; /* No Coll priority */
-
- /* Lights in an atomic sector */
- RwLinkList lightsInWorldSector;
-
- /* Outer bounding box of sector based on BSP planes */
- RwBBox boundingBox;
-
- /* Bounding box tightly enclosing geometry */
- RwBBox tightBoundingBox;
-
- /* The mesh which groups same material polygons together */
- RpMeshHeader *mesh;
-
- /* The WorldSector object pipeline for this WorldSector */
- RxPipeline *pipeline;
-
- /* Material list window base
- * (triangles in a given sector can "see"
- * the 256 materials from
- * MatList[matListWindowBase] -> MatList[matListWindowBase + 255])
- */
- RwUInt16 matListWindowBase;
-
- RwUInt16 numVertices; /* Num vertices */
- RwUInt16 numPolygons; /* Num polygons */
- RwUInt16 pad;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpworldsector
- * \ref RpWorldSectorCallBack
- * represents the function called from \ref RpWorldForAllWorldSectors,
- * \ref RpAtomicForAllWorldSectors and \ref RpLightForAllWorldSectors for all
- * world sectors in a given world or world sectors a given atomic or light lies
- * in. This function should return a pointer to the current world sector to
- * indicate success. The callback may return NULL to terminate further
- * callbacks on the atomic or light.
- *
- * \param sector Pointer to the current world sector
- * \param data Pointer to developer-defined data structure.
- *
- * \return Pointer to the current world sector.
- *
- */
-typedef RpWorldSector *(*RpWorldSectorCallBack)(RpWorldSector *worldSector, void *data);
-
-typedef struct RpSector RpSector;
-
-#if (!defined(DOXYGEN))
-struct RpSector
-{
- RwInt32 type;
-};
-
-/* NOTE: The left and right pointers can point to an RpPlaneSector or
- * an RpWorldSector
- * This is determined what the type is via the type value
- */
-
-typedef struct RpPlaneSector RpPlaneSector;
-
-struct RpPlaneSector
-{
- RwInt32 type;
-
- RwReal value;
- RpSector *leftSubTree; /* Sector 'left' (less) of the plane */
- RpSector *rightSubTree; /* Sector 'right' (more) of the plane */
- RwReal leftValue;
- RwReal rightValue;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RwPluginRegistry sectorTKList;
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define RpWorldSectorGetBBoxMacro(_sctr) (&((_sctr)->boundingBox))
-#define RpWorldSectorGetTightBBoxMacro(_sctr) (&((_sctr)->tightBoundingBox))
-
-#if ((!defined(RWDEBUG)) && (!defined(RWSUPPRESSINLINE)))
-
-#define RpWorldSectorGetBBox RpWorldSectorGetBBoxMacro
-#define RpWorldSectorGetTightBBox RpWorldSectorGetTightBBoxMacro
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-/* Get info from atomic sectors */
-extern RwInt32 RpWorldSectorGetNumPolygons(const RpWorldSector *Sector);
-extern RwInt32 RpWorldSectorGetNumVertices(const RpWorldSector *Sector);
-
-/* Instancing and deinstancing sectors */
-extern RpWorldSector * RpWorldSectorRender(RpWorldSector *worldSector);
-
-extern const RpWorldSector *RpWorldSectorForAllMeshes(const RpWorldSector *sector,
- RpMeshCallBack fpCallBack,
- void *pData);
-
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-extern const RwBBox *RpWorldSectorGetBBox(const RpWorldSector *sector);
-extern const RwBBox *RpWorldSectorGetTightBBox(const RpWorldSector *sector);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-/* Plugins */
-extern RwInt32 RpWorldSectorRegisterPlugin(RwInt32 size, RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-extern RwInt32 RpWorldSectorRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack readCB,
- RwPluginDataChunkWriteCallBack writeCB,
- RwPluginDataChunkGetSizeCallBack getSizeCB);
-extern RwInt32 RpWorldSectorSetStreamAlwaysCallBack(
- RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-extern RwInt32 RpWorldSectorSetStreamRightsCallBack(RwUInt32 pluginID,
- RwPluginDataChunkRightsCallBack rightsCB);
-extern RwInt32 RpWorldSectorGetPluginOffset(RwUInt32 pluginID);
-extern RwBool RpWorldSectorValidatePlugins(const RpWorldSector *sector);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/bameshop.h ---*/
-
-/****************************************************************************
- Defines
- */
-
-#define RPTRISTRIPPOLYGONMAXEDGES 3
-
-/**
- * \ingroup rpmesh
- * \ref RpTriStripMeshCallBack is the callback to generate triangle strips
- * when the triangle stripped geometries or world sectors are unlocked.
- *
- * \param buildMesh pointer to the mesh which the triangle strip will be
- * generated from.
- * \param data pointer to user-supplied data to pass to the callback
- * function.
- *
- * \return a pointer to the constructed mesh header.
- *
- */
-typedef RpMeshHeader *
-(*RpTriStripMeshCallBack) (RpBuildMesh *buildMesh, void *data);
-
-
-
-/****************************************************************************
- Global types
- */
-
-typedef struct RpTriStripEdge RpTriStripEdge;
-
-typedef struct RpTriStripPolygon RpTriStripPolygon;
-/**
- * \ingroup rpmesh
- * \struct RpTriStripPolygon
- * This type represents a polygon.
- *
- * \see RpTriStripPolygonFollowStrip
- * \see RpBuildMeshGenerateTriStrip
- * \see RpTriStripMeshTunnel
- */
-struct RpTriStripPolygon
-{
- RwLLLink inEndLink; /**< link for list of polygons joined by fewer than
- 2 strip edges */
- RwLLLink inUsedLink; /**< link for list of used polygons */
- RwLLLink inFreeLink; /**< link for list of free polygons */
- RwUInt32 numEdges; /**< number of edges */
- RpTriStripEdge *edges[RPTRISTRIPPOLYGONMAXEDGES]; /**< polygon edges */
- RxVertexIndex vertIndex[RPTRISTRIPPOLYGONMAXEDGES]; /**< polygon vertex
- indices */
- RwUInt32 testFrame; /**< used to prevent a tri-strip being counted by
- the cost function more than once */
-};
-
-/**
- * \ingroup rpmesh
- * \struct RpTriStripEdge
- * This type represents a polygon edge which may be part of a tri-strip.
- *
- * \see RpTriStripPolygonFollowStrip
- * \see RpBuildMeshGenerateTriStrip
- * \see RpTriStripMeshTunnel
- */
-struct RpTriStripEdge
-{
- RwLLLink inUsedLink; /**< link for list of used edges */
- RwLLLink inFreeLink; /**< link for list of free edges */
- RpTriStripPolygon *poly1; /**< first polygon including this edge */
- RpTriStripPolygon *poly2; /**< second polygon including this edge or NULL
- if this edge is only included in one */
- RxVertexIndex vert1; /**< index of first vertex of edge */
- RxVertexIndex vert2; /**< index of second vertex of edge */
- RwBool strip; /**< TRUE if the edge is part of a tri-strip */
-};
-
-typedef struct RpTriStripMesh RpTriStripMesh;
-/**
- * \ingroup rpmesh
- * \struct RpTriStripMesh
- * This type represents a mesh and the tri-strips it contains.
- *
- * \see RpBuildMeshGenerateTriStrip
- * \see RpTriStripMeshTunnel
- */
-struct RpTriStripMesh
-{
- RwUInt32 numPolygons; /**< the number of polygons in the mesh */
- RwLinkList polygonEndList; /**< linked list of polygons joined by fewer
- than 2 strip edges. */
- RwLinkList polygonUsedList; /**< linked list of used polygons */
- RwLinkList polygonFreeList; /**< linked list of free polygons */
- RwLinkList edgeUsedList; /**< linked list of used edges */
- RwLinkList edgeFreeList; /**< linked list of free edges */
-};
-
-/**
- * \ingroup rpmesh
- * \ref RpTriStripMeshStripCallBack represents the callback function to
- * tri-strip a mesh.
- *
- * \param mesh Pointer to the mesh to tri-strip.
- * \param data Pointer to user-supplied data.
- *
- * \return Returns a pointer to the current mesh if successful or NULL if an
- * error occurred.
- */
-typedef RpTriStripMesh *
-(*RpTriStripMeshStripCallBack) (RpTriStripMesh *mesh, void *data);
-
-typedef struct RpTriStripData RpTriStripData;
-/**
- * \ingroup rpmesh
- * \struct RpTriStripData
- * This type represents the data required by the
- * \ref RpBuildMeshGenerateTriStrip function to tri-strip a mesh. This data must
- * be the user-supplied data passed into RpMeshSetTriStripMethod when using
- * \ref RpBuildMeshGenerateTriStrip.
- *
- * \see RpMeshGetTriStripMethod
- * \see RpMeshSetTriStripMethod
- * \see RpBuildMeshGenerateTriStrip
- * \see RpTriStripMeshTunnel
- */
-struct RpTriStripData
-{
- RwBool ignoreWinding; /**< TRUE to ignore winding order */
- RpTriStripMeshStripCallBack stripCB; /**< callback to tri-strip mesh */
- void *data; /**< data to supply to callback */
-};
-
-/**
- * \ingroup rpmesh
- * \ref RpTriStripCostCallBack represents the callback function used by the
- * tunnelling tri-stripper to determine the cost of a tri-strip.
- *
- * \param startPolygon Pointer to polygon at the start of the tri-strip.
- * \param testFrame Value that must be written to the testFrame of all
- * polygons in the tri-strip
- * \param data Pointer to user-supplied data.
- *
- * \return Returns the cost of the tri-strip.
- */
-typedef RwUInt32
-(*RpTriStripCostCallBack) (RpTriStripPolygon *startPolygon, RwUInt32 testFrame, void *data);
-
-typedef struct RpTriStripTunnelData RpTriStripTunnelData;
-/**
- * \ingroup rpmesh
- * \struct RpTriStripTunnelData
- * This type represents the data required by the
- * \ref RpTriStripMeshTunnel function to tri-strip a mesh. This data must
- * be the user-supplied data in the RpTriStripData structure passed into
- * \ref RpMeshSetTriStripMethod as the user-supplied data when using
- * \ref RpTriStripMeshTunnel.
- *
- * \see RpMeshGetTriStripMethod
- * \see RpMeshSetTriStripMethod
- * \see RpBuildMeshGenerateTriStrip
- * \see RpTriStripMeshTunnel
- * \see RpTriStripDefaultCost
- */
-struct RpTriStripTunnelData
-{
- RwReal quality; /**< the higher the value the better the
- output but the longer it will take;
- values greater than 1 are unlikely to
- be useful */
- RwUInt32 lengthLimit; /**< the maximum tunnel length to use */
- RpTriStripCostCallBack costCB; /**< callback to determine tri-strip cost */
- void *data; /**< data to supply to callbacks */
-};
-
-
-
-/****************************************************************************
- Global Variables
- */
-
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* Tri-strip manipulating functions */
-extern RpTriStripPolygon *
-RpTriStripPolygonFollowStrip(RpTriStripPolygon *curr, RpTriStripPolygon *prev);
-
-/* Callback strip costing functions */
-extern RwUInt32
-RpTriStripDefaultCost(RpTriStripPolygon *startPolygon, RwUInt32 testFrame,
- void *data);
-
-/* Callback mesh stripping functions */
-extern RpTriStripMesh *
-RpTriStripMeshTunnel(RpTriStripMesh *mesh, void *data);
-
-extern RpTriStripMesh *
-RpTriStripMeshQuick(RpTriStripMesh *mesh, void *data);
-
-/* New callback mesh generating function */
-extern RpMeshHeader *
-RpBuildMeshGenerateTriStrip(RpBuildMesh *buildMesh, void *data);
-
-/* Old callback mesh generating functions. Probably obsolete */
-extern RpMeshHeader *
-RpBuildMeshGenerateTrivialTriStrip(RpBuildMesh *buildMesh, void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGenerateDefaultTriStrip(RpBuildMesh *buildmesh, void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGeneratePreprocessTriStrip(RpBuildMesh *buildmesh, void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGenerateExhaustiveTriStrip(RpBuildMesh *buildmesh, void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGenerateDefaultIgnoreWindingTriStrip(RpBuildMesh *buildmesh,
- void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGeneratePreprocessIgnoreWindingTriStrip(RpBuildMesh *buildmesh,
- void *data);
-
-extern RpMeshHeader *
-RpBuildMeshGenerateExhaustiveIgnoreWindingTriStrip(RpBuildMesh *buildmesh,
- void *data);
-
-/* Functions to set and get the global mesh tri-strip algorithm */
-extern RwBool
-RpMeshSetTriStripMethod(RpTriStripMeshCallBack callback, void *data);
-
-extern RwBool
-RpMeshGetTriStripMethod(RpTriStripMeshCallBack *callback, void **data);
-
-
-extern RpMeshHeader *
-_rpTriListMeshGenerate(RpBuildMesh *buildMesh, void *data);
-
-/*
- * Optimise the mesh ordering
- * (sort on material and place transparent materials last)
- */
-extern RpMeshHeader *
-_rpMeshOptimise(RpBuildMesh *buildmesh, RwUInt32 flags);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#define _rpTriStripMeshTrivialGenerate(_buildMesh, _data) \
- RpBuildMeshGenerateTrivialTriStrip(_buildMesh, _data)
-
-#define _rpTriStripMeshDefaultGenerate(_buildmesh, _data) \
- RpBuildMeshGenerateDefaultTriStrip(_buildmesh, _data)
-
-#define _rpTriStripMeshPreprocessGenerate(_buildmesh, _data) \
- RpBuildMeshGeneratePreprocessTriStrip(_buildmesh, _data)
-
-#define _rpTriStripMeshExhaustiveGenerate(_buildmesh, _data) \
- RpBuildMeshGenerateExhaustiveTriStrip(_buildmesh, _data)
-
-#define _rpMeshSetTristripMethod(_callback, _data) \
- RpMeshSetTriStripMethod(_callback, _data)
-
-#define _rpMeshGetTristripMethod(_callback, _data) \
- RpMeshGetTriStripMethod(_callback, _data)
-
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/balight.h ---*/
-
-/*
- * Lighting 3D objects.
- * Lights are used to illuminate atomics and worlds
- *
- * Copyright (c) 1998 Criterion Software Ltd.
- */
-
-
-/****************************************************************************
- Defines
- */
-
-/* Binary Light */
-typedef struct RpLightChunkInfo RpLightChunkInfo;
-typedef struct RpLightChunkInfo _rpLight;
-
-#if (!defined(DOXYGEN))
-struct RpLightChunkInfo
-{
- RwReal radius; /**< radius */
- RwReal red; /**< red */
- RwReal green; /**< green */
- RwReal blue; /**< blue */
- RwReal minusCosAngle; /**< minusCosAngle */
- RwUInt32 typeAndFlags; /**< typeAndFlags */
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/* Type ID */
-#define rpLIGHT 3
-
-/* Beyond this the lights must be positioned */
-#define rpLIGHTPOSITIONINGSTART 0x80
-
-/**
- * \ingroup rplight
- * \ref RpLightType are
- * light sub types. This type represents the different
- * types of light source that can be created using the API function \ref RpLightCreate.
- * Note that lights of types rpLIGHTPOINT, rpLIGHTSPOT and rpLIGHTSPOTSOFT have linear
- * intensity fall-off with distance from the source, reducing to zero at the light's radius:*/
-enum RpLightType
-{
- rpNALIGHTTYPE = 0,
-
- /* These don't take part in the tie mechanism (no position) */
- rpLIGHTDIRECTIONAL, /**<Directional Light */
- rpLIGHTAMBIENT, /**<Ambient Light */
-
- /* These do take part in the tie mechanism (do have position) */
- rpLIGHTPOINT = rpLIGHTPOSITIONINGSTART, /**<Point Light */
- rpLIGHTSPOT, /**<Spot Light */
- rpLIGHTSPOTSOFT, /**<Soft Spot Light */
- rpLIGHTTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpLightType RpLightType;
-
-#define rpLIGHTMINCONEANGLE ((RwReal)0.0f)
-
-#if (defined(XBOX_DRVMODEL_H))
-#define rpLIGHTMAXCONEANGLE (rwPIOVER2)
-#elif (defined(OPENGL_DRVMODEL_H))
-#define rpLIGHTMAXCONEANGLE (rwPIOVER2)
-#elif (defined(GCN_DRVMODEL_H))
-#define rpLIGHTMAXCONEANGLE (rwPIOVER2)
-#elif (defined(D3D8_DRVMODEL_H))
-#define rpLIGHTMAXCONEANGLE (rwPIOVER2)
-#else
-#define rpLIGHTMAXCONEANGLE (rwPI)
-#endif
-
-/*************/
-
-/*** FLAGS ***/
-
-/*************/
-
-/**
- * \ingroup rplight
- * \ref RpLightFlag defines what geometry is influenced by the light.
- * The bit-field RpLightFlag specifies the options available for controlling the scope
- * of a light source (see API function \ref RpLightSetFlags):*/
-enum RpLightFlag
-{
- rpLIGHTLIGHTATOMICS = 0x01, /**<The light source illuminates all atomics in a world */
- rpLIGHTLIGHTWORLD = 0x02, /**<The light source illuminates all static geometry in a world */
- rpLIGHTFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpLightFlag RpLightFlag;
-
-/* rpLIGHTPRIVATENOCHROMA - turns on optimisations to do with
- * lights which are a shade of grey
- */
-enum rpLightPrivateFlag
-{
- rpLIGHTPRIVATENOCHROMA = 0x01,
- rpLIGHTPRIVATEFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum rpLightPrivateFlag rpLightPrivateFlag;
-
-/*********************/
-
-
-#define RWMINUSCOSFROMTAN(_minusCosAngle, _tanAngle) \
-MACRO_START \
-{ \
- const RwReal TanAngle2 = (_tanAngle) * (_tanAngle); \
- const RwReal CosAngle2 = ((RwReal)1) / ( ((RwReal)1) + TanAngle2); \
- RwReal CosAngle; \
- rwSqrtMacro(&CosAngle, CosAngle2); \
- (_minusCosAngle) = - CosAngle; \
-} \
-MACRO_STOP
-
-#define RWTANFROMMINUSCOS(_tanAngle, _minusCosAngle) \
-MACRO_START \
-{ \
- const RwReal CosAngle2 = (_minusCosAngle) * (_minusCosAngle); \
- const RwReal TanAngle2 = (((RwReal)1) - (CosAngle2)) / (CosAngle2); \
- rwSqrtMacro(&_tanAngle, TanAngle2); \
-} \
-MACRO_STOP
-
-
-/**
- * \ingroup rplight
- * \struct RpLight
- * Light object. This should be
- * considered an opaque type. Use the RpLight API functions to access.
- */
-typedef struct RpLight RpLight;
-
-#if (!defined(DOXYGEN))
-struct RpLight
-{
- RwObjectHasFrame object; /**< object */
- RwReal radius; /**< radius */
- RwRGBAReal color; /**< color */ /* Light color */
- RwReal minusCosAngle; /**< minusCosAngle */
- RwLinkList WorldSectorsInLight; /**< WorldSectorsInLight */
- RwLLLink inWorld; /**< inWorld */
- RwUInt16 lightFrame; /**< lightFrame */
- RwUInt16 pad;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rplight
- * \ref RpLightCallBack
- * represents the function called from \ref RpWorldForAllLights and
- * \ref RpWorld SectorForAllLights for all lights in a given world or world
- * sector. This function should return a pointer to the current light to
- * indicate success. The callback may return NULL to terminate further
- * callbacks on the world sector.
- *
- * \param light Pointer to the current light in the world
- * sector.
- * \param data Pointer to developer-defined data structure.
- *
- * \return Pointer to the current light.
- */
-typedef RpLight *(*RpLightCallBack) (RpLight * light, void *data);
-
-typedef struct RpLightTie RpLightTie;
-
-/**
- * \ingroup rplight
- * \struct RpLightTie
- *
- * RpLightTie is a linked list of lights inside world sectors. These are
- * created when frame hierarchies are updated as part of an \ref RwCameraBeginUpdate.
- * This is used for determining which lights influence a world sector and the atomics inside it.
- * Creation and destruction of RpLightTies is internal to the world plugin.
- */
-struct RpLightTie
-{
- /* Information for an atomic sector */
- RwLLLink lightInWorldSector; /**< Lights IN this ATOMIC SECTOR */
- RpLight *light; /**< A pointer to a light */
-
- /* Information for a atomic */
- RwLLLink WorldSectorInLight; /**< Atomic sectors HOLDING this Light */
- RpWorldSector *sect; /**< A pointer to a world sector */
-};
-
-
-/****************************************************************************
- <macro/inline functionality
- */
-
-#define RpLightGetRadiusMacro(_light) \
- ((_light)->radius)
-
-#define RpLightGetColorMacro(_light) \
- (&((_light)->color))
-
-#define RpLightSetFrameMacro(_light, _frame) \
- (rwObjectHasFrameSetFrame((_light), (_frame)), (_light))
-
-#define RpLightGetFrameMacro(_light) \
- ((RwFrame *)rwObjectGetParent((_light)))
-
-#define RpLightGetTypeMacro(_light) \
- ((RpLightType)rwObjectGetSubType((_light)))
-
-#define RpLightSetFlagsMacro(_light, _flags) \
- ((rwObjectSetFlags((_light), (_flags))), (_light))
-
-#define RpLightGetFlagsMacro(_light) \
- (rwObjectGetFlags((_light)))
-
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpLightGetRadius(_light) \
- RpLightGetRadiusMacro(_light)
-
-#define RpLightGetColor(_light) \
- RpLightGetColorMacro(_light)
-
-#define RpLightSetFrame(_light, _frame) \
- RpLightSetFrameMacro(_light, _frame)
-
-#define RpLightGetFrame(_light) \
- RpLightGetFrameMacro(_light)
-
-#define RpLightGetType(_light) \
- RpLightGetTypeMacro(_light)
-
-#define RpLightSetFlags(_light, _flags) \
- RpLightSetFlagsMacro(_light, _flags)
-
-#define RpLightGetFlags(_light) \
- RpLightGetFlagsMacro(_light)
-
-#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-extern RwReal RpLightGetRadius(const RpLight *light);
-extern const RwRGBAReal *RpLightGetColor(const RpLight *light);
-extern RpLight *RpLightSetFrame(RpLight *light, RwFrame *frame);
-extern RwFrame *RpLightGetFrame(const RpLight *light);
-extern RpLightType RpLightGetType(const RpLight *light);
-extern RpLight *RpLightSetFlags(RpLight *light, RwUInt32 flags);
-extern RwUInt32 RpLightGetFlags(const RpLight *light);
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-/* API Functions */
-extern void RpLightSetFreeListCreateParams( RwInt32 blockSize, RwInt32 numBlocksToPrealloc );
-extern RpLight *RpLightCreate(RwInt32 type);
-extern RwBool RpLightDestroy(RpLight *light);
-extern RpLight *RpLightSetRadius(RpLight *light, RwReal radius);
-extern RpLight *RpLightSetColor(RpLight *light, const RwRGBAReal *color);
-extern RwReal RpLightGetConeAngle(const RpLight *light);
-extern RpLight *RpLightSetConeAngle(RpLight * ight, RwReal angle);
-extern RwUInt32 RpLightStreamGetSize(const RpLight *light);
-extern RpLight *RpLightStreamRead(RwStream *stream);
-extern const RpLight *RpLightStreamWrite(const RpLight *light,
- RwStream *stream);
-extern RpLightChunkInfo *_rpLightChunkInfoRead(RwStream *stream,
- RpLightChunkInfo *lightChunkInfo,
- RwInt32 *bytesRead);
-
-/* Attaching toolkits */
-extern RwInt32 RpLightRegisterPlugin(RwInt32 size,
- RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-extern RwInt32 RpLightRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack readCB,
- RwPluginDataChunkWriteCallBack writeCB,
- RwPluginDataChunkGetSizeCallBack getSizeCB);
-extern RwInt32 RpLightSetStreamAlwaysCallBack(RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-extern RwInt32 RpLightGetPluginOffset(RwUInt32 pluginID);
-extern RwBool RpLightValidatePlugins(const RpLight * light);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define RpLightChunkInfoRead(stream, lightChunkInfo, bytesRead) \
- _rpLightChunkInfoRead(stream, lightChunkInfo, bytesRead)
-
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/D3D8lights.h ---*/
-/*
- * typedef for struct RpD3D8AttenuationParams
- */
-typedef struct RpD3D8AttenuationParams RpD3D8AttenuationParams;
-/**
- * \ingroup rplightd3d8
- * \struct RpD3D8AttenuationParams
- * This type represents the attenuation model of a spot or point light.
- */
-struct RpD3D8AttenuationParams
-{
- RwReal constant; /**< Constant attenuation coefficient */
- RwReal linear; /**< Linear attenuation coefficient */
- RwReal quadratic; /**< Quadratic attenuation coefficient */
-};
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern void
-RpD3D8LightSetAttenuationParams(RpLight *light,
- const RpD3D8AttenuationParams *params);
-
-extern void
-RpD3D8LightGetAttenuationParams(const RpLight *light,
- RpD3D8AttenuationParams *params);
-
-extern RwBool
-_rwD3D8LightsOpen(void);
-
-extern RwBool
-_rwD3D8LightsGlobalEnable(RpLightFlag flags);
-
-extern RwBool
-_rwD3D8LightDirectionalEnable(RpLight *light);
-
-extern RwBool
-_rwD3D8LightLocalEnable(RpLight *light);
-
-extern void
-_rwD3D8LightsEnable(RwBool enable, RwUInt32 type);
-
-extern void
-_rwD3D8LightsClose(void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/bageomet.h ---*/
-
-/*
- * Handling atomic's geometry
- * Geometry describe objects, and are the building blocks for atomics
- *
- * Copyright (c) 1998 Criterion Software Ltd.
-*/
-
-
-/****************************************************************************
- Defines
- */
-
-/* Type ID */
-#define rpGEOMETRY 8
-
-/**
- * \ingroup rpgeometry
- * RpGeometryFlag
- * Geometry type flags
- *
- * When creating a geometry, these flags can be OR'ed together to
- * specify the format along with the rpGEOMETRYTEXCOORDSETS(n) macro if more
- * than two sets of texture coordinates are required. See \ref RpGeometryCreate
- * for more details.
- *
- * \see RpGeometryCreate().
- */
-enum RpGeometryFlag
-{
- rpGEOMETRYTRISTRIP = 0x00000001, /**<This geometry's meshes can be
- rendered as strips.
- \ref RpMeshSetTriStripMethod is
- used to change this method.*/
- rpGEOMETRYPOSITIONS = 0x00000002, /**<This geometry has positions */
- rpGEOMETRYTEXTURED = 0x00000004, /**<This geometry has only one set of
- texture coordinates. Texture
- coordinates are specified on a per
- vertex basis */
- rpGEOMETRYPRELIT = 0x00000008, /**<This geometry has pre-light colors */
- rpGEOMETRYNORMALS = 0x00000010, /**<This geometry has vertex normals */
- rpGEOMETRYLIGHT = 0x00000020, /**<This geometry will be lit */
- rpGEOMETRYMODULATEMATERIALCOLOR = 0x00000040, /**<Modulate material color
- with vertex colors
- (pre-lit + lit) */
-
- rpGEOMETRYTEXTURED2 = 0x00000080, /**<This geometry has at least 2 sets of
- texture coordinates. */
-
- /*
- * These above flags were stored in the flags field in an RwObject, they
- * are now stored in the flags file of the RpGeometry.
- */
-
- rpGEOMETRYNATIVE = 0x01000000,
- rpGEOMETRYNATIVEINSTANCE = 0x02000000,
-
- rpGEOMETRYFLAGSMASK = 0x000000FF,
- rpGEOMETRYNATIVEFLAGSMASK = 0x0F000000,
-
- rpGEOMETRYFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpGeometryFlag RpGeometryFlag;
-
-/* Multi texture coordinate format specifier for RpGeometryCreate() */
-#define rpGEOMETRYTEXCOORDSETS(_num) ((_num & 0xff) << 16)
-
-/**
- * \ingroup rpgeometry
- * RpGeometryLockMode
- * Geometry lock flags
- */
-enum RpGeometryLockMode
-{
- rpGEOMETRYLOCKPOLYGONS = 0x01, /**<Lock the polygons (triangle list) */
- rpGEOMETRYLOCKVERTICES = 0x02, /**<Lock the vertex positional data */
- rpGEOMETRYLOCKNORMALS = 0x04, /**<Lock the vertex normal data */
- rpGEOMETRYLOCKPRELIGHT = 0x08, /**<Lock the pre-light values */
- rpGEOMETRYLOCKTEXCOORDS = 0x10, /**<Lock the texture coordinates set 1*/
- rpGEOMETRYLOCKTEXCOORDS1 = 0x10, /**<Lock the texture coordinates set 1*/
- rpGEOMETRYLOCKTEXCOORDS2 = 0x20, /**<Lock the texture coordinates set 2*/
- rpGEOMETRYLOCKTEXCOORDS3 = 0x40, /**<Lock the texture coordinates set 3*/
- rpGEOMETRYLOCKTEXCOORDS4 = 0x80, /**<Lock the texture coordinates set 4*/
- rpGEOMETRYLOCKTEXCOORDS5 = 0x0100, /**<Lock the texture coordinates set 5*/
- rpGEOMETRYLOCKTEXCOORDS6 = 0x0200, /**<Lock the texture coordinates set 6*/
- rpGEOMETRYLOCKTEXCOORDS7 = 0x0400, /**<Lock the texture coordinates set 7*/
- rpGEOMETRYLOCKTEXCOORDS8 = 0x0800, /**<Lock the texture coordinates set 8*/
- rpGEOMETRYLOCKTEXCOORDSALL = 0x0ff0, /**<Lock all texture coordinate sets*/
- rpGEOMETRYLOCKALL = 0x0fff, /**<Combination of all the above */
-
- rpGEOMETRYLOCKMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpGeometryLockMode RpGeometryLockMode;
-
-/* Convenience macro for generating a tex coord lock flag */
-#define rpGEOMETRYLOCKTEXCOORDSIDX(_idx) (rpGEOMETRYLOCKTEXCOORDS1 << (_idx))
-
-
-/****************************************************************************
- Global Types
- */
-
-typedef struct rpGeometryGlobals rpGeometryGlobals;
-
-#if (!defined(DOXYGEN))
-struct rpGeometryGlobals
-{
- RwFreeList *geomFreeList;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpgeometry
- * \struct RpGeometry
- * Geometry object. This should be considered an opaque type.
- * Use the RpGeometry API functions to access.
- */
-typedef struct RpGeometry RpGeometry;
-
-/**
- * \ingroup rpmorphtarget
- * \struct RpMorphTarget
- * Morph target -- vertex positions and normals.
- * This should be considered an opaque type.
- * Use RpMorphTarget API functions to access.
- */
-typedef struct RpMorphTarget RpMorphTarget;
-
-#if (!defined(DOXYGEN))
-struct RpMorphTarget
-{
- RpGeometry *parentGeom;
- RwSphere boundingSphere;
- RwV3d *verts;
- RwV3d *normals;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-typedef struct RpTriangle RpTriangle;
-
-/**
- * \ingroup rpgeometry
- * \struct RpTriangle
- * This type represents a triangle in a geometry specified
- * by three indices into the geometry's vertex list (vertIndex)
- * together with an index in to the geometry's
- * material list (matIndex) (see API function \ref RpGeometryGetTriangles)
- */
-struct RpTriangle
-{
- RwUInt16 vertIndex[3]; /**< vertex indices */
- RwInt16 matIndex; /**< Index into material list */
-};
-
-#if (!defined(DOXYGEN))
-struct RpGeometry
-{
- RwObject object; /* Generic type */
-
- RwUInt32 flags; /* Geometry flags */
-
- RwUInt16 lockedSinceLastInst; /* What has been locked since we last instanced - for re-instancing */
- RwInt16 refCount; /* Reference count (for keeping track of atomics referencing geometry) */
-
- RwInt32 numTriangles; /* Quantity of various things (polys, verts and morph targets) */
- RwInt32 numVertices;
- RwInt32 numMorphTargets;
- RwInt32 numTexCoordSets;
-
- RpMaterialList matList;
-
- RpTriangle *triangles; /* The triangles */
-
- RwRGBA *preLitLum; /* The pre-lighting values */
-
- RwTexCoords *texCoords[rwMAXTEXTURECOORDS]; /* Texture coordinates */
-
- RpMeshHeader *mesh; /* The mesh - groups polys of the same material */
-
- RwResEntry *repEntry; /* Information for an instance */
-
- RpMorphTarget *morphTarget; /* The Morph Target */
-};
-
-typedef struct RpGeometryChunkInfo RpGeometryChunkInfo;
-typedef struct RpGeometryChunkInfo _rpGeometry;
-
-struct RpGeometryChunkInfo
-{
- RwInt32 format; /* Compression flags and number of texture coord sets */
-
- RwInt32 numTriangles;
- RwInt32 numVertices;
-
- RwInt32 numMorphTargets;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/* Callbacks */
-
-/**
- * \ingroup rpgeometry
- * \ref RpGeometryCallBack represents the simple callback function for the \ref RpGeometry object.
- * The callback may return NULL to terminate further callbacks on
- * the geometry.
- *
- * \param geometry Pointer to the current geometry, supplied by iterator.
- * \param data Pointer to developer-defined data structure.
- *
- * \return
- */
-typedef RpGeometry *(*RpGeometryCallBack)(RpGeometry *geometry, void *data);
-
-/**
- * \ingroup rpgeometry
- * \ref RpGeometrySortByMaterialCallBack
- * \ref RpGeometrySortByMaterialCallBack is used by
- * \ref RpGeometrySortByMaterial in order to preserve the validity of plugin
- * data when the vertices in an \ref RpGeometry are sorted (and some possibly
- * duplicated).
- *
- * A vertex map table is provided to the callback - this contains, for each
- * vertex in the new geometry, the index of the corresponding vertex in the
- * original geometry.
- *
- * \param oldGeom Pointer to the source geometry.
- * \param newGeom Pointer to the new, sorted geometry.
- * \param remapTable Pointer to the vertex map table
- * \param numberOfEntries Number of vertices in the new
- * geometry (size of the map table)
- */
-typedef void (*RpGeometrySortByMaterialCallBack)(const RpGeometry *oldGeom,
- RpGeometry *newGeom,
- RwUInt16 *remapTable,
- RwUInt16 numberOfEntries);
-
-
-/****************************************************************************
- <macro/inline functionality
- */
-
-#define RpMorphTargetSetBoundingSphereMacro(_mt, _sphere) \
- (RwSphereAssign(&((_mt)->boundingSphere), (_sphere)), (_mt))
-
-#define RpMorphTargetGetBoundingSphereMacro(_mt) \
- (&((_mt)->boundingSphere))
-
-#define RpGeometryGetNumMorphTargetsMacro(_geometry) \
- ((_geometry)->numMorphTargets)
-
-#define RpGeometryGetMorphTargetMacro(_geometry, _index) \
- (&((_geometry)->morphTarget[(_index)]))
-
-#define RpGeometryGetPreLightColorsMacro(_geometry) \
- ((_geometry)->preLitLum)
-
-#define RpGeometryGetVertexTexCoordsMacro(_geometry, _uvIndex) \
- ((_geometry)->texCoords[(_uvIndex) - 1])
-
-#define RpGeometryGetNumTexCoordSetsMacro(_geometry) \
- ((_geometry)->numTexCoordSets)
-
-#define RpGeometryGetNumVerticesMacro(_geometry) \
- ((_geometry)->numVertices)
-
-#define RpMorphTargetGetVerticesMacro(_mt) \
- ((_mt)->verts)
-
-#define RpMorphTargetGetVertexNormalsMacro(_mt) \
- ((_mt)->normals)
-
-#define RpGeometryGetTrianglesMacro(_geometry) \
- ((_geometry)->triangles)
-
-#define RpGeometryGetNumTrianglesMacro(_geometry) \
- ((_geometry)->numTriangles)
-
-#define RpGeometryGetMaterialMacro(_geometry, _num) \
- (((_geometry)->matList.materials)[(_num)])
-
-#define RpGeometryGetNumMaterialsMacro(_geometry) \
- ((_geometry)->matList.numMaterials)
-
-#define RpGeometryGetFlagsMacro(_geometry) \
- ((_geometry)->flags)
-
-#define RpGeometrySetFlagsMacro(_geometry, _flags) \
- (((_geometry)->flags = (_flags)), (_geometry))
-
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpMorphTargetSetBoundingSphere(_geometry, _sphere) \
- RpMorphTargetSetBoundingSphereMacro(_geometry, _sphere)
-
-#define RpMorphTargetGetBoundingSphere(_geometry) \
- RpMorphTargetGetBoundingSphereMacro(_geometry)
-
-#define RpGeometryGetNumMorphTargets(_geometry) \
- RpGeometryGetNumMorphTargetsMacro(_geometry)
-
-#define RpGeometryGetMorphTarget(_geometry, _index) \
- RpGeometryGetMorphTargetMacro(_geometry, _index)
-
-#define RpGeometryGetPreLightColors(_geometry) \
- RpGeometryGetPreLightColorsMacro(_geometry)
-
-#define RpGeometryGetVertexTexCoords(_geometry, _uvIndex) \
- RpGeometryGetVertexTexCoordsMacro(_geometry, _uvIndex)
-
-#define RpGeometryGetNumTexCoordSets(_geometry) \
- RpGeometryGetNumTexCoordSetsMacro(_geometry)
-
-#define RpGeometryGetNumVertices(_geometry) \
- RpGeometryGetNumVerticesMacro(_geometry)
-
-#define RpMorphTargetGetVertices(_mt) \
- RpMorphTargetGetVerticesMacro(_mt)
-
-#define RpMorphTargetGetVertexNormals(_mt) \
- RpMorphTargetGetVertexNormalsMacro(_mt)
-
-#define RpGeometryGetTriangles(_geometry) \
- RpGeometryGetTrianglesMacro(_geometry)
-
-#define RpGeometryGetNumTriangles(_geometry) \
- RpGeometryGetNumTrianglesMacro(_geometry)
-
-#define RpGeometryGetMaterial(_geometry, _num) \
- RpGeometryGetMaterialMacro(_geometry, _num)
-
-#define RpGeometryGetNumMaterials(_geometry) \
- RpGeometryGetNumMaterialsMacro(_geometry)
-
-#define RpGeometryGetFlags(_geometry) \
- RpGeometryGetFlagsMacro(_geometry)
-
-#define RpGeometrySetFlags(_geometry, _flags) \
- RpGeometrySetFlagsMacro(_geometry, _flags)
-
-#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-/* Transforms geometry morph target vertices */
-
-extern RpGeometry *
-RpGeometryTransform(RpGeometry *geometry,
- const RwMatrix *matrix);
-
-/* Create geometry for a 'space' marker */
-
-extern RpGeometry *
-RpGeometryCreateSpace(RwReal radius);
-
-/* Morph targets - Accessing geometry contents */
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-extern RpMorphTarget *
-RpMorphTargetSetBoundingSphere(RpMorphTarget *morphTarget,
- const RwSphere *boundingSphere);
-
-extern RwSphere *
-RpMorphTargetGetBoundingSphere(RpMorphTarget *morphTarget);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-extern const RpMorphTarget *
-RpMorphTargetCalcBoundingSphere(const RpMorphTarget *morphTarget,
- RwSphere *boundingSphere);
-
-extern RwInt32
-RpGeometryAddMorphTargets(RpGeometry *geometry,
- RwInt32 mtcount);
-
-extern RwInt32
-RpGeometryAddMorphTarget(RpGeometry *geometry);
-
-extern RpGeometry *
-RpGeometryRemoveMorphTarget(RpGeometry *geometry,
- RwInt32 morphTarget);
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-extern RwInt32
-RpGeometryGetNumMorphTargets(const RpGeometry *geometry);
-
-extern RpMorphTarget *
-RpGeometryGetMorphTarget(const RpGeometry *geometry,
- RwInt32 morphTarget);
-
-extern RwRGBA *
-RpGeometryGetPreLightColors(const RpGeometry *geometry);
-
-extern RwTexCoords *
-RpGeometryGetVertexTexCoords(const RpGeometry *geometry,
- RwTextureCoordinateIndex uvIndex);
-
-extern RwInt32
-RpGeometryGetNumTexCoordSets(const RpGeometry *geometry);
-
-extern RwInt32
-RpGeometryGetNumVertices (const RpGeometry *geometry);
-
-extern RwV3d *
-RpMorphTargetGetVertices(const RpMorphTarget *morphTarget);
-
-extern RwV3d *
-RpMorphTargetGetVertexNormals(const RpMorphTarget *morphTarget);
-
-extern RpTriangle *
-RpGeometryGetTriangles(const RpGeometry *geometry);
-
-extern RwInt32
-RpGeometryGetNumTriangles(const RpGeometry *geometry);
-
-extern RpMaterial *
-RpGeometryGetMaterial(const RpGeometry *geometry,
- RwInt32 matNum);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-extern const RpGeometry *
-RpGeometryTriangleSetVertexIndices(const RpGeometry *geometry,
- RpTriangle *triangle,
- RwUInt16 vert1,
- RwUInt16 vert2,
- RwUInt16 vert3);
-
-extern RpGeometry *
-RpGeometryTriangleSetMaterial(RpGeometry *geometry,
- RpTriangle *triangle,
- RpMaterial *material);
-
-extern const RpGeometry *
-RpGeometryTriangleGetVertexIndices(const RpGeometry *geometry,
- const RpTriangle *triangle,
- RwUInt16 *vert1,
- RwUInt16 *vert2,
- RwUInt16 *vert3);
-
-extern RpMaterial *
-RpGeometryTriangleGetMaterial(const RpGeometry *geometry,
- const RpTriangle *triangle);
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-extern RwInt32
-RpGeometryGetNumMaterials(const RpGeometry *geometry);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-extern RpGeometry *
-RpGeometryForAllMaterials(RpGeometry *geometry,
- RpMaterialCallBack fpCallBack,
- void *pData);
-
-/* Accessing the inards of geometry */
-extern RpGeometry *
-RpGeometryLock(RpGeometry *geometry,
- RwInt32 lockMode);
-
-extern RpGeometry *
-RpGeometryUnlock(RpGeometry *geometry);
-
-extern const RpGeometry *
-RpGeometryForAllMeshes(const RpGeometry *geometry,
- RpMeshCallBack fpCallBack,
- void *pData);
-
-/* Creation and destruction */
-extern RpGeometry *
-RpGeometryCreate(RwInt32 numVert,
- RwInt32 numTriangles,
- RwUInt32 format);
-
-extern RwBool
-RpGeometryDestroy(RpGeometry *geometry);
-
-extern RpGeometry *
-_rpGeometryAddRef(RpGeometry *geometry);
-
-/* Attaching toolkits */
-extern RwInt32
-RpGeometryRegisterPlugin(RwInt32 size,
- RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-
-extern RwInt32
-RpGeometryRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack readCB,
- RwPluginDataChunkWriteCallBack writeCB,
- RwPluginDataChunkGetSizeCallBack getSizeCB);
-
-extern RwInt32
-RpGeometrySetStreamAlwaysCallBack(RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-
-extern RwInt32
-RpGeometryGetPluginOffset(RwUInt32 pluginID);
-
-extern RwBool
-RpGeometryValidatePlugins(const RpGeometry *geometry);
-
-/* Binary format */
-extern RwUInt32
-RpGeometryStreamGetSize(const RpGeometry *geometry);
-
-extern const RpGeometry *
-RpGeometryStreamWrite(const RpGeometry *geometry,
- RwStream *stream);
-
-extern RpGeometry *
-RpGeometryStreamRead(RwStream *stream);
-
-extern RpGeometryChunkInfo *
-_rpGeometryChunkInfoRead(RwStream *stream,
- RpGeometryChunkInfo *geometryChunkInfo,
- RwInt32 *bytesRead);
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-/* Flags */
-extern RwUInt32
-RpGeometryGetFlags(const RpGeometry *geometry);
-
-extern RpGeometry *
-RpGeometrySetFlags(RpGeometry *geometry,
- RwUInt32 flags);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define rpGeometryAddRef(_geometry) \
- _rpGeometryAddRef(_geometry)
-
-#define RpGeometryChunkInfoRead(stream, geometryChunkInfo, bytesRead) \
- _rpGeometryChunkInfoRead(stream, geometryChunkInfo, bytesRead)
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/baclump.h ---*/
-
-/*
- * Clump and atomic handling.
- * Clumps and atomics are the movable rendered objects in the world
- *
- * Copyright (c) 1998 Criterion Software Ltd.
- */
-
-
-/****************************************************************************
- Defines
- */
-
-/****************************** Object type ID ******************************/
-
-/* Type IDs */
-
-#define rpATOMIC 1
-#define rpCLUMP 2
-
-/* Interpolator flags */
-enum RpInterpolatorFlag
-{
- rpINTERPOLATORDIRTYINSTANCE = 0x01,
- rpINTERPOLATORDIRTYSPHERE = 0x02,
- rpINTERPOLATORNOFRAMEDIRTY = 0x04,
- rpINTERPOLATORFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpInterpolatorFlag rpInterpolatorFlag;
-
-/**
- * \ingroup rpatomic
- * The bit-field type RpAtomicFlag specifies the options available for
- * controlling the behavior of atomics. See API function \ref RpAtomicSetFlags.
- *
- * \see RpAtomicSetFlags
- * \see RpAtomicGetFlags
- * \see RpWorldSectorForAllCollisionAtomics
- */
-
-enum RpAtomicFlag
-{
- rpATOMICCOLLISIONTEST = 0x01, /**<A generic collision flag to indicate
- * that the atomic should be considered
- * in collision tests.
- */
- rpATOMICRENDER = 0x04, /**<The atomic is rendered if it is
- * in the view frustum.
- */
-
- rpATOMICFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpAtomicFlag RpAtomicFlag;
-
-/**
- * \ingroup rpatomic
- * \ref RpAtomicSetGeomFlag defines how an atomic references a new geometry
- *
- * \see RpAtomicSetGeometry
- */
-enum RpAtomicSetGeomFlag
-{
- rpATOMICSAMEBOUNDINGSPHERE = 0x01, /**<The bounding-sphere for the
- * new geometry is assumed to be the
- * same as the old one, if any, and
- * should not be recalculated.
- */
-
- rpATOMICSETGEOMFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpAtomicSetGeomFlag RpAtomicSetGeomFlag;
-
-enum RpAtomicPrivateFlag
-{
- rpATOMICPRIVATEWORLDBOUNDDIRTY = 0x01,
- rpATOMICPRIVATEFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpAtomicPrivateFlag rpAtomicPrivateFlag;
-
-
-/**
- * \ingroup rpatomic
- * \struct RpAtomic
- * Atomic Geometry object. This should be
- * considered an opaque type. Use the RpAtomic API functions to access.
- */
-typedef struct RpAtomic RpAtomic;
-
-/**
- * \ingroup rpinterpolator
- * \struct RpInterpolator
- * Morph Target Interpolator.
- * This should be considered an opaque type.
- * Use the RpInterpolator API functions to access.
- */
-typedef struct RpInterpolator RpInterpolator;
-
-#if (!defined(DOXYGEN))
-struct RpInterpolator
-{
- RwInt32 flags; /**< flags */
- RwInt16 startMorphTarget; /**< startMorphTarget */
- RwInt16 endMorphTarget; /**< endMorphTarget */
- RwReal time; /**< time */
- RwReal recipTime; /**< recipTime */
- RwReal position; /**< position */
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/* More callbacks */
-
-/**
- * \ingroup rpclump
- * \struct RpClump
- * Clump Geometry object. This should be
- * considered an opaque type. Use the RpClump API functions to access.
- */
-typedef struct RpClump RpClump;
-
-/**
- * \ingroup rpclump
- * \ref RpClumpCallBack represents the
- * function called from \ref RwCameraForAllClumpsInFrustum and
- * \ref RwCameraForAllClumpsNotInFrustum when a clump lies inside the current camera's
- * view frustum. It is also called from \ref RpWorldForAllClumps. This function should
- * return a pointer to the current clump to indicate success. The callback may return
- * NULL to terminate further callbacks on the clumps.
- *
- * \param clump Pointer to the current clump, supplied by
- * iterator.
- * \param data Pointer to developer-defined data structure.
- *
- * \return Pointer to the current clump.
- *
- * \see RpWorldForAllClumps
- * \see RpClumpGetCallBack
- * \see RpClumpSetCallBack
- * \see RwCameraForAllClumpsInFrustum
- * \see RwCameraForAllClumpsNotInFrustum
- */
-typedef RpClump *(*RpClumpCallBack) (RpClump * clump, void *data);
-
-#if (!defined(DOXYGEN))
-struct RpClump
-{
- RwObject object;
-
- /* Information about all the Atomics */
- RwLinkList atomicList;
-
- /* Lists of lights and cameras */
- RwLinkList lightList;
- RwLinkList cameraList;
-
- /* The clump in the world */
- RwLLLink inWorldLink;
-
- /* Clump callback */
- RpClumpCallBack callback;
-
- /* Render frame - used to prevent multiple invocations
- * of the clump frustum callback
- */
- RwUInt16 renderFrame;
- RwUInt16 pad;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpatomic
- * \ref RpAtomicCallBackRender represents the function called from
- * \ref RpAtomicRender when the specified atomic
- * lies inside the current camera's view frustum. The default callback
- * initiates execution of the atomic rendering pipeline. This function should
- * return a pointer to the atomic to indicate success.
- *
- * \param atomic Pointer to the current atomic, supplied by
- * iterator.
- *
- * \return Returns a pointer to the atomic to indicate success.
- *
- * \see RpAtomicRender
- */
-
-typedef RpAtomic *(*RpAtomicCallBackRender) (RpAtomic * atomic);
-
-#if (!defined(DOXYGEN))
-struct RpAtomic
-{
- RwObjectHasFrame object;
-
- /* Information for an instance */
- RwResEntry *repEntry;
-
- /* Triangles making the object */
- RpGeometry *geometry;
-
- /* Interpolated bounding sphere (in object space and world space) */
- RwSphere boundingSphere;
- RwSphere worldBoundingSphere;
-
- /* Connections to other atomics */
- RpClump *clump;
- RwLLLink inClumpLink;
-
- /* callbacks */
- RpAtomicCallBackRender renderCallBack;
-
- /* Interpolation animation pointer */
- RpInterpolator interpolator;
-
- /* Counter for checks of "render has occurred already" */
- RwUInt16 renderFrame;
- RwUInt16 pad;
-
- /* Connections to sectors */
- RwLinkList llWorldSectorsInAtomic;
-
- /* The Atomic object pipeline for this Atomic */
- RxPipeline *pipeline;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/**
- * \ingroup rpatomic
- * \ref RpAtomicCallBack represents the function called from \ref RpWorldSectorForAllAtomics and
- * \ref RpClumpForAllAtomics for all atomics in a given world sector or clump.
- * This function should return a pointer to the current atomic to indicate
- * success. The callback may return NULL to terminate further callbacks on
- * the world sector.
- *
- * \param atomic Pointer to the current atomic, supplied by
- * iterator.
- * \param data Pointer to developer-defined data structure.
- *
- * \return Returns a pointer to the current atomic
- */
-typedef RpAtomic *(*RpAtomicCallBack) (RpAtomic * atomic, void *data);
-
-typedef struct RpTie RpTie;
-
-/**
- * \ingroup rpatomic
- * \struct RpTie
- *
- * RpTie is a linked list of atomics inside world sectors. These are
- * created when frame hierarchies are updated as part of an \ref RwCameraBeginUpdate.
- * This is used for frustum culling atomics by world sector.
- * Creation and destruction of RpTies is internal to the world plugin.
- */
-struct RpTie
-{
- /* Information for an atomic sector */
- RwLLLink lAtomicInWorldSector; /**< Atomics IN this ATOMIC SECTOR */
- RpAtomic *apAtom; /**< An atomic */
-
- /* Information for a atomic */
- RwLLLink lWorldSectorInAtomic; /**< Atomic sectors HOLDING this atomic */
- RpWorldSector *worldSector; /**< A world sector */
-};
-
-typedef struct RpClumpChunkInfo RpClumpChunkInfo;
-typedef struct RpClumpChunkInfo _rpClump;
-typedef struct RpClumpChunkInfo33000 _rpClump33000;
-
-#if (!defined(DOXYGEN))
-struct RpClumpChunkInfo
-{
- RwInt32 numAtomics;
- RwInt32 numLights;
- RwInt32 numCameras;
-};
-
-struct RpClumpChunkInfo33000
-{
- RwInt32 numAtomics;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/****************************************************************************
- <macro/inline functionality
-
- */
-
-/* NB "RpAtomicRender(atom++) will break it */
-#define RpAtomicRenderMacro(_atomic) \
- ((_atomic)->renderCallBack(_atomic))
-
-#define RpAtomicGetGeometryMacro(_atomic) \
- ((_atomic)->geometry)
-
-#if (!defined(RpAtomicSetRenderCallBackMacro))
-
-/* NB "RpAtomicSetRenderCallBack(atom++, callback)" will break it */
-#define RpAtomicSetRenderCallBackMacro(_atomic, _callback) \
-MACRO_START \
-{ \
- (_atomic)->renderCallBack = (_callback); \
- if (!(_atomic)->renderCallBack) \
- { \
- (_atomic)->renderCallBack = AtomicDefaultRenderCallBack; \
- } \
-} \
-MACRO_STOP
-
-#endif /* (!defined(RpAtomicSetRenderCallBackMacro)) */
-
-#define RpAtomicGetRenderCallBackMacro(_atomic) \
- ((_atomic)->renderCallBack)
-
-#define RpAtomicGetInterpolatorMacro(_atomic) \
- (&((_atomic)->interpolator))
-
-#define RpInterpolatorGetStartMorphTargetMacro(_intrp) \
- ((_intrp)->startMorphTarget)
-
-#define RpInterpolatorGetEndMorphTargetMacro(_intrp) \
- ((_intrp)->endMorphTarget)
-
-#define RpInterpolatorGetValueMacro(_intrp) \
- ((_intrp)->position)
-
-#define RpInterpolatorGetScaleMacro(_intrp) \
- ((_intrp)->time)
-
-/* NB "RpInterpolatorSetStartMorphTarget(interp++, target)" will break it */
-#define RpInterpolatorSetStartMorphTargetMacro(_intrp, _target, _atomic)\
- ((_intrp)->startMorphTarget = (RwInt16) (_target), \
- (_intrp)->flags |= (RwInt32)(rpINTERPOLATORDIRTYINSTANCE | \
- rpINTERPOLATORDIRTYSPHERE ), \
- ((!((_intrp)->flags & rpINTERPOLATORNOFRAMEDIRTY))? \
- ((RpAtomicGetFrame(_atomic))? \
- (RwFrameUpdateObjects(RpAtomicGetFrame(_atomic))): \
- (0)): \
- (0)), \
- (_intrp))
-
-/* NB "RpInterpolatorSetEndMorphTarget(interp++, target)" will break it */
-#define RpInterpolatorSetEndMorphTargetMacro(_intrp, _target, _atomic) \
- ((_intrp)->endMorphTarget = (RwInt16) (_target), \
- (_intrp)->flags |= (RwInt32)(rpINTERPOLATORDIRTYINSTANCE | \
- rpINTERPOLATORDIRTYSPHERE ), \
- ((!((_intrp)->flags & rpINTERPOLATORNOFRAMEDIRTY))? \
- ((RpAtomicGetFrame(_atomic))? \
- (RwFrameUpdateObjects(RpAtomicGetFrame(_atomic))): \
- (0)): \
- (0)), \
- (_intrp))
-
-/* NB "RpInterpolatorSetValue(interp++, value)" will break it */
-#define RpInterpolatorSetValueMacro(_intrp, _value, _atomic) \
- ((_intrp)->position = (_value), \
- (_intrp)->flags |= (RwInt32)(rpINTERPOLATORDIRTYINSTANCE | \
- rpINTERPOLATORDIRTYSPHERE ), \
- ((!((_intrp)->flags & rpINTERPOLATORNOFRAMEDIRTY))? \
- ((RpAtomicGetFrame(_atomic))? \
- (RwFrameUpdateObjects(RpAtomicGetFrame(_atomic))): \
- (0)): \
- (0)), \
- (_intrp))
-
-/* NB "RpInterpolatorSetScale(interp++, *(scale++))" will break it */
-#define RpInterpolatorSetScaleMacro(_intrp, _scale, _atomic) \
- ((_intrp)->time = (_scale), \
- (_intrp)->recipTime = (RwReal) (1.0) / (_scale), \
- (_intrp)->flags |= (RwInt32)(rpINTERPOLATORDIRTYINSTANCE | \
- rpINTERPOLATORDIRTYSPHERE ), \
- ((!((_intrp)->flags & rpINTERPOLATORNOFRAMEDIRTY))? \
- ((RpAtomicGetFrame(_atomic))? \
- (RwFrameUpdateObjects(RpAtomicGetFrame(_atomic))): \
- (0)): \
- (0)), \
- (_intrp))
-
-#define RpAtomicGetClumpMacro(_atomic) \
- ((_atomic)->clump)
-
-/* NB "RpAtomicGetBoundingSphere(atomic++)" will break it */
-#define RpAtomicGetBoundingSphereMacro(_atomic) \
- ((((_atomic)->interpolator.flags & rpINTERPOLATORDIRTYSPHERE)? \
- _rpAtomicResyncInterpolatedSphere(_atomic), 0: 0), \
- &((_atomic)->boundingSphere))
-#define RpAtomicGetFrameMacro(_atomic) \
- ((RwFrame *) rwObjectGetParent(_atomic))
-
-/* NB "RpClumpSetFrame(clump++, frame)" will break it */
-#if (!defined(RpClumpSetFrameMacro))
-#define RpClumpSetFrameMacro(_clump, _frame) \
- (rwObjectSetParent(_clump, _frame), \
- (_clump))
-#endif /* (!defined(RpClumpSetFrameMacro)) */
-
-#if (!defined(RpClumpSetFrameVoidMacro))
-#define RpClumpSetFrameVoidMacro(_clump, _frame) \
-MACRO_START \
-{ \
- rwObjectSetParent(_clump, _frame); \
-} \
-MACRO_STOP
-#endif /* (!defined(RpClumpSetFrameVoidMacro)) */
-
-#define RpClumpGetFrameMacro(_clump) \
- ((RwFrame *) rwObjectGetParent(_clump))
-
-/* NB "RpAtomicSetFlags(atomic++, flags)" will break it */
-#if (!defined(RpAtomicSetFlagsMacro))
-#define RpAtomicSetFlagsMacro(_atomic, _flags) \
- (rwObjectSetFlags(_atomic, _flags), \
- (_atomic))
-#endif /* (!defined(RpAtomicSetFlagsMacro)) */
-
-#define RpAtomicGetFlagsMacro(_atomic) \
- (rwObjectGetFlags(_atomic))
-
-#if (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ))
-
-#define RpAtomicRender(_atomic) \
- RpAtomicRenderMacro(_atomic)
-
-#define RpAtomicGetGeometry(_atomic) \
- RpAtomicGetGeometryMacro(_atomic)
-
-#define RpAtomicSetRenderCallBack(_atomic, _callback) \
- RpAtomicSetRenderCallBackMacro(_atomic, _callback)
-
-#define RpAtomicGetRenderCallBack(_atomic) \
- RpAtomicGetRenderCallBackMacro(_atomic)
-
-#define RpAtomicGetInterpolator(_atomic) \
- RpAtomicGetInterpolatorMacro(_atomic)
-
-#define RpInterpolatorGetStartMorphTarget(_intrp) \
- RpInterpolatorGetStartMorphTargetMacro(_intrp)
-
-#define RpInterpolatorGetEndMorphTarget(_intrp) \
- RpInterpolatorGetEndMorphTargetMacro(_intrp)
-
-#define RpInterpolatorGetValue(_intrp) \
- RpInterpolatorGetValueMacro(_intrp)
-
-#define RpInterpolatorGetScale(_intrp) \
- RpInterpolatorGetScaleMacro(_intrp)
-
-#define RpInterpolatorSetStartMorphTarget(_intrp, _target, _atomic) \
- RpInterpolatorSetStartMorphTargetMacro(_intrp, _target, _atomic)
-
-#define RpInterpolatorSetEndMorphTarget(_intrp, _target, _atomic) \
- RpInterpolatorSetEndMorphTargetMacro(_intrp, _target, _atomic)
-
-#define RpInterpolatorSetValue(_intrp, _value, _atomic) \
- RpInterpolatorSetValueMacro(_intrp, _value, _atomic)
-
-#define RpInterpolatorSetScale(_intrp, _scale, _atomic) \
- RpInterpolatorSetScaleMacro(_intrp, _scale, _atomic)
-
-#define RpAtomicGetClump(_atomic) \
- RpAtomicGetClumpMacro(_atomic)
-
-#define RpAtomicGetBoundingSphere(_atomic) \
- RpAtomicGetBoundingSphereMacro(_atomic)
-
-#define RpAtomicGetFrame(_atomic) \
- RpAtomicGetFrameMacro(_atomic)
-
-#define RpClumpSetFrame(_clump, _frame) \
- RpClumpSetFrameMacro(_clump, _frame)
-
-#define RpClumpGetFrame(_clump) \
- RpClumpGetFrameMacro(_clump)
-
-#define RpAtomicSetFlags(_atomic, _flags) \
- RpAtomicSetFlagsMacro(_atomic, _flags)
-
-#define RpAtomicGetFlags(_atomic) \
- RpAtomicGetFlagsMacro(_atomic)
-
-#endif /* (! ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )) */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-extern void
-RpAtomicSetFreeListCreateParams( RwInt32 blockSize, RwInt32 numBlocksToPrealloc );
-
-extern void
-RpClumpSetFreeListCreateParams( RwInt32 blockSize, RwInt32 numBlocksToPrealloc );
-
-/* Macro version of RpAtomicSetRenderCallBack needs this */
-extern RpAtomic *
-AtomicDefaultRenderCallBack(RpAtomic * atomic);
-
-extern void
-_rpAtomicResyncInterpolatedSphere(RpAtomic * atomic);
-
-extern const RwSphere *
-RpAtomicGetWorldBoundingSphere(RpAtomic * atomic);
-
-/* Enumeration */
-extern RpClump *
-RpClumpForAllAtomics(RpClump * clump,
- RpAtomicCallBack callback,
- void *pData);
-
-extern RpClump *
-RpClumpForAllLights(RpClump * clump,
- RpLightCallBack callback,
- void *pData);
-
-extern RpClump *
-RpClumpForAllCameras(RpClump * clump,
- RwCameraCallBack callback,
- void *pData);
-
-/* Frames */
-extern RpAtomic *
-RpAtomicSetFrame(RpAtomic * atomic,
- RwFrame * frame);
-
-/* Create a space marking clump */
-extern RpClump *
-RpClumpCreateSpace(const RwV3d * position,
- RwReal radius);
-
-/* Instancing and rendering */
-extern RpClump *
-RpClumpRender(RpClump * clump);
-
-extern RpClump *
-RpClumpRemoveAtomic(RpClump * clump,
- RpAtomic * atomic);
-
-extern RpClump *
-RpClumpAddAtomic(RpClump * clump,
- RpAtomic * atomic);
-
-extern RpClump *
-RpClumpRemoveLight(RpClump * clump,
- RpLight * light);
-
-extern RpClump *
-RpClumpAddLight(RpClump * clump,
- RpLight * light);
-
-extern RpClump *
-RpClumpRemoveCamera(RpClump * clump,
- RwCamera * camera);
-
-extern RpClump *
-RpClumpAddCamera(RpClump * clump,
- RwCamera * camera);
-
-/* Creation and destruction of clumps */
-extern RwBool
-RpClumpDestroy(RpClump * clump);
-
-extern RpClump *
-RpClumpCreate(void);
-
-extern RpClump *
-RpClumpClone(RpClump * clump);
-
-/* Creation and destruction of atomics*/
-extern RwBool
-RpAtomicDestroy(RpAtomic * atomic);
-
-extern RpAtomic *
-RpAtomicClone(RpAtomic * atomic);
-
-extern RpAtomic *
-RpAtomicCreate(void);
-
-/* Setting and getting geometry for an atomic */
-extern RpAtomic *
-RpAtomicSetGeometry(RpAtomic * atomic,
- RpGeometry * geometry,
- RwUInt32 flags);
-
-/* Frustum callbacks */
-extern RpClump *
-RpClumpSetCallBack(RpClump * clump,
- RpClumpCallBack callback);
-
-extern RpClumpCallBack
-RpClumpGetCallBack(const RpClump * clump);
-
-/* The number of atomics in a clump */
-extern RwInt32
-RpClumpGetNumAtomics(RpClump * clump);
-
-extern RwInt32
-RpClumpGetNumLights(RpClump * clump);
-
-extern RwInt32
-RpClumpGetNumCameras(RpClump * clump);
-
-/* Light and camera extensions */
-extern RpClump *
-RpLightGetClump(const RpLight *light);
-
-extern RpClump *
-RwCameraGetClump(const RwCamera *camera);
-
-/* Binary format */
-extern RwUInt32
-RpAtomicStreamGetSize(RpAtomic * atomic);
-
-extern RpAtomic *
-RpAtomicStreamRead(RwStream * stream);
-
-extern RpAtomic *
-RpAtomicStreamWrite(RpAtomic * atomic,
- RwStream * stream);
-
-extern RwUInt32
-RpClumpStreamGetSize(RpClump * clump);
-
-extern RpClump *
-RpClumpStreamRead(RwStream * stream);
-
-extern RpClump *
-RpClumpStreamWrite(RpClump * clump,
- RwStream * stream);
-
-extern RpClumpChunkInfo *
-_rpClumpChunkInfoRead(RwStream * stream,
- RpClumpChunkInfo * clumpChunkInfo,
- RwInt32 * bytesRead);
-
-/* Attaching toolkits */
-extern RwInt32
-RpAtomicRegisterPlugin(RwInt32 size,
- RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-
-extern RwInt32
-RpClumpRegisterPlugin(RwInt32 size,
- RwUInt32 pluginID,
- RwPluginObjectConstructor constructCB,
- RwPluginObjectDestructor destructCB,
- RwPluginObjectCopy copyCB);
-
-extern RwInt32
-RpAtomicRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack
- readCB,
- RwPluginDataChunkWriteCallBack
- writeCB,
- RwPluginDataChunkGetSizeCallBack
- getSizeCB);
-
-extern RwInt32
-RpAtomicSetStreamAlwaysCallBack(RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-
-extern RwInt32
-RpAtomicSetStreamRightsCallBack(RwUInt32 pluginID,
- RwPluginDataChunkRightsCallBack rightsCB);
-
-extern RwInt32
-RpClumpRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack readCB,
- RwPluginDataChunkWriteCallBack writeCB,
- RwPluginDataChunkGetSizeCallBack getSizeCB);
-
-extern RwInt32
-RpClumpSetStreamAlwaysCallBack(RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-
-extern RwInt32
-RpAtomicGetPluginOffset(RwUInt32 pluginID);
-
-extern RwInt32
-RpClumpGetPluginOffset(RwUInt32 pluginID);
-
-extern RwBool
-RpAtomicValidatePlugins(const RpAtomic * atomic);
-
-extern RwBool
-RpClumpValidatePlugins(const RpClump * clump);
-
-#if ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) )
-extern RwFrame *
-RpAtomicGetFrame(const RpAtomic * atomic);
-
-extern RwFrame *
-RpClumpGetFrame(const RpClump * clump);
-
-extern RpClump *
-RpClumpSetFrame(RpClump * clump,
- RwFrame * frame);
-
-/* Flags */
-extern RpAtomic *
-RpAtomicSetFlags(RpAtomic * atomic,
- RwUInt32 flags);
-
-extern RwUInt32
-RpAtomicGetFlags(const RpAtomic * atomic);
-
-extern RwSphere *
-RpAtomicGetBoundingSphere(RpAtomic * atomic);
-
-extern RwInt32
-RpInterpolatorGetEndMorphTarget(const RpInterpolator * interpolator);
-
-extern RwInt32
-RpInterpolatorGetStartMorphTarget(const RpInterpolator * interpolator);
-
-extern RwReal
-RpInterpolatorGetValue(const RpInterpolator * interpolator);
-
-extern RwReal
-RpInterpolatorGetScale(const RpInterpolator * interpolator);
-
-extern RpInterpolator *
-RpInterpolatorSetEndMorphTarget(RpInterpolator * interpolator,
- RwInt32 morphTarget,
- RpAtomic * atomic);
-
-extern RpInterpolator *
-RpInterpolatorSetStartMorphTarget(RpInterpolator * interpolator,
- RwInt32 morphTarget,
- RpAtomic * atomic);
-
-extern RpInterpolator *
-RpInterpolatorSetValue(RpInterpolator * interpolator,
- RwReal value,
- RpAtomic *atomic);
-
-extern RpInterpolator *
-RpInterpolatorSetScale(RpInterpolator * interpolator,
- RwReal scale,
- RpAtomic *atomic);
-
-extern RpAtomic *
-RpAtomicRender(RpAtomic * atomic);
-
-/* Building clumps */
-extern RpClump *
-RpAtomicGetClump(const RpAtomic * atomic);
-
-extern RpInterpolator *
-RpAtomicGetInterpolator(RpAtomic * atomic);
-
-extern RpGeometry *
-RpAtomicGetGeometry(const RpAtomic * atomic);
-
-extern void
-RpAtomicSetRenderCallBack(RpAtomic * atomic,
- RpAtomicCallBackRender callback);
-
-extern RpAtomicCallBackRender
-RpAtomicGetRenderCallBack(const RpAtomic * atomic);
-
-#endif
-
-/* ( defined(RWDEBUG) || defined(RWSUPPRESSINLINE) ) */
-
-extern RwBool RpAtomicInstance(RpAtomic *atomic);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define RpClumpChunkInfoRead(stream, clumpChunkInfo, bytesRead) \
- _rpClumpChunkInfoRead(stream, clumpChunkInfo, bytesRead)
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/baworld.h ---*/
-
-/*
- * World handling.
- * World give objects scope, and provide a mechanism for
- * efficiency static object rendering.
- *
- * Copyright (c) 1998 Criterion Software Ltd.
- *
- */
-
-/****************************************************************************
- Defines
- */
-
-/* Type ID */
-#define rpWORLD 7
-
-/* RpWorld private flags (in RwObject) */
-enum RpWorldPrivateFlag
-{
- rpWORLDSINGLEMALLOC = 0x01,
- rpWORLDPRIVATEFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpWorldPrivateFlag RpWorldPrivateFlag;
-
-/**
- * \ingroup rpworldsub
- * The bit-field type \ref RpWorldFlag specifies the options available
- * for creating the static geometry component of a world (see API function \ref RpWorldSetFlags):
- */
-enum RpWorldFlag
-{
- rpWORLDTRISTRIP = 0x01, /**<This world's meshes can be rendered
- as tri strips */
- rpWORLDPOSITIONS = 0x02, /**<This world has positions */
- rpWORLDTEXTURED = 0x04, /**<This world has only one set of texture coordinates */
- rpWORLDPRELIT = 0x08, /**<This world has luminance values */
- rpWORLDNORMALS = 0x10, /**<This world has normals */
- rpWORLDLIGHT = 0x20, /**<This world will be lit */
- rpWORLDMODULATEMATERIALCOLOR = 0x40,
- /**<Modulate material color with vertex colors
- (pre-lit + lit) */
- rpWORLDTEXTURED2 = 0x80, /**<This world has 2 or more sets of texture coordinates */
-
- /*
- * These above flags were stored in the flags field in an RwObject, they
- * are now stored in the flags file of the RpWorld.
- */
-
- rpWORLDNATIVE = 0x01000000,
- rpWORLDNATIVEINSTANCE = 0x02000000,
-
- rpWORLDFLAGSMASK = 0x000000FF,
- rpWORLDNATIVEFLAGSMASK = 0x0F000000,
-
- rpWORLDSECTORSOVERLAP = 0x40000000,
-
- rpWORLDFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpWorldFlag RpWorldFlag;
-
-/* Multi texture coordinate format specifier */
-#define rpWORLDTEXCOORDSETS(_num) ((_num & 0xff) << 16)
-
-/* Maximum depth of BSP tree */
-#define rpWORLDMAXBSPDEPTH 64
-
-
-/* macro/inline functionality */
-#define RpWorldGetBBoxMacro(_world) \
- (&((_world)->boundingBox))
-
-#define RpWorldGetOriginMacro(_world) \
- (&((_world)->worldOrigin))
-
-#define RpWorldGetNumMaterialsMacro(_world) \
- ((_world)->matList.numMaterials)
-
-#define RpWorldGetMaterialMacro(_world, _num) \
- (((_world)->matList.materials)[(_num)])
-
-#define RpWorldGetNumClumpsMacro(_world) \
- ((_world)->numClumpsInWorld)
-
-#define RpWorldSetRenderOrderMacro(_world, _renderOrder) \
- (((_world)->renderOrder = _renderOrder), (_world))
-
-#define RpWorldGetRenderOrderMacro(_world) \
- ((_world)->renderOrder)
-
-#define RpWorldSetFlagsMacro(_world, _flags) \
- (((_world)->flags = (_flags)), (_world))
-
-#define RpWorldGetFlagsMacro(_world) \
- ((_world)->flags)
-
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpWorldGetBBox(_world) \
- RpWorldGetBBoxMacro(_world)
-
-#define RpWorldGetOrigin(_world) \
- RpWorldGetOriginMacro(_world)
-
-#define RpWorldGetNumMaterials(_world) \
- RpWorldGetNumMaterialsMacro(_world)
-
-#define RpWorldGetMaterial(_world, _num) \
- RpWorldGetMaterialMacro(_world, _num)
-
-#define RpWorldGetNumClumps(_world) \
- RpWorldGetNumClumpsMacro(_world)
-
-#define RpWorldSetRenderOrder(_world, _renderOrder) \
- RpWorldSetRenderOrderMacro(_world, _renderOrder)
-
-#define RpWorldGetRenderOrder(_world) \
- RpWorldGetRenderOrderMacro(_world)
-
-#define RpWorldSetFlags(_world, _flags) \
- RpWorldSetFlagsMacro(_world, _flags)
-
-#define RpWorldGetFlags(_world) \
- RpWorldGetFlagsMacro(_world)
-
-#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-
-/****************************************************************************
- Global types
- */
-
-
-/**
- * \ingroup rpworldsub
- * \ref RpWorldRenderOrder
- * represents the options available for
- * the rendering order of world sectors in the camera's view frustum (see
- * API function \ref RpWorldSetRenderOrder).
- */
-enum RpWorldRenderOrder
-{
- rpWORLDRENDERNARENDERORDER = 0,
- rpWORLDRENDERFRONT2BACK, /**<Renders nearest sectors first */
- rpWORLDRENDERBACK2FRONT, /**<Renders furthest sectors first */
- rpWORLDRENDERORDERFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
-};
-typedef enum RpWorldRenderOrder RpWorldRenderOrder;
-
-/**
- * \ingroup rpworldsector
- * \ref RpWorldSectorCallBackRender represents the function called from
- * \ref RpWorldSectorRender when the specified world sector lies inside the
- * current camera's view frustum. The default callback initiates execution of
- * the world sector rendering pipeline. This function should return a pointer
- * to the world sector to indicate success
- *
- * \param worldSector Pointer to the world sector to be
- * rendered
- *
- * \return Pointer to the world sector.
- *
- */
-typedef RpWorldSector *(*RpWorldSectorCallBackRender) (RpWorldSector *
- worldSector);
-
-/**
- * \ingroup rpworldsub
- * \struct RpWorld
- * World object. This should be considered an opaque type.
- * Use the RpWorld API functions to access.
- */
-typedef struct RpWorld RpWorld;
-
-#if (!defined(DOXYGEN))
-struct RpWorld
-{
- RwObject object;
-
- RwUInt32 flags;
-
- RpWorldRenderOrder renderOrder;
-
- /* Materials */
- RpMaterialList matList;
-
- /* The world stored as a BSP tree */
- RpSector *rootSector;
-
- /* The number of texture coordinate sets in each sector */
- RwInt32 numTexCoordSets;
-
- /* Render frame used when last rendered */
- RwInt32 numClumpsInWorld;
- RwLLLink *currentClumpLink;
-
- /* All the clumps in the world */
- RwLinkList clumpList;
-
- /* All of the lights in the world */
- RwLinkList lightList;
-
- /* Directional lights in the world */
- RwLinkList directionalLightList;
-
- /* The worlds origin offset */
- RwV3d worldOrigin;
-
- /* Bounding box around the whole world */
- RwBBox boundingBox;
-
- /* The callbacks functions */
- RpWorldSectorCallBackRender renderCallBack;
-
- RxPipeline *pipeline;
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/****************************************************************************
- Global Variables
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RwPluginRegistry worldTKList;
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RwBool _rpWorldFindBBox(RpWorld * world,
- RwBBox * boundingBox);
-
-/* Generate sector bounding boxes from BSP planes (not tight boxes) */
-extern RpWorld *_rpWorldSetupSectorBoundingBoxes(RpWorld *world);
-
-
-/* These stealth-API */
-extern RwBool _rpWorldForAllGlobalLights(RpLightCallBack callBack,
- void *pData);
-extern RpWorldSector *_rpWorldSectorForAllLocalLights(RpWorldSector *
- sector,
- RpLightCallBack
- callBack,
- void *pData);
-
-extern RpWorldSector *_rpSectorDefaultRenderCallBack(RpWorldSector *
- sector);
-
-/* Accessing worlds geometry */
-extern RpWorld *RpWorldLock(RpWorld * world);
-extern RpWorld *RpWorldUnlock(RpWorld * world);
-
-/* Managing a list of the worlds */
-extern void _rpWorldRegisterWorld(RpWorld * world,
- RwUInt32 memorySize);
-extern void _rpWorldUnregisterWorld(RpWorld * world);
-
-/* Hook into world management */
-extern RwBool RpWorldPluginAttach(void);
-
-/* Enumerating objects in the world */
-extern RpWorld *RpWorldForAllClumps(RpWorld * world,
- RpClumpCallBack fpCallBack,
- void *pData);
-extern RpWorld *RpWorldForAllMaterials(RpWorld * world,
- RpMaterialCallBack fpCallBack,
- void *pData);
-extern RpWorld *RpWorldForAllLights(RpWorld * world,
- RpLightCallBack fpCallBack,
- void *pData);
-extern RpWorld *RpWorldForAllWorldSectors(RpWorld * world,
- RpWorldSectorCallBack
- fpCallBack, void *pData);
-
-/* Rendering */
-extern RpWorld *RpWorldRender(RpWorld * world);
-
-/* Creation/destruction */
-extern RwBool RpWorldDestroy(RpWorld * world);
-extern RpWorld *RpWorldCreate(RwBBox * boundingBox);
-extern RwBool RpWorldInstance(RpWorld *world);
-
-/* Sector callbacks */
-extern RpWorld *RpWorldSetSectorRenderCallBack(RpWorld * world,
- RpWorldSectorCallBackRender
- fpCallBack);
-extern RpWorldSectorCallBackRender RpWorldGetSectorRenderCallBack(const
- RpWorld
- *
- world);
-
-/* Getting world from sector */
-extern RpWorld *RpWorldSectorGetWorld(const RpWorldSector * sector);
-
-extern RwInt32 RpWorldRegisterPlugin(RwInt32 size, RwUInt32 pluginID,
- RwPluginObjectConstructor
- constructCB,
- RwPluginObjectDestructor
- destructCB,
- RwPluginObjectCopy copyCB);
-extern RwInt32 RpWorldRegisterPluginStream(RwUInt32 pluginID,
- RwPluginDataChunkReadCallBack
- readCB,
- RwPluginDataChunkWriteCallBack
- writeCB,
- RwPluginDataChunkGetSizeCallBack
- getSizeCB);
-extern RwInt32 RpWorldSetStreamAlwaysCallBack(
- RwUInt32 pluginID,
- RwPluginDataChunkAlwaysCallBack alwaysCB);
-extern RwInt32 RpWorldSetStreamRightsCallBack(RwUInt32 pluginID,
- RwPluginDataChunkRightsCallBack rightsCB);
-extern RwInt32 RpWorldGetPluginOffset(RwUInt32 pluginID);
-extern RwBool RpWorldValidatePlugins(RpWorld * world);
-
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-/* Getting/setting */
-extern const RwBBox *RpWorldGetBBox(const RpWorld *world);
-extern const RwV3d *RpWorldGetOrigin(const RpWorld *world);
-
-/* Accessing a worlds materials */
-extern RwInt32 RpWorldGetNumMaterials(const RpWorld *world);
-extern RpMaterial *RpWorldGetMaterial(const RpWorld *world, RwInt32 matNum);
-
-/* Clumps */
-extern RwInt32 RpWorldGetNumClumps(RpWorld *world);
-
-/* Render order */
-extern RpWorld *RpWorldSetRenderOrder(RpWorld *world,
- RpWorldRenderOrder renderOrder);
-extern RpWorldRenderOrder RpWorldGetRenderOrder(const RpWorld *world);
-
-/* Flags */
-extern RpWorld *RpWorldSetFlags(RpWorld *world, RwUInt32 flags);
-extern RwUInt32 RpWorldGetFlags(const RpWorld *world);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define rpWorldFindBBox(_world, _boundingBox) \
- _rpWorldFindBBox(_world, _boundingBox)
-
-#define rpWorldForAllGlobalLights(_callBack, _pData) \
- _rpWorldForAllGlobalLights(_callBack, _pData)
-
-#define rpWorldSectorForAllLocalLights(_sector, _callBack, _pData) \
- _rpWorldSectorForAllLocalLights(_sector, _callBack, _pData)
-
-#define _rpWorldLock(_world) \
- RpWorldLock(_world)
-
-#define _rpWorldUnlock(_world) \
- RpWorldUnlock(_world)
-
-#define rpWorldLock(_world) \
- RpWorldLock(_world)
-
-#define rpWorldUnlock(_world) \
- RpWorldUnlock(_world)
-
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/d3d8/D3D8pipe.h ---*/
-
-typedef struct RxD3D8ResEntryHeader RxD3D8ResEntryHeader;
-/**
- * \ingroup worldextensionsd3d8
- * \struct RxD3D8ResEntryHeader
- * This structure contains D3D8 resource specific components.
- */
-struct RxD3D8ResEntryHeader
-{
- RwUInt16 serialNumber; /**< The mesh headers serial number */
- RwUInt16 numMeshes; /**< The number of meshes */
-};
-
-/* This is what I keep in memory as part of the instance data setup */
-typedef struct RxD3D8InstanceData RxD3D8InstanceData;
-/**
- * \ingroup worldextensionsd3d8
- * \struct RxD3D8InstanceData
- * This structure contains D3D8 resource specific components.
- */
-struct RxD3D8InstanceData
-{
- RwUInt32 minVert; /**< The vertex index where the
- meshes vertices begin. Needed for
- reinstancing, not for rendering */
-
- RwInt32 stride; /**< Stride of vertex */
-
- RwInt32 numVertices; /**< Number of vertices in the vertex buffer */
- RwInt32 numIndices; /**< Number of indices to render the primitive */
-
- RpMaterial *material; /**< The material for this instanced data */
-
- RwUInt32 vertexShader; /**< Vertex shader or FVF flags */
-
- RwUInt32 primType; /**< Primitive type */
-
- void *indexBuffer; /**< Index buffer */
- void *vertexBuffer; /**< Vertex buffer */
-
- RwUInt32 baseIndex; /**< Needed if we share the vertex buffer */
-
- RwUInt8 vertexAlpha; /**< The prelight data contains alpha */
- RwUInt8 managed; /**< Created by the Vertex Buffer Manager */
- RwUInt8 remapped; /**< Vertices where remapped to save VB space */
-};
-
-/**
- * \ingroup worldextensionsd3d8
- * \ref RxD3D8AllInOneInstanceCallBack callback function.
- *
- * \param object Pointer to the object.
- * \param instancedData Pointer to \ref RxD3D8InstanceData.
- * \param reinstance Boolean whether to reinstance.
- *
- * \see RxD3D8AllInOneSetInstanceCallBack
- * \see RxD3D8AllInOneGetInstanceCallBack
- * \see RxNodeDefinitionGetD3D8AtomicAllInOne
- * \see RxNodeDefinitionGetD3D8WorldSectorAllInOne
- */
-typedef RwBool (*RxD3D8AllInOneInstanceCallBack)(void *object,
- RxD3D8InstanceData *instancedData,
- RwBool reinstance);
-
-/**
- * \ingroup worldextensionsd3d8
- * \ref RxD3D8AllInOneReinstanceCallBack callback function.
- *
- * \param object Pointer to the object.
- * \param meshHeader Const pointer to \ref RpMeshHeader.
- * \param resEntry Pointer to \ref RxD3D8ResEntryHeader.
- * \param instanceCallback Pointer to \ref RxD3D8AllInOneInstanceCallBack.
- *
- * \see RxD3D8AllInOneSetReinstanceCallBack
- * \see RxD3D8AllInOneGetReinstanceCallBack
- * \see RxNodeDefinitionGetD3D8AtomicAllInOne
- * \see RxNodeDefinitionGetD3D8WorldSectorAllInOne
- */
-typedef RwBool (*RxD3D8AllInOneReinstanceCallBack)(void *object,
- RwResEntry *resEntry,
- const RpMeshHeader *meshHeader,
- RxD3D8AllInOneInstanceCallBack instanceCallback);
-
-/**
- * \ingroup worldextensionsd3d8
- * \ref RxD3D8AllInOneLightingCallBack callback function.
- *
- * \param object Void pointer to the object.
- *
- * \see RxD3D8AllInOneSetLightingCallBack
- * \see RxD3D8AllInOneGetLightingCallBack
- * \see RxNodeDefinitionGetD3D8AtomicAllInOne
- * \see RxNodeDefinitionGetD3D8WorldSectorAllInOne
- */
-typedef void (*RxD3D8AllInOneLightingCallBack)(void *object);
-
-/**
- * \ingroup worldextensionsd3d8
- * \ref RxD3D8AllInOneRenderCallBack callback function.
- *
- * \param repEntry Pointer to a resource entry.
- * \param object Pointer to a object that the resource entry belongs to.
- * \param type rpATOMIC or rwSECTORATOMIC.
- * \param flags \ref RpGeometryFlag's or \ref RpWorldFlag's.
- *
- * \see RxD3D8AllInOneSetRenderCallBack
- * \see RxD3D8AllInOneGetRenderCallBack
- * \see RxNodeDefinitionGetD3D8AtomicAllInOne
- * \see RxNodeDefinitionGetD3D8WorldSectorAllInOne
- */
-typedef void (*RxD3D8AllInOneRenderCallBack)(RwResEntry *repEntry,
- void *object,
- RwUInt8 type,
- RwUInt32 flags);
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-extern void
-RxD3D8AllInOneSetInstanceCallBack(RxPipelineNode *node,
- RxD3D8AllInOneInstanceCallBack callback);
-
-extern RxD3D8AllInOneInstanceCallBack
-RxD3D8AllInOneGetInstanceCallBack(RxPipelineNode *node);
-
-extern void
-RxD3D8AllInOneSetReinstanceCallBack(RxPipelineNode *node,
- RxD3D8AllInOneReinstanceCallBack callback);
-
-extern RxD3D8AllInOneReinstanceCallBack
-RxD3D8AllInOneGetReinstanceCallBack(RxPipelineNode *node);
-
-extern void
-RxD3D8AllInOneSetLightingCallBack(RxPipelineNode *node,
- RxD3D8AllInOneLightingCallBack callback);
-
-extern RxD3D8AllInOneLightingCallBack
-RxD3D8AllInOneGetLightingCallBack(RxPipelineNode *node);
-
-extern void
-RxD3D8AllInOneSetRenderCallBack(RxPipelineNode *node,
- RxD3D8AllInOneRenderCallBack callback);
-
-extern RxD3D8AllInOneRenderCallBack
-RxD3D8AllInOneGetRenderCallBack(RxPipelineNode *node);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/*--- Automatically derived from: C:/daily/rwsdk/world/pipe/p2/bapipew.h ---*/
-
-#define RpWorldGetDefaultSectorPipelineMacro() \
- (RXPIPELINEGLOBAL(currentWorldSectorPipeline))
-
-#define RpWorldSetSectorPipelineMacro(_world, _pipeline) \
- ( ((_world)->pipeline = _pipeline), _world )
-
-#define RpWorldGetSectorPipelineMacro(_world, _pipeline) \
- ( (*(_pipeline) = (_world)->pipeline), _world )
-
-#define RpWorldSectorSetPipelineMacro(_sector, _pipeline) \
- ( ((_sector)->pipeline = _pipeline), _sector )
-
-#define RpWorldSectorGetPipelineMacro(_sector, _pipeline) \
- ( (*(_pipeline) = (_sector)->pipeline), _sector )
-
-#define RpAtomicGetDefaultPipelineMacro() \
- (RXPIPELINEGLOBAL(currentAtomicPipeline))
-
-#define RpAtomicSetPipelineMacro(_atomic, _pipeline) \
- ( ((_atomic)->pipeline = _pipeline), _atomic )
-
-#define RpAtomicGetPipelineMacro(_atomic, _pipeline) \
- ( (*(_pipeline) = (_atomic)->pipeline), _atomic )
-
-#define RpMaterialGetDefaultPipelineMacro() \
- (RXPIPELINEGLOBAL(currentMaterialPipeline))
-
-#define RpMaterialSetPipelineMacro(_material, _pipeline) \
- ( ((_material)->pipeline = _pipeline), _material )
-
-#define RpMaterialGetPipelineMacro(_material, _pipeline) \
- ( (*(_pipeline) = (_material)->pipeline), _material )
-
-
-#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-#define RpWorldGetDefaultSectorPipeline RpWorldGetDefaultSectorPipelineMacro
-#define RpWorldSetSectorPipeline RpWorldSetSectorPipelineMacro
-#define RpWorldGetSectorPipeline RpWorldGetSectorPipelineMacro
-#define RpWorldSectorSetPipeline RpWorldSectorSetPipelineMacro
-#define RpWorldSectorGetPipeline RpWorldSectorGetPipelineMacro
-
-#define RpAtomicGetDefaultPipeline RpAtomicGetDefaultPipelineMacro
-#define RpAtomicSetPipeline RpAtomicSetPipelineMacro
-#define RpAtomicGetPipeline RpAtomicGetPipelineMacro
-
-#define RpMaterialGetDefaultPipeline RpMaterialGetDefaultPipelineMacro
-#define RpMaterialSetPipeline RpMaterialSetPipelineMacro
-#define RpMaterialGetPipeline RpMaterialGetPipelineMacro
-
-#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern RxPipeline *RpWorldSetDefaultSectorPipeline(RxPipeline *pipeline);
-extern RxPipeline *RpAtomicSetDefaultPipeline(RxPipeline *pipeline);
-extern RxPipeline *RpMaterialSetDefaultPipeline(RxPipeline *pipeline);
-
-#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
-
-extern RxPipeline *RpWorldGetGenericSectorPipeline(void);
-extern RxPipeline *RpWorldGetDefaultSectorPipeline(void);
-extern RpWorld *RpWorldSetSectorPipeline(RpWorld *world,
- RxPipeline *pipeline);
-extern RpWorld *RpWorldGetSectorPipeline(RpWorld *world,
- RxPipeline **pipeline);
-extern RpWorldSector *RpWorldSectorSetPipeline(RpWorldSector *sector,
- RxPipeline *pipeline);
-extern RpWorldSector *RpWorldSectorGetPipeline(RpWorldSector *sector,
- RxPipeline **pipeline);
-
-extern RxPipeline *RpAtomicGetGenericPipeline(void);
-extern RxPipeline *RpAtomicGetDefaultPipeline(void);
-extern RpAtomic *RpAtomicSetPipeline(RpAtomic *atomic,
- RxPipeline *pipeline);
-extern const RpAtomic *RpAtomicGetPipeline(const RpAtomic *const atomic,
- RxPipeline **pipeline);
-
-extern RxPipeline *RpMaterialGetGenericPipeline(void);
-extern RxPipeline *RpMaterialGetDefaultPipeline(void);
-extern RpMaterial *RpMaterialSetPipeline(RpMaterial *material,
- RxPipeline *pipeline);
-extern RpMaterial *RpMaterialGetPipeline(RpMaterial *material,
- RxPipeline **pipeline);
-
-#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
-
-extern const RpGeometry *RpGeometryIsCorrectlySorted(const RpGeometry * geometry,
- RwBool * result);
-extern RpGeometry *RpGeometrySortByMaterial(const RpGeometry * geometry,
- RpGeometrySortByMaterialCallBack callback);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* LEGACY-SUPPORT macros */
-#define RpWorldSetDefaultSectorInstancePipeline RpWorldSetDefaultSectorPipeline
-#define RpWorldGetDefaultSectorInstancePipeline RpWorldGetDefaultSectorPipeline
-#define RpWorldSetSectorInstancePipeline RpWorldSetSectorPipeline
-#define RpWorldGetSectorInstancePipeline RpWorldGetSectorPipeline
-#define RpWorldSectorSetInstancePipeline RpWorldSectorSetPipeline
-#define RpWorldSectorGetInstancePipeline RpWorldSectorGetPipeline
-
-#define RpAtomicGetDefaultInstancePipeline RpAtomicGetDefaultPipeline
-#define RpAtomicSetDefaultInstancePipeline RpAtomicSetDefaultPipeline
-#define RpAtomicSetInstancePipeline RpAtomicSetPipeline
-#define RpAtomicGetInstancePipeline RpAtomicGetPipeline
-
-#define RpMaterialSetDefaultRenderPipeline RpMaterialSetDefaultPipeline
-#define RpMaterialGetDefaultRenderPipeline RpMaterialGetDefaultPipeline
-#define RpMaterialSetRenderPipeline RpMaterialSetPipeline
-#define RpMaterialGetRenderPipeline RpMaterialGetPipeline
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/baworobj.h ---*/
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-extern void RpTieSetFreeListCreateParams( RwInt32 blockSize, RwInt32 numBlocksToPrealloc );
-extern void RpLightTieSetFreeListCreateParams( RwInt32 blockSize, RwInt32 numBlocksToPrealloc );
-
-/* Adding and removing cameras to/from the world */
-extern RpWorld *RpWorldRemoveCamera(RpWorld *world, RwCamera *camera);
-extern RpWorld *RpWorldAddCamera(RpWorld *world, RwCamera *camera);
-extern RpWorld *RwCameraGetWorld(const RwCamera *camera);
-
-/* Adding and removing atomics to/from the world */
-extern RpWorld *RpWorldRemoveAtomic(RpWorld *world, RpAtomic *atomic);
-extern RpWorld *RpWorldAddAtomic(RpWorld *world, RpAtomic *atomic);
-extern RpWorld *RpAtomicGetWorld(const RpAtomic *atomic);
-
-/* Adding and removing clumps to/from the world */
-extern RpWorld *RpWorldAddClump(RpWorld *world, RpClump *clump);
-extern RpWorld *RpWorldRemoveClump(RpWorld *world, RpClump *clump);
-extern RpWorld *RpClumpGetWorld(const RpClump *clump);
-
-/* Adding and removing lights to/from the world */
-extern RpWorld *RpWorldAddLight(RpWorld *world, RpLight *light);
-extern RpWorld *RpWorldRemoveLight(RpWorld *world, RpLight *light);
-extern RpWorld *RpLightGetWorld(const RpLight *light);
-
-/* Finding whats in the view frustum */
-extern RwCamera *RwCameraForAllClumpsInFrustum(RwCamera *camera, void *data);
-extern RwCamera *RwCameraForAllClumpsNotInFrustum(RwCamera *camera,
- RwInt32 numClumps, void *data);
-extern RwCamera *RwCameraForAllSectorsInFrustum(RwCamera *camera,
- RpWorldSectorCallBack callBack,
- void *pData);
-
-/* Enumeration involving the world sectors */
-extern RpLight *RpLightForAllWorldSectors(RpLight *light,
- RpWorldSectorCallBack callback,
- void *data);
-extern RpAtomic *RpAtomicForAllWorldSectors(RpAtomic *atomic,
- RpWorldSectorCallBack callback,
- void *data);
-extern RpWorldSector *RpWorldSectorForAllAtomics(RpWorldSector *sector,
- RpAtomicCallBack callback,
- void *data);
-extern RpWorldSector *RpWorldSectorForAllCollisionAtomics(RpWorldSector *sector,
- RpAtomicCallBack callback,
- void *data);
-extern RpWorldSector *RpWorldSectorForAllLights(RpWorldSector *sector,
- RpLightCallBack callback,
- void *data);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-/*--- Automatically derived from: c:/daily/rwsdk/world/babinwor.h ---*/
-/****************************************************************************
- Global types
- */
-
-/* Binary Representation
- *
- */
-typedef struct RpWorldChunkInfoSector RpWorldSectorChunkInfo;
-typedef struct RpWorldChunkInfoSector _rpWorldSector;
-
-#if (!defined(DOXYGEN))
-struct RpWorldChunkInfoSector
-{
- RwInt32 matListWindowBase;
- RwInt32 numPolygons;
- RwInt32 numVertices;
- RwV3d inf;
- RwV3d sup;
- RwBool collSectorPresent; /* unused but retains same struct size */
- RwBool unused;
-};
-
-
-typedef struct RpPlaneSectorChunkInfo RpPlaneSectorChunkInfo;
-typedef struct RpPlaneSectorChunkInfo _rpPlaneSector;
-
-struct RpPlaneSectorChunkInfo
-{
- RwInt32 type;
- RwReal value;
- RwBool leftIsWorldSector;
- RwBool rightIsWorldSector;
- RwReal leftValue;
- RwReal rightValue;
-};
-
-typedef struct RpWorldChunkInfo RpWorldChunkInfo;
-typedef struct RpWorldChunkInfo _rpWorld;
-
-struct RpWorldChunkInfo
-{
- RwBool rootIsWorldSector;
-
- RwV3d invWorldOrigin;
-
- RwInt32 numPolygons;
- RwInt32 numVertices;
- RwInt32 numPlaneSectors;
- RwInt32 numWorldSectors;
- RwInt32 colSectorSize;
-
- RwInt32 format; /* Flags about the world */
-
- /* Added in 34003 */
- RwBBox boundingBox;
-};
-
-typedef struct rpWorldChunkInfo34000 rpWorldChunkInfo34000;
-
-struct rpWorldChunkInfo34000
-{
- RwBool rootIsWorldSector;
-
- RwV3d invWorldOrigin;
-
- RwSurfaceProperties surfaceProps;
-
- RwInt32 numPolygons;
- RwInt32 numVertices;
- RwInt32 numPlaneSectors;
- RwInt32 numWorldSectors;
- RwInt32 colSectorSize;
-
- RwInt32 format; /* Flags about the world */
-};
-#endif /* (!defined(DOXYGEN)) */
-
-/****************************************************************************
- Function prototypes
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* Binary format */
-extern RwUInt32 RpWorldStreamGetSize(const RpWorld *world);
-extern RpWorld *RpWorldStreamRead(RwStream *stream);
-extern const RpWorld *RpWorldStreamWrite(const RpWorld *world,
- RwStream *stream);
-extern RpWorldSectorChunkInfo *
-_rpWorldSectorChunkInfoRead(RwStream *stream,
- RpWorldSectorChunkInfo *worldSectorChunkInfo,
- RwInt32 *bytesRead);
-extern RpPlaneSectorChunkInfo *
-_rpPlaneSectorChunkInfoRead(RwStream *stream,
- RpPlaneSectorChunkInfo *planeSectorChunkInfo,
- RwInt32 *bytesRead);
-extern RpWorldChunkInfo *
-_rpWorldChunkInfoRead(RwStream *stream,
- RpWorldChunkInfo *worldChunkInfo,
- RwInt32 *bytesRead);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#define RpWorldSectorChunkInfoRead(stream, worldSectorChunkInfo, bytesRead) \
- _rpWorldSectorChunkInfoRead(stream, worldSectorChunkInfo, bytesRead)
-
-#define RpPlaneSectorChunkInfoRead(stream, planeSectorChunkInfo, bytesRead) \
- _rpPlaneSectorChunkInfoRead(stream, planeSectorChunkInfo, bytesRead)
-
-#define RpWorldChunkInfoRead(stream, worldChunkInfo, bytesRead) \
- _rpWorldChunkInfoRead(stream, worldChunkInfo, bytesRead)
-
-#endif /* RPWORLD_H */