re3/sdk/rwsdk/include/d3d8/rtgncpip.h

257 lines
9.3 KiB
C
Raw Normal View History

/* *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* */