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