re3/rwsdk/include/d3d8/rpskin.h

223 lines
7.2 KiB
C

#ifndef RPSKIN_H
#define RPSKIN_H
/**
* \defgroup rpskin RpSkin
* \ingroup rpplugin
*
* 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
* \typedef 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 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 );
/*---------------------------------------------------------------------------*
*- 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. */
rpSKINTYPEMATFXTOON = 4, /**<Note Toon + MatFX on same object NOT currently supported */
rpSKINTYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
};
typedef enum RpSkinType RpSkinType;
extern RpAtomic *
RpSkinAtomicSetType( RpAtomic *atomic,
RpSkinType type );
extern RpSkinType
RpSkinAtomicGetType( RpAtomic *atomic );
/*---------------------------------------------------------------------------*/
#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.
*/
/*===========================================================================*
*--- 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 */