re3/rwsdk/include/d3d8/rppatch.h

684 lines
26 KiB
C

#ifndef RPPATCH_H
#define RPPATCH_H
/**
* \defgroup rppatch RpPatch
* \ingroup rpplugin
*
* Bezier patch library
*
* This library provides efficient evaluation of patches.
*/
/*===========================================================================*
*--- Include files ---------------------------------------------------------*
*===========================================================================*/
#include "rwcore.h"
#include "rpworld.h"
#include "rpcriter.h"
#include "rppatch.rpe"
/*===========================================================================*
*--- Defines ---------------------------------------------------------------*
*===========================================================================*/
/**
* \ingroup rppatch
* \def rpQUADPATCHNUMCONTROLPOINTS defines the number of control points in
* a quadrilateral patch.
*
* \see RpQuadPatch
* \see rpQUADPATCHNUMCONTROLINDICES
* \see RpPatchMeshSetQuadPatch
*/
#define rpQUADPATCHNUMCONTROLPOINTS (16)
/**
* \ingroup rppatch
* \def rpTRIPATCHNUMCONTROLPOINTS defines the number of control points in
* a triangular patch.
*
* \see RpTriPatch
* \see rpTRIPATCHNUMCONTROLINDICES
* \see RpPatchMeshSetTriPatch
*/
#define rpTRIPATCHNUMCONTROLPOINTS (10)
/**
* \ingroup rppatch
* \def rpQUADPATCHNUMCONTROLINDICES defines the number of control point
* indices in a \ref RpQuadPatch quadrilateral patch.
*
* \see rpQUADPATCHNUMCONTROLPOINTS
* \see RpPatchMeshSetQuadPatch
*/
#define rpQUADPATCHNUMCONTROLINDICES rpQUADPATCHNUMCONTROLPOINTS
/**
* \ingroup rppatch
* \def rpTRIPATCHNUMCONTROLINDICES defines the number of control points
* indices in a \ref RpTriPatch triangular patch.
*
* \see rpTRIPATCHNUMCONTROLPOINTS
* \see RpPatchMeshSetTriPatch
*/
#define rpTRIPATCHNUMCONTROLINDICES rpTRIPATCHNUMCONTROLPOINTS
/**
* \ingroup rppatch
* \def rpPATCHLODMAXVALUE defines the maximum value that can be returned for
* the patch evaluation LOD.
*
* \see rpPATCHSKINLODMAXVALUE
* \see rpPATCHLODMINVALUE
* \see RpPatchLODCallBack
*/
#define rpPATCHLODMAXVALUE (20)
/**
* \ingroup rppatch
* \def rpPATCHSKINLODMAXVALUE defines the maximum value that can be returned
* for the skinned patch evaluation LOD.
*
* \see rpPATCHLODMAXVALUE
* \see rpPATCHLODMINVALUE
* \see RpPatchLODCallBack
*/
#define rpPATCHSKINLODMAXVALUE (18)
/**
* \ingroup rppatch
* \def rpPATCHLODMINVALUE defines the minimum value that can be returned for
* the patch evaluation LOD.
*
* \see rpPATCHSKINLODMAXVALUE
* \see rpPATCHLODMAXVALUE
* \see RpPatchLODCallBack
*/
#define rpPATCHLODMINVALUE (4)
/**
* \ingroup rppatch
* \def rpPATCHMESHTEXCOORDSETS Multi texture coordinate format specifier
* for \ref RpPatchMeshCreate(). This should be OR'd into the
* \ref RpPatchMeshFlag .
*/
#define rpPATCHMESHTEXCOORDSETS(_num) \
((_num & 0xff) << 16)
/**
* \ingroup rppatch
* \def rpPATCHMESHLOCKTEXCOORDSIDX
* Convenience macro for generating a texture coordinate lock flag.
*/
#define rpPATCHMESHLOCKTEXCOORDSIDX(_idx) \
(rpPATCHMESHLOCKTEXCOORDS1 << (_idx))
/*===========================================================================*
*--- Global Types ----------------------------------------------------------*
*===========================================================================*/
/**
* \ingroup rppatch
* \ref RpPatchMeshFlag
* When creating a \ref RpPatchMesh, these flags can be OR'ed together to
* specify the format along with the \ref rpPATCHMESHTEXCOORDSETS (n) macro
* to specify the number of texture coordinate sets required.
*
* \see RpPatchMeshCreate
*/
enum RpPatchMeshFlag
{
rpNAPATCHMESHFLAG = 0,
rpPATCHMESHPOSITIONS = 0x01, /**<Patch mesh contains control point
positions. */
rpPATCHMESHNORMALS = 0x02, /**<Patch mesh contains control point
normals. */
rpPATCHMESHPRELIGHTS = 0x04, /**<Patch mesh contains control point
pre-light color values. */
rpPATCHMESHTEXTURED = 0x08, /**<Patch mesh is textured. The number
of texture sets must also be
defined. */
rpPATCHMESHLIGHT = 0x10, /**<Patch mesh will be lit. */
rpPATCHMESHMODULATEMATERIALCOLOR = 0x20,
/**<Control point color will be
modulated with the material color. */
rpPATCHMESHSMOOTHNORMALS = 0x40,
/**<Patch mesh normals will be
smoothed automatically. */
rpPATCHMESHFLAGFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
};
typedef enum RpPatchMeshFlag RpPatchMeshFlag;
/**
* \ingroup rppatch
* \ref RpPatchMeshLockMode patch mesh lock flags.
*
* \see rpPATCHMESHLOCKTEXCOORDSIDX
*/
enum RpPatchMeshLockMode
{
rpNAPATCHMESHLOCKMODE = 0,
rpPATCHMESHLOCKPATCHES = 0x0001, /**<Lock the mesh patches. */
rpPATCHMESHLOCKPOSITIONS = 0x0002, /**<Lock the control point
positions. */
rpPATCHMESHLOCKNORMALS = 0x0004, /**<Lock the control point
normals. */
rpPATCHMESHLOCKPRELIGHTS = 0x0008, /**<Lock the control point
pre-light color values. */
rpPATCHMESHLOCKTEXCOORDS1 = 0x0100, /**<Lock the texture coordinates
set 1. */
rpPATCHMESHLOCKTEXCOORDS2 = 0x0200, /**<Lock the texture coordinates
set 2. */
rpPATCHMESHLOCKTEXCOORDS3 = 0x0400, /**<Lock the texture coordinates
set 3. */
rpPATCHMESHLOCKTEXCOORDS4 = 0x0800, /**<Lock the texture coordinates
set 4. */
rpPATCHMESHLOCKTEXCOORDS5 = 0x1000, /**<Lock the texture coordinates
set 5. */
rpPATCHMESHLOCKTEXCOORDS6 = 0x2000, /**<Lock the texture coordinates
set 6. */
rpPATCHMESHLOCKTEXCOORDS7 = 0x4000, /**<Lock the texture coordinates
set 7. */
rpPATCHMESHLOCKTEXCOORDS8 = 0x8000, /**<Lock the texture coordinates
set 8. */
rpPATCHMESHLOCKTEXCOORDSALL = 0xff00, /**<Lock all texture coordinate
sets. */
rpPATCHMESHLOCKALL = 0xffff, /**<Combination of all the
above. */
rpPATCHMESHLOCKMODEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
};
typedef enum RpPatchMeshLockMode RpPatchMeshLockMode;
typedef struct RpPatchMeshDefinition RpPatchMeshDefinition;
/**
* \ingroup rppatch
* \struct RpPatchMeshDefinition
* holds the definition sizes of the patch mesh. This data should be considered
* read only.
*/
struct RpPatchMeshDefinition
{
RwUInt32 flag; /**<Patch mesh definition flag. */
RwUInt32 numControlPoints; /**<Number of control points. */
RwUInt32 numTriPatches; /**<Number of tri patches. */
RwUInt32 numQuadPatches; /**<Number of quad patches. */
RwUInt32 numTexCoordSets; /**<Number of sets of texture coordinates. */
};
typedef struct RpPatchMesh RpPatchMesh;
/**
* \ingroup rppatch
* \struct RpPatchMesh
* holds the control point data for a patch mesh. The patch mesh should be
* created with \ref RpPatchMeshCreate. The patch mesh should be locked with
* \ref RpPatchMeshLock before the data is edited. Quadrilateral and triangle
* patches can be defined from the control points with
* \ref RpPatchMeshSetQuadPatch and \ref RpPatchMeshSetTriPatch respectively.
* The patch mesh should be unlocked with \ref RpPatchMeshUnlock before it is
* added to an \ref RpAtomic with \ref RpPatchAtomicSetPatchMesh.
*
* \see RpPatchMesDefinition
*/
struct RpPatchMesh
{
RwV3d *positions; /**<Control point positions. */
RwV3d *normals; /**<Control point normals. */
RwRGBA *preLightColors; /**<Control point pre-light colors. */
RwTexCoords *texCoords[rwMAXTEXTURECOORDS];
/**<Control point texture coordinates. */
RpPatchMeshDefinition definition; /**<Patch mesh definition data. */
};
typedef struct RpQuadPatch RpQuadPatch;
/**
* \ingroup rppatch
* \struct RpQuadPatch
* holds the control point indices for a quadrilateral patch. There are
* \ref rpQUADPATCHNUMCONTROLINDICES indices for a quadrilateral patch.
*
* \see RpPatchMeshSetQuadPatch
*/
struct RpQuadPatch
{
RwUInt32 cpIndices[rpQUADPATCHNUMCONTROLINDICES]; /**<Control point
indices. */
};
typedef struct RpTriPatch RpTriPatch;
/**
* \ingroup rppatch
* \struct RpTriPatch
* holds the control point indices for a triangle patch. There are
* \ref rpTRIPATCHNUMCONTROLINDICES indices for a triangular patch.
*
* \see RpPatchMeshSetTriPatch
*/
struct RpTriPatch
{
RwUInt32 cpIndices[rpTRIPATCHNUMCONTROLINDICES]; /**<Control point
indices. */
};
typedef struct RpPatchLODRange RpPatchLODRange;
/**
* \ingroup rppatch
* \struct RpPatchLODRange
* holds the variables used by the default atomic LOD call back function.
*/
struct RpPatchLODRange
{
RwUInt32 minLod; /**<Minimum LOD value. */
RwUInt32 maxLod; /**<Maximum LOD value. */
RwReal minRange; /**<Minimum LOD range. */
RwReal maxRange; /**<Maximum LOD range. */
};
/**
* \ingroup rppatch
* \typedef RpPatchLODUserData
* typedef for the user data passed to the \ref RpPatchLODCallBack
* function which calculates the atomics' LOD.
*
* \see RpPatchAtomicSetPatchLODCallBack
* \see RpPatchAtomicGetPatchLODCallBack
*/
typedef void *RpPatchLODUserData;
/**
* \ingroup rppatch
* \typedef RpPatchLODCallBack
* typedef for the patch atomic LOD calculation function.
*
* \see RpPatchAtomicSetPatchLODCallBack
* \see RpPatchAtomicGetPatchLODCallBack
*/
typedef RwUInt32 (* RpPatchLODCallBack)( RpAtomic *atomic,
RpPatchLODUserData userData );
/*===========================================================================*
*--- Plugin API Functions --------------------------------------------------*
*===========================================================================*/
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
/*---------------------------------------------------------------------------*
*- Plugin functions -*
*---------------------------------------------------------------------------*/
extern RwBool
RpPatchPluginAttach(void);
/*---------------------------------------------------------------------------*
*- Patch Mesh functions -*
*---------------------------------------------------------------------------*/
extern RpPatchMesh *
RpPatchMeshCreate( RwUInt32 numQuadPatches,
RwUInt32 numTriPatches,
RwUInt32 numControlPoints,
RwUInt32 definitionFlag );
extern RwBool
RpPatchMeshDestroy( RpPatchMesh *patchMesh );
extern RpPatchMesh *
RpPatchMeshLock( RpPatchMesh *patchMesh,
RwUInt32 lockMode );
extern RpPatchMesh *
RpPatchMeshUnlock( RpPatchMesh *patchMesh );
/*---------------------------------------------------------------------------*
*- Patch mesh helper functions -*
*---------------------------------------------------------------------------*/
extern RpPatchMesh *
RpPatchMeshTransform( RpPatchMesh *patchMesh,
const RwMatrix *matrix );
/*---------------------------------------------------------------------------*/
#define RpPatchMeshGetFlagsMacro(patchMesh) \
(patchMesh->definition.flag)
#define RpPatchMeshSetFlagsMacro(patchMesh, flags) \
(patchMesh->definition.flag = flags)
#define RpPatchMeshGetNumControlPointsMacro(patchMesh) \
(patchMesh->definition.numControlPoints)
#define RpPatchMeshGetNumTriPatchesMacro(patchMesh) \
(patchMesh->definition.numTriPatches)
#define RpPatchMeshGetNumQuadPatchesMacro(patchMesh) \
(patchMesh->definition.numQuadPatches)
#define RpPatchMeshGetNumTexCoordSetsMacro(patchMesh) \
(patchMesh->definition.numTexCoordSets)
#define RpPatchMeshGetPositionsMacro(patchMesh) \
(patchMesh->positions)
#define RpPatchMeshGetNormalsMacro(patchMesh) \
(patchMesh->normals)
#define RpPatchMeshGetPreLightColorsMacro(patchMesh) \
(patchMesh->preLightColors)
#define RpPatchMeshGetTexCoordsMacro(patchMesh, index) \
(patchMesh->texCoords[index - 1])
/*---------------------------------------------------------------------------*/
#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
/*---------------------------------------------------------------------------*/
extern RwUInt32
RpPatchMeshGetFlags( const RpPatchMesh *patchMesh );
extern RpPatchMesh *
RpPatchMeshSetFlags( RpPatchMesh *patchMesh,
RwUInt32 flags );
extern RwUInt32
RpPatchMeshGetNumControlPoints( const RpPatchMesh *patchMesh );
extern RwUInt32
RpPatchMeshGetNumTriPatches( const RpPatchMesh *patchMesh );
extern RwUInt32
RpPatchMeshGetNumQuadPatches( const RpPatchMesh *patchMesh );
extern RwUInt32
RpPatchMeshGetNumTexCoordSets( const RpPatchMesh *patchMesh );
extern RwV3d *
RpPatchMeshGetPositions( const RpPatchMesh *patchMesh );
extern RwV3d *
RpPatchMeshGetNormals( const RpPatchMesh *patchMesh );
extern RwRGBA *
RpPatchMeshGetPreLightColors( const RpPatchMesh *patchMesh );
extern RwTexCoords *
RpPatchMeshGetTexCoords( const RpPatchMesh *patchMesh,
RwTextureCoordinateIndex index );
/*---------------------------------------------------------------------------*/
#else /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
/*---------------------------------------------------------------------------*/
#define RpPatchMeshGetFlags(patchMesh) \
RpPatchMeshGetFlagsMacro(patchMesh)
#define RpPatchMeshSetFlags(patchMesh, flags) \
RpPatchMeshSetFlagsMacro(patchMesh, flags)
#define RpPatchMeshGetNumControlPoints(patchMesh) \
RpPatchMeshGetNumControlPointsMacro(patchMesh)
#define RpPatchMeshGetNumTriPatches(patchMesh) \
RpPatchMeshGetNumTriPatchesMacro(patchMesh)
#define RpPatchMeshGetNumQuadPatches(patchMesh) \
RpPatchMeshGetNumQuadPatchesMacro(patchMesh)
#define RpPatchMeshGetNumTexCoordSets(patchMesh) \
RpPatchMeshGetNumTexCoordSetsMacro(patchMesh)
#define RpPatchMeshGetPositions(patchMesh) \
RpPatchMeshGetPositionsMacro(patchMesh)
#define RpPatchMeshGetNormals(patchMesh) \
RpPatchMeshGetNormalsMacro(patchMesh)
#define RpPatchMeshGetPreLightColors(patchMesh) \
RpPatchMeshGetPreLightColorsMacro(patchMesh)
#define RpPatchMeshGetTexCoords(patchMesh, index) \
RpPatchMeshGetTexCoordsMacro(patchMesh, index)
/*---------------------------------------------------------------------------*/
#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
/*---------------------------------------------------------------------------*
*- Patch streaming functions -*
*---------------------------------------------------------------------------*/
extern RwUInt32
RpPatchMeshStreamGetSize( const RpPatchMesh *patchMesh );
extern RpPatchMesh *
RpPatchMeshStreamRead( RwStream *stream );
extern const RpPatchMesh *
RpPatchMeshStreamWrite( const RpPatchMesh *patchMesh,
RwStream *stream );
/*---------------------------------------------------------------------------*
*- Patch Mesh patch functions -*
*---------------------------------------------------------------------------*/
extern RpPatchMesh *
RpPatchMeshSetQuadPatch( RpPatchMesh *patchMesh,
RwUInt32 quadIndex,
RpQuadPatch *quadPatch );
extern RpPatchMesh *
RpPatchMeshSetTriPatch( RpPatchMesh *patchMesh,
RwUInt32 triIndex,
RpTriPatch *triPatch );
extern const RpQuadPatch *
RpPatchMeshGetQuadPatch( const RpPatchMesh *patchMesh,
RwUInt32 quadIndex );
extern const RpTriPatch *
RpPatchMeshGetTriPatch( const RpPatchMesh *patchMesh,
RwUInt32 triIndex );
/*---------------------------------------------------------------------------*
*- Patch Mesh material functions -*
*---------------------------------------------------------------------------*/
extern RpPatchMesh *
RpPatchMeshSetQuadPatchMaterial( RpPatchMesh *patchMesh,
RwUInt32 quadIndex,
RpMaterial *material );
extern RpPatchMesh *
RpPatchMeshSetTriPatchMaterial( RpPatchMesh *patchMesh,
RwUInt32 triIndex,
RpMaterial *material );
extern RpMaterial *
RpPatchMeshGetQuadPatchMaterial( const RpPatchMesh *patchMesh,
RwUInt32 quadIndex );
extern RpMaterial *
RpPatchMeshGetTriPatchMaterial( const RpPatchMesh *patchMesh,
RwUInt32 triIndex );
extern const RpPatchMesh *
RpPatchMeshForAllMaterials( const RpPatchMesh *patchMesh,
RpMaterialCallBack callBack,
void *userData );
extern RwUInt32
RpPatchMeshGetNumMaterials( const RpPatchMesh *patchMesh );
extern RpMaterial *
RpPatchMeshGetMaterial( const RpPatchMesh *patchMesh,
RwUInt32 materialIndex );
/*---------------------------------------------------------------------------*
*- Patch Skin functions -*
*---------------------------------------------------------------------------*/
#if (defined(RPSKIN_H))
extern RpSkin *
RpPatchMeshGetSkin( RpPatchMesh *patchMesh );
extern RpPatchMesh *
RpPatchMeshSetSkin( RpPatchMesh *patchMesh,
RpSkin *skin );
#endif /* (defined(RPSKIN_H)) */
/*---------------------------------------------------------------------------*
*- Patch Atomic functions -*
*---------------------------------------------------------------------------*/
extern RpAtomic *
RpPatchAtomicSetPatchMesh( RpAtomic *atomic,
RpPatchMesh *patchMesh );
extern RpPatchMesh *
RpPatchAtomicGetPatchMesh( const RpAtomic *atomic );
/*---------------------------------------------------------------------------*
*- Patch Atomic LOD functions -*
*---------------------------------------------------------------------------*/
extern RwBool
RpPatchAtomicSetPatchLODCallBack( RpAtomic *atomic,
RpPatchLODCallBack callback,
RpPatchLODUserData userData );
extern RwBool
RpPatchAtomicGetPatchLODCallBack( const RpAtomic *atomic,
RpPatchLODCallBack *callback,
RpPatchLODUserData *userData );
/*---------------------------------------------------------------------------*
*- Patch default LOD range -*
*---------------------------------------------------------------------------*/
extern RwBool
RpPatchSetDefaultLODCallBackRange( RpPatchLODRange *lodRange );
extern RwBool
RpPatchGetDefaultLODCallBackRange( RpPatchLODRange *lodRange );
/*---------------------------------------------------------------------------*
*- Patch pipeline -*
*---------------------------------------------------------------------------*/
/**
* \ingroup rppatch
* \ref RpPatchType defines the different ways a patch atomic can be rendered.
* Once a \ref RpPatchMesh has been attached to an \ref RpAtomic with
* \ref RpPatchAtomicSetPatchMesh the atomic must be setup with the correct
* rendering pipeline with \ref RpPatchAtomicSetType .
*
* The patch plugin makes no assumptions about how to render the
* patch atomics. Once an \ref RpPatchMesh has been attached to an
* \ref RpAtomic it is necessary to attach a suitable patch
* rendering pipeline. The patch plugin supports four different
* rendering types, these are defined in the \ref RpPatchType
* enumeration:-
* \li \ref rpPATCHTYPEGENERIC
* The patch \ref RpAtomic will be rendered with the
* default generic patch rendering pipeline.
* \li \ref rpPATCHTYPESKIN
* The patch \ref RpAtomic will be rendered with a
* custom pipeline for rendering skinning patches. Make sure
* an \ref RpSkin has been attached to the \ref RpPatchMesh
* and an \ref RpHAnimHierarchy has been attached to the
* \ref RpAtomic.
* \li \ref rpPATCHTYPEMATFX
* The patch \ref RpAtomic will be rendered with a
* custom pipeline for rendering the material effects
* of patches. The
* patch matfx pipeline supports all the material effects
* defined in the \ref rpmatfx plugin. The patches
* materials should be setup as usual.
* \li \ref rpPATCHTYPESKINMATFX
* The patch \ref RpAtomic will be rendered with a
* custom skinned material effects patch rendering pipeline.
* The \ref RpPatchMesh, \ref RpAtomic and the patches'
* \ref RpMaterial's must be setup correctly.
*/
enum RpPatchType
{
rpNAPATCHTYPE = 0, /**<Invalid patch pipeline. */
rpPATCHTYPEGENERIC = 1, /**<Generic patch rendering. */
rpPATCHTYPESKIN = 2, /**<Skinned patch rendering. */
rpPATCHTYPEMATFX = 3, /**<Material effects patch rendering. */
rpPATCHTYPESKINMATFX = 4, /**<Skinned material effects patch rendering. */
rpPATCHTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
};
typedef enum RpPatchType RpPatchType;
extern RpAtomic *
RpPatchAtomicSetType( RpAtomic *atomic,
RpPatchType type );
extern RpPatchType
RpPatchAtomicGetType( const RpAtomic *atomic );
/*---------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/*---- start: ./d3d8/patchplatform.h----*/
/**
* \defgroup rppatchd3d8 D3D8
* \ingroup rppatch
*
* D3D8 patch pipeline extension.
*/
/*===========================================================================*
*--- D3D8 Defines -----------------------------------------------------------*
*===========================================================================*/
/*===========================================================================*
*--- D3D8 Global Types ------------------------------------------------------*
*===========================================================================*/
/**
* \ingroup rppatchd3d8
* \ref RpPatchD3D8Pipeline rendering pipelines available within the
* \ref rppatch plugin. Use \ref RpPatchGetD3D8Pipeline to retrieve
* the \ref RxPipeline s.
*/
enum RpPatchD3D8Pipeline
{
rpPATCHD3D8PIPELINEGENERIC = 0, /**<D3D8 generic
patch rendering pipeline. */
rpPATCHD3D8PIPELINEMATFX = 1, /**<D3D8 material effect
(single set of texture coordinates)
patch rendering pipeline. */
rpPATCHD3D8PIPELINESKINNED = 2, /**<D3D8 skinned
patch rendering pipeline. */
rpPATCHD3D8PIPELINESKINMATFX = 3, /**<D3D8 skinned material effect
(single set of texture coordinates)
patch rendering pipeline. */
rpPATCHD3D8PIPELINEMAX,
rpPATCHD3D8PIPELINEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
};
typedef enum RpPatchD3D8Pipeline RpPatchD3D8Pipeline;
/*===========================================================================*
*--- D3D8 Plugin API Functions ----------------------------------------------*
*===========================================================================*/
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
/*---------------------------------------------------------------------------*/
extern RxPipeline *
RpPatchGetD3D8Pipeline( RpPatchD3D8Pipeline d3d8Pipeline );
/*---------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/*---- end: ./d3d8/patchplatform.h----*/
#endif /* RPPATCH_H */