diff options
Diffstat (limited to 'sdk/rwsdk/include/d3d8/rpskin.h')
-rw-r--r-- | sdk/rwsdk/include/d3d8/rpskin.h | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/sdk/rwsdk/include/d3d8/rpskin.h b/sdk/rwsdk/include/d3d8/rpskin.h new file mode 100644 index 00000000..8a6ea204 --- /dev/null +++ b/sdk/rwsdk/include/d3d8/rpskin.h @@ -0,0 +1,276 @@ + +#ifndef RPSKIN_H +#define RPSKIN_H + +/** + * \defgroup rpskin RpSkin + * \ingroup skinning + * + * Skin Plugin for RenderWare Graphics. + */ + +/*===========================================================================* + *--- Include files ---------------------------------------------------------* + *===========================================================================*/ +#include "rwcore.h" +#include "rpworld.h" + +#include "rpcriter.h" +#include "rpskin.rpe" + +#include "rphanim.h" + +/*===========================================================================* + *--- Global Types ----------------------------------------------------------* + *===========================================================================*/ +typedef struct RwMatrixWeights RwMatrixWeights; + +/** + * \ingroup rpskin + * \struct RwMatrixWeights + * A structure for defining up to four matrix weights per vertex. + * Not all entries need to be used. + * + * \note + * Values should be sorted, such that any zero 0.0f entries appear + * after the valid weights. Any weights that appear after a zero + * entry will be ignored. + * + * \see RpSkinCreate + */ +struct RwMatrixWeights +{ + RwReal w0; /**< The first matrix weight. */ + RwReal w1; /**< The second matrix weight. */ + RwReal w2; /**< The third matrix weight. */ + RwReal w3; /**< The fourth matrix weight. */ +}; + +/** + * \ingroup rpskin + * \struct RpSkin + * + * Skin object. This should be considered an opaque type. + * Use the RpSkin API functions to access. + * + * \see RpSkinCreate + * \see RpSkinDestroy + */ +typedef struct RpSkin RpSkin; + +/*===========================================================================* + *--- Plugin API Functions --------------------------------------------------* + *===========================================================================*/ +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/*---------------------------------------------------------------------------* + *- Plugin functions -* + *---------------------------------------------------------------------------*/ +extern void RpSkinSetFreeListCreateParams( + RwInt32 blockSize, RwInt32 numBlocksToPrealloc ); + +extern RwBool +RpSkinPluginAttach(void); + +/*---------------------------------------------------------------------------* + *- Skin Atomic functions -* + *---------------------------------------------------------------------------*/ +extern RpAtomic * +RpSkinAtomicSetHAnimHierarchy( RpAtomic *atomic, + RpHAnimHierarchy *hierarchy ); + +extern RpHAnimHierarchy * +RpSkinAtomicGetHAnimHierarchy( const RpAtomic *atomic ); + +/*---------------------------------------------------------------------------* + *- Skin Geometry functions -* + *---------------------------------------------------------------------------*/ +extern RpGeometry * +RpSkinGeometrySetSkin( RpGeometry *geometry, + RpSkin *skin ); + +extern RpSkin * +RpSkinGeometryGetSkin( RpGeometry *geometry ); + +extern RpSkin * +RpSkinCreate( RwUInt32 numVertices, + RwUInt32 numBones, + RwMatrixWeights *vertexWeights, + RwUInt32 *vertexIndices, + RwMatrix *inverseMatrices ); + +extern RpSkin * +RpSkinDestroy( RpSkin *skin ); + +extern RwUInt32 +RpSkinGetNumBones( RpSkin *skin ); + +extern const RwMatrixWeights * +RpSkinGetVertexBoneWeights( RpSkin *skin ); + +extern const RwUInt32 * +RpSkinGetVertexBoneIndices( RpSkin *skin ); + +extern const RwMatrix * +RpSkinGetSkinToBoneMatrices( RpSkin *skin ); + +extern RwBool +RpSkinIsSplit( RpSkin *skin ); + +/*---------------------------------------------------------------------------* + *- Skin pipeline -* + *---------------------------------------------------------------------------*/ + +/** + * \ingroup rpskin + * \ref RpSkinType defines the different ways a skinned atomic can + * be rendered. Once a skinned \ref RpGeometry has been attached to + * an \ref RpAtomic the atomic must be setup with the correct skin + * rendering pipeline with \ref RpSkinAtomicSetType. + */ +enum RpSkinType +{ + rpNASKINTYPE = 0, /**<Invalid skin pipeline. */ + rpSKINTYPEGENERIC = 1, /**<Generic skin rendering. */ + rpSKINTYPEMATFX = 2, /**<Material effects skin rendering. */ + rpSKINTYPETOON = 3, /**<Toon skin rendering. */ + rpSKINTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT +}; +typedef enum RpSkinType RpSkinType; + +extern RpAtomic * +RpSkinAtomicSetType( RpAtomic *atomic, + RpSkinType type ); + +extern RpSkinType +RpSkinAtomicGetType( RpAtomic *atomic ); + +/*---------------------------------------------------------------------------* + *- Internal API -* + *---------------------------------------------------------------------------*/ +extern RpGeometry * +_rpSkinInitialize(RpGeometry *geometry); + +extern RpGeometry * +_rpSkinDeinitialize(RpGeometry *geometry); + +extern RwUInt8 * +_rpSkinGetMeshBoneRemapIndices( RpSkin *skin ); + +extern RwUInt8 * +_rpSkinGetMeshBoneRLECount( RpSkin *skin ); + +extern RwUInt8 * +_rpSkinGetMeshBoneRLE( RpSkin *skin ); + +extern RpSkin * +_rpSkinSplitDataCreate( RpSkin *skin, RwUInt32 boneLimit, + RwUInt32 numMatrices, RwUInt32 numMeshes, + RwUInt32 numRLE ); + +extern RwBool +_rpSkinSplitDataDestroy( RpSkin *skin ); + +/*---------------------------------------------------------------------------*/ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/*---------------------------------------------------------------------------* + *- Backwards macros -* + *---------------------------------------------------------------------------*/ + +#define RpSkinAtomicGetSkin(_a) \ + RpSkinGeometryGetSkin(RpAtomicGetGeometry(_a)) + +/*---------------------------------------------------------------------------*/ + +/*---- start: ./d3d8/skinplatform.h----*/ + +/** + * \defgroup rpskind3d8 D3D8 + * \ingroup rpskin + * + * D3D8 skin pipeline extension. + */ + +/** + * \defgroup rpskind3d8features Features + * \ingroup rpskind3d8 + * + * D3D8 skin pipeline features. + */ + +/** + * \defgroup rpskind3d8restrictions Restrictions + * \ingroup rpskind3d8 + * + * D3D8 skin pipeline restrictions. + */ + +/** + * \defgroup rpskinbonelimit Bone limit + * \ingroup rpskind3d8restrictions + * + * \par Bone limit + * The bone limit is 256 as skinning is performed on the CPU. + * + */ + + +/*===========================================================================* + *--- D3D8 Defines -----------------------------------------------------------* + *===========================================================================*/ + +/*===========================================================================* + *--- D3D8 Global Types ------------------------------------------------------* + *===========================================================================*/ + +/** + * \ingroup rpskind3d8 + * \ref RpSkinD3D8Pipeline rendering pipelines available within + * the \ref RpSkin plugin. Use \ref RpSkinGetD3D8Pipeline to + * retrieve the \ref RxPipeline's. + */ +enum RpSkinD3D8Pipeline +{ + rpNASKIND3D8PIPELINE = 0, + rpSKIND3D8PIPELINEGENERIC = 1, + /**<D3D8 generic skin rendering pipeline. */ + rpSKIND3D8PIPELINEMATFX = 2, + /**<D3D8 material effect skin rendering pipeline. */ + rpSKIND3D8PIPELINETOON = 3, + /**<D3D8 toon skin rendering pipeline. */ + rpSKIND3D8PIPELINEMATFXTOON = 4, + /**<D3D8 toon matfx skin rendering pipeline not supported */ + rpSKIND3D8PIPELINEMAX, + rpSKIND3D8PIPELINEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT +}; +typedef enum RpSkinD3D8Pipeline RpSkinD3D8Pipeline; + +/*===========================================================================* + *--- D3D8 Plugin API Functions ----------------------------------------------* + *===========================================================================*/ +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +/*---------------------------------------------------------------------------*/ + +extern RxPipeline * +RpSkinGetD3D8Pipeline( RpSkinD3D8Pipeline D3D8Pipeline ); + +/*---------------------------------------------------------------------------*/ +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/*---- end: ./d3d8/skinplatform.h----*/ + +#endif /* RPSKIN_H */ + + |