mirror of
				https://github.com/halpz/re3.git
				synced 2025-11-04 15:35:08 +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 */
 | 
						|
 | 
						|
 |