mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-16 07:48:59 +00:00
223 lines
7.2 KiB
C
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 */
|
||
|
|
||
|
|