diff options
Diffstat (limited to 'sdk/rwsdk/include/d3d8/rtgncpip.h')
-rw-r--r-- | sdk/rwsdk/include/d3d8/rtgncpip.h | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/sdk/rwsdk/include/d3d8/rtgncpip.h b/sdk/rwsdk/include/d3d8/rtgncpip.h new file mode 100644 index 00000000..b18f2bb7 --- /dev/null +++ b/sdk/rwsdk/include/d3d8/rtgncpip.h @@ -0,0 +1,256 @@ +/* *INDENT-OFF* */ + +/* RWPUBLIC */ + +/**************************************************************************** + * + * File: rwg/rwsdk/tool/gencpipe/rtgncpip.h + * + * Copyright (C) 2002 Criterion Technologies. + * + * Purpose: Toolkit containing generic C rendering pipeline nodes. + * + ****************************************************************************/ + +#if (!defined(_RTGNCPIP_H)) +#define _RTGNCPIP_H + +/*===========================================================================* + *--- Include files ---------------------------------------------------------* + *===========================================================================*/ + +#include "rwcore.h" +#include "rpworld.h" + + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/**************************************************************************** + global types + */ + +typedef RpLight *RxLight; + + +/* RGBA Interpolation node structures */ +#if (!defined(DOXYGEN)) +struct NodeRGBAInterpData +{ + RwBool rgbaInterpOn; + RxRenderStateVector state; +}; +#endif /* (!defined(DOXYGEN)) */ + +typedef struct NodeRGBAInterpData NodeRGBAInterpData; + +/* UV Interpolation node structures */ +typedef struct RxNodeUVInterpSettings RxNodeUVInterpSettings; + +/** + * \ingroup rtgencpipe + * \struct RxNodeUVInterpSettings + * + * TODO + */ +struct RxNodeUVInterpSettings +{ + RwBool uvInterpOn; /**< TODO */ + RxRenderStateVector state; /**< TODO */ +}; + +/* Cloning node structures */ +typedef struct RxPacketCacheCluster RxPacketCacheCluster; + +/** + * \ingroup rtgencpipe + * \struct RxPacketCacheCluster + * structure containing a cache of an \ref RxCluster's + * within an \ref RxPacketCache + */ +struct RxPacketCacheCluster +{ + RwUInt32 slot; /**< A \ref RwUInt32 index into the \ref RxPacketCache's + * array of RxPacketCacheCluster's */ + RwUInt16 flags; /**< A cache of the original cluster's flags */ + RwUInt16 stride; /**< A cache of the original cluster's stride */ + void *data; /**< A cache of the original cluster's data */ + RwUInt32 numAlloced; /**< A cache of the original cluster's numAlloced */ + RwUInt32 numUsed; /**< A cache of the original cluster's numUsed */ + RxPipelineCluster *clusterRef; /**< A cache of the original cluster's \ref RxPipelineCluster */ +}; +typedef struct RxPacketCache RxPacketCache; + +/** + * \ingroup rtgencpipe + * \struct RxPacketCache + * structure containing a cache of a \ref RxPacket */ +struct RxPacketCache +{ + RwUInt16 packetFlags; /**< A cache of the original packet's flags */ + RwUInt16 pad[1]; /**< Alignment padding */ + RwUInt32 numClusters; /**< The number of present clusters in the + * original packet when it was cloned */ + RwBool lastCloneDone;/**< Once the cache has been cloned by \ref RxPacketCacheClone + * with (lastClone == TRUE), it should not be used again! */ + RwUInt32 pad2[1]; /**< Alignment padding */ + RxPacketCacheCluster clusters[1]; /**< An array of \ref RxPacketCacheCluster's, + * extending beyond 1 element */ +}; + + +typedef struct RxNodeCloneInitData RxNodeCloneInitData; +/** + * \ingroup rtgencpipe + * \struct RxNodeCloneInitData + * structure with which to initialize + * clone a \ref RxNodeDefinition, + * through \ref RxNodeDefinitionCloneCreate and + * set up cloned \ref RxPipelineNode modes, through + * \ref RxPipelineNodeCloneDefineModes */ +struct RxNodeCloneInitData +{ + RwUInt32 numModes; /**< Specifies the number of modes in + which the node should operate */ + RwUInt32 numOutputs; /**< Specifies the number of outputs of this + Clone node, which is also the maximum + number of outputs to which any one mode + may dispatch packets */ + RwUInt32 *modeSizes; /**< Specifies the number of outputs to which + each mode dispatches packets */ + RwUInt32 **modes; /**< An array of numModes pointers to arrays + (of length numOutputs) specifying the + outputs, in order, to which each mode + should dispatch packets (output zero is + the first output) */ +}; + +/** + * \ingroup rtgencpipe + * \struct RxNodeCloneData + * structure which is the private + * data of Clone nodes \ref RxPipelineNode */ +typedef struct RxNodeCloneData RxNodeCloneData; +struct RxNodeCloneData +{ + RwBool optimized; /**< \ref RwBool specifying whether \ref RxPipelineNodeCloneOptimize + * has been run on this \ref RxPipelineNode yet */ + RwUInt32 currentMode; /**< \ref RwUInt32 The current mode of operation */ + RxNodeCloneInitData *data;/**< A pointer to \ref RxNodeCloneInitData data + * specifying the modes of operation */ +}; + +/**************************************************************************** + global prototypes + */ + +extern RxClusterDefinition RxClLights; /* Uses the RxLight type (see above) */ + + +/********************************************************************************* + + Generic Nodes + + *******************************************************************************/ + +extern RxNodeDefinition *RxNodeDefinitionGetAtomicInstance(void); +extern RxNodeDefinition *RxNodeDefinitionGetClipLine(void); +extern RxNodeDefinition *RxNodeDefinitionGetClipTriangle(void); +extern RxNodeDefinition *RxNodeDefinitionGetWorldSectorEnumerateLights(void); +extern RxNodeDefinition *RxNodeDefinitionGetCullTriangle(void); +extern RxNodeDefinition *RxNodeDefinitionGetFastPathSplitter(void); +extern RxNodeDefinition *RxNodeDefinitionGetImmInstance(void); +extern RxNodeDefinition *RxNodeDefinitionGetImmMangleLineIndices(void); +extern RxNodeDefinition *RxNodeDefinitionGetImmMangleTriangleIndices(void); +extern RxNodeDefinition *RxNodeDefinitionGetImmRenderSetup(void); +extern RxNodeDefinition *RxNodeDefinitionGetImmStash(void); +extern RxNodeDefinition *RxNodeDefinitionGetLight(void); +extern RxNodeDefinition *RxNodeDefinitionGetMaterialScatter(void); +extern RxNodeDefinition *RxNodeDefinitionGetPostLight(void); +extern RxNodeDefinition *RxNodeDefinitionGetPreLight(void); +extern RxNodeDefinition *RxNodeDefinitionGetRGBAInterp(void); +extern RxNodeDefinition *RxNodeDefinitionGetUVInterp(void); +extern RxNodeDefinition *RxNodeDefinitionGetScatter(void); +extern RxNodeDefinition *RxNodeDefinitionGetSubmitLine(void); +extern RxNodeDefinition *RxNodeDefinitionGetSubmitTriangle(void); +extern RxNodeDefinition *RxNodeDefinitionGetTransform(void); +extern RxNodeDefinition *RxNodeDefinitionGetAtomicEnumerateLights(void); +extern RxNodeDefinition *RxNodeDefinitionGetWorldSectorInstance(void); +extern RxNodeDefinition *RxNodeDefinitionCloneCreate(RxNodeCloneInitData *data); +extern RwBool RxPipelineNodeCloneDefineModes( + RxPipeline *pipeline, + RxPipelineNode *node, + RxNodeCloneInitData *data); +extern RwBool RxNodeDefinitionCloneDestroy(RxNodeDefinition *def); +extern RwBool RxPipelineNodeCloneOptimize(RxPipeline *pipeline, + RxPipelineNode *node); + + +/********************************************************************************* + + Generic Core Pipes + + *******************************************************************************/ + + +extern RwBool RtGenCPipeCreateGenericIm3DTransformPipeline(void); +extern void RtGenCPipeDestroyGenericIm3DTransformPipeline(void); +extern RwBool RtGenCPipeCreateGenericIm3DRenderPipelines(void); +extern void RtGenCPipeDestroyGenericIm3DRenderPipelines(void); + +extern RxPipeline *RwIm3DGetGenericTransformPipeline(void); +extern RxPipeline *RwIm3DGetGenericRenderPipeline(RwPrimitiveType primType); + + +/********************************************************************************* + + Generic World Pipes + + *******************************************************************************/ + +extern RwBool RtGenCPipeCreateGenericWorldPipelines(void); +extern void RtGenCPipeDestroyGenericWorldPipelines(void); + +#define RpWorldGetGenericSectorPipelineMacro() \ + (RXPIPELINEGLOBAL(genericWorldSectorPipeline)) + +#define RpAtomicGetGenericPipelineMacro() \ + (RXPIPELINEGLOBAL(genericAtomicPipeline)) + +#define RpMaterialGetGenericPipelineMacro() \ + (RXPIPELINEGLOBAL(genericMaterialPipeline)) + + +#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) + +#define RpWorldGetGenericSectorPipeline RpWorldGetGenericSectorPipelineMacro +#define RpAtomicGetGenericPipeline RpAtomicGetGenericPipelineMacro +#define RpMaterialGetGenericPipeline RpMaterialGetGenericPipelineMacro + +#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */ + + +#if (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) + +extern RxPipeline *RpWorldGetGenericSectorPipeline(void); + +extern RxPipeline *RpAtomicGetGenericPipeline(void); + +extern RxPipeline *RpMaterialGetGenericPipeline(void); + +#endif /* (defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* (!defined(_RTGNCPIP_H)) */ + +/* RWPUBLICEND */ + +/* *INDENT-ON* */ |