mirror of
				https://github.com/halpz/re3.git
				synced 2025-10-29 08:47:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1027 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1027 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| #ifndef RPPRTSTD_H
 | |
| #define RPPRTSTD_H
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *--- Include files ---------------------------------------------------------*
 | |
|  *===========================================================================*/
 | |
| 
 | |
| #include "rwcore.h"
 | |
| #include "rpworld.h"
 | |
| 
 | |
| 
 | |
| /*---- start: ./prtstd.h----*/
 | |
| 
 | |
| #include "rwcore.h"
 | |
| #include "rpworld.h"
 | |
| #include "rpptank.h"
 | |
| 
 | |
| #include "rpprtstd.rpe"
 | |
| 
 | |
| 
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| /**
 | |
|  * \defgroup rpprtstd RpPrtStd
 | |
|  * \ingroup rpplugin
 | |
|  *
 | |
|  * Particle Animation Plugin for RenderWare Graphics.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Current version stamp
 | |
|  */
 | |
| #define rpPRTSTDVERSIONSTAMP                2
 | |
| 
 | |
| /*
 | |
|  * Random Number Generation Macros
 | |
|  */
 | |
| #define PRTSTD_SRAND_MAX                    0xFFFFFFFF
 | |
| #define PRTSTD_SRAND_IMAX                   ((RwReal) 1.0 / (RwReal) PRTSTD_SRAND_MAX)
 | |
| 
 | |
| #define PRTSTD_SRAND(_seed)                 ((_seed) = ((_seed) * 196314165 + 907633515))
 | |
| 
 | |
| /* Real rand -1.0 .. + 1.0 */
 | |
| #define PRTSTD_RSRAND(_seed)                (((RwReal)((RwUInt32) (_seed) * PRTSTD_SRAND_IMAX) * \
 | |
|                                             (RwReal) 2.0) - (RwReal) 1.0)
 | |
| 
 | |
| 
 | |
| 
 | |
| #define PRTSTD_RSRAND2(_seed)               (((RwReal)((RwReal) (_seed) * PRTSTD_SRAND_IMAX) * \
 | |
|                                             (RwReal)1.0))
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \ref RpPrtStdParticleFlags, this type represents the different properties of
 | |
|  * a particle.
 | |
|  */
 | |
| enum RpPrtStdParticleFlags
 | |
| {
 | |
|     rpPRTSTDPARTICLEFLAGEMITTER              = 0x00000001, /**<Particle is an emitter. */
 | |
| 
 | |
|     rpPRTSTDPARTICLEFLAGFORCEENUMSIZEINT    = RWFORCEENUMSIZEINT
 | |
| };
 | |
| 
 | |
| typedef enum RpPrtStdParticleFlags RpPrtStdParticleFlags;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \ref RpPrtStdEmitterFlags, this type represents the different properties of
 | |
|  * an emitter.
 | |
|  */
 | |
| enum RpPrtStdEmitterFlags
 | |
| {
 | |
|     rpPRTSTDEMITTERFLAGALIVE                = 0x00000001, /**< The emitter is alive and should not be removed */
 | |
|     rpPRTSTDEMITTERFLAGACTIVE               = 0x00000002, /**< This indicates the emitter is active or idle */
 | |
|     rpPRTSTDEMITTERFLAGPTANK                = 0x00000004, /**< The emitter uses the \ref rpptank */
 | |
|     rpPRTSTDEMITTERFLAGEMIT                 = 0x00000008, /**< This indicates the emitter can emit new particles */
 | |
|     rpPRTSTDEMITTERFLAGUPDATE               = 0x00000010, /**< This indicates if the emitter is to be updated. */
 | |
|     rpPRTSTDEMITTERFLAGUPDATEPARTICLE       = 0x00000020, /**< This indicated if the emitter's particles are updated. */
 | |
|     rpPRTSTDEMITTERFLAGRENDER               = 0x00000040, /**< This indicates if the emitter is rendered. */
 | |
|     rpPRTSTDEMITTERFLAGRENDERPARTICLE       = 0x00000080, /**< This indicates if the emitter's particles are rendered. */
 | |
|     rpPRTSTDEMITTERFLAGFORCEENUMSIZEINT     = RWFORCEENUMSIZEINT
 | |
| };
 | |
| 
 | |
| typedef enum RpPrtStdEmitterFlags RpPrtStdEmitterFlags;
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| #define rpPRTSTDPARTICLECALLBACKMAX             7
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \ref RpPrtStdParticleCallBackCode, this type represents the different callbacks for
 | |
|  * processing a \ref RpPrtStdParticleBatch. These callbacks will be called at various point for
 | |
|  * processing the particle's custom data.
 | |
|  */
 | |
| enum RpPrtStdParticleCallBackCode
 | |
| {
 | |
|     rpPRTSTDPARTICLECALLBACKUPDATE              = 0, /**< Particle update callback */
 | |
|     rpPRTSTDPARTICLECALLBACKRENDER,                  /**< Particle render callback */
 | |
|     rpPRTSTDPARTICLECALLBACKCREATE,                  /**< Particle create callback */
 | |
|     rpPRTSTDPARTICLECALLBACKDESTROY,                 /**< Particle destroy callback */
 | |
|     rpPRTSTDPARTICLECALLBACKSTREAMREAD,              /**< Particle stream input callback */
 | |
|     rpPRTSTDPARTICLECALLBACKSTREAMWRITE,             /**< Particle stream outout callback */
 | |
|     rpPRTSTDPARTICLECALLBACKSTREAMGETSIZE,           /**< Particle stream get size callback */
 | |
|     rpPRTSTDPARTICLECALLBACKFORCEENUMSIZEINT    = RWFORCEENUMSIZEINT
 | |
| };
 | |
| 
 | |
| typedef enum RpPrtStdParticleCallBackCode RpPrtStdParticleCallBackCode;
 | |
| 
 | |
| #define rpPRTSTDEMITTERCALLBACKMAX              10
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \ref RpPrtStdEmitterCallBackCode, this type represents the different callbacks for
 | |
|  * processing a \ref RpPrtStdEmitter. These callbacks will be called at various point for
 | |
|  * processing the emitter's custom data.
 | |
|  */
 | |
| enum RpPrtStdEmitterCallBackCode
 | |
| {
 | |
|     rpPRTSTDEMITTERCALLBACKEMIT                 = 0, /**< Emitter particle emission callback */
 | |
|     rpPRTSTDEMITTERCALLBACKBEGINUPDATE,              /**< Emitter begin update call back */
 | |
|     rpPRTSTDEMITTERCALLBACKENDUPDATE,                /**< Emitter end update callback */
 | |
|     rpPRTSTDEMITTERCALLBACKBEGINRENDER,              /**< Emitter begin render callback */
 | |
|     rpPRTSTDEMITTERCALLBACKENDRENDER,                /**< Emitter end render callback */
 | |
|     rpPRTSTDEMITTERCALLBACKCREATE,                   /**< Emitter create callback */
 | |
|     rpPRTSTDEMITTERCALLBACKDESTROY,                  /**< Emitter destroy callback */
 | |
|     rpPRTSTDEMITTERCALLBACKSTREAMREAD,               /**< Emitter stream input callback */
 | |
|     rpPRTSTDEMITTERCALLBACKSTREAMWRITE,              /**< Emitter stream output callback */
 | |
|     rpPRTSTDEMITTERCALLBACKSTREAMGETSIZE,            /**< Emitter stream get size callback */
 | |
|     rpPRTSTDEMITTERCALLBACKFORCEENUMSIZEINT     = RWFORCEENUMSIZEINT
 | |
| };
 | |
| 
 | |
| typedef enum RpPrtStdEmitterCallBackCode RpPrtStdEmitterCallBackCode;
 | |
| 
 | |
| typedef RwInt32 RpPrtStdPropertyCode;
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| typedef struct RpPrtStdEmitter RWALIGN(RpPrtStdEmitter, rwMATRIXALIGNMENT);
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdEmitterCallBack
 | |
|  * \ref RpPrtStdEmitterCallBack represents the function called for processing
 | |
|  * a \ref RpPrtStdEmitter. There can several types of the functions, each performing a
 | |
|  * specific task defined by \ref RpPrtStdEmitterCallBackCode.
 | |
|  *
 | |
|  * \param atomic        A pointer to the emitter's parent atomic.
 | |
|  * \param emt           A pointer to the emitter.
 | |
|  * \param data          A pointer to user data.
 | |
|  *
 | |
|  * \return A pointer to the emitter on success. NULL otherwise.
 | |
|  */
 | |
| typedef RpPrtStdEmitter *
 | |
|         (*RpPrtStdEmitterCallBack)
 | |
|             (RpAtomic *atomic, RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| typedef struct RpPrtStdParticleBatch RWALIGN(RpPrtStdParticleBatch, rwMATRIXALIGNMENT);
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdParticleCallBack
 | |
|  * \ref RpPrtStdParticleCallBack represents the function called for processing
 | |
|  * a \ref RpPrtStdParticleBatch. There can be several types of the functions, each
 | |
|  * performing a specific task defined by \ref RpPrtStdParticleCallBackCode.
 | |
|  *
 | |
|  * \param emt           A pointer to the particle batch's parent emitter.
 | |
|  * \param prtBatch      A pointer to the particle batch.
 | |
|  * \param data          A pointer to user data.
 | |
|  *
 | |
|  * \return A pointer to the particle batch on success. NULL otherwise.
 | |
|  */
 | |
| typedef RpPrtStdParticleBatch *
 | |
|         (*RpPrtStdParticleCallBack)
 | |
|             (RpPrtStdEmitter *emt, RpPrtStdParticleBatch *prtBatch, void *data);
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdEmitterCallBackArray
 | |
|  * \ref RpPrtStdEmitterCallBackArray represents a set of callback functions for
 | |
|  * processing a \ref RpPrtStdEmitter. All the functions are of the type \ref
 | |
|  * RpPrtStdEmitterCallBack.
 | |
|  *
 | |
|  * \see RpPrtStdEmitterCallBackCode
 | |
|  */
 | |
| typedef RpPrtStdEmitterCallBack
 | |
|         RpPrtStdEmitterCallBackArray[rpPRTSTDEMITTERCALLBACKMAX];
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdParticleCallBackArray
 | |
|  * \ref RpPrtStdParticleCallBackArray represents a set of callback functions for
 | |
|  * processing a \ref RpPrtStdParticleBatch. All the functions are of the type \ref
 | |
|  * RpPrtStdParticleCallBack.
 | |
|  *
 | |
|  * \see RpPrtStdParticleCallBackCode
 | |
|  */
 | |
| typedef RpPrtStdParticleCallBack
 | |
|         RpPrtStdParticleCallBackArray[rpPRTSTDPARTICLECALLBACKMAX];
 | |
| 
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| typedef struct RpPrtStdEmitterClass RpPrtStdEmitterClass;
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdEClassSetupCallBack
 | |
|  * \ref RpPrtStdEClassSetupCallBack represents the function called for setting up an
 | |
|  * emitter class's set of callback function. The callback function is called
 | |
|  * after an emitter class is streamed in.
 | |
|  *
 | |
|  * \param eClass        A pointer to an emitter class.
 | |
|  *
 | |
|  * \return A pointer to the emitter class on success. NULL otherwise.
 | |
|  */
 | |
| typedef RpPrtStdEmitterClass *
 | |
|         (*RpPrtStdEClassSetupCallBack)
 | |
|             (RpPrtStdEmitterClass *eClass);
 | |
| 
 | |
| typedef struct RpPrtStdParticleClass RpPrtStdParticleClass;
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \typedef RpPrtStdPClassSetupCallBack
 | |
|  * \ref RpPrtStdPClassSetupCallBack represents the function called for setting up an
 | |
|  * emitter class's set of callback function. The callback function is called
 | |
|  * after an emitter class is streamed in.
 | |
|  *
 | |
|  * \param pClass        A pointer to a particle class.
 | |
|  *
 | |
|  * \return A pointer to the particle class on success. NULL otherwise.
 | |
|  */
 | |
| typedef RpPrtStdParticleClass *
 | |
|         (*RpPrtStdPClassSetupCallBack)
 | |
|             (RpPrtStdParticleClass *pClass);
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| typedef struct RpPrtStdPropertyTable RpPrtStdPropertyTable;
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdPropertyTable
 | |
|  * A structure representing properties's data present in an emitter or
 | |
|  * particle.
 | |
|  * An emitter, or particle, are treated as a single block of memory. The
 | |
|  * property table is used to describe the data presents in the memory block.
 | |
|  * It stores the property's id, offset entry from the start of the memory
 | |
|  * block and size in bytes.
 | |
|  */
 | |
| struct RpPrtStdPropertyTable
 | |
| {
 | |
|     RwUInt32                        *propPtr;       /**< Internal usage */
 | |
|     RpPrtStdPropertyTable           *next;          /**< Internal usage */
 | |
| 
 | |
|     RwInt32                         id;             /**< Property table's id */
 | |
| 
 | |
|     RwInt32                         numProp;        /**< Number of properties in the table */
 | |
|     RwInt32                         maxProp;        /**< Internal usage */
 | |
|     RwInt32                         *propID;        /**< Array of properties's id */
 | |
|     RwInt32                         *propOffset;    /**< Array of properties's offset */
 | |
|     RwInt32                         *propSize;      /**< Array of properties's size */
 | |
|     RwInt32                         *propSizeUA;    /**< Internal usage */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitterClass
 | |
|  * A structure representing the collection of data and callbacks for an emitter. An emitter
 | |
|  * class is used to create emitters that share the same properties and callback functions.
 | |
|  * Once created, an emitter class cannot be altered. An emitter class should also not be
 | |
|  * destroyed if emitters of the class are still in use.
 | |
|  */
 | |
| struct RpPrtStdEmitterClass
 | |
| {
 | |
|     RpPrtStdEmitterClass                    *next;          /**< Internal usage */
 | |
| 
 | |
|     RwInt32                                 id;             /**< Emitter class's id */
 | |
| 
 | |
|     RwInt32                                 objSize;        /**< Size of the emitter */
 | |
|     RpPrtStdPropertyTable                   *propTab;       /**< Reference to a table of emitter properties */
 | |
| 
 | |
|     RwInt32                                 numCallback;    /**< Number of callback arrays */
 | |
|     RpPrtStdEmitterCallBackArray            *callback;      /**< Array of emitter callback functions */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleClass
 | |
|  * A structure representing the collection of data and callbacks for a particle. A particle
 | |
|  * class is used to create particle that share the same properties and callback functions.
 | |
|  * Once created, a particle class cannot be altered. A particle class should also not be
 | |
|  * destroyed if particles of the class are still in use.
 | |
|  */
 | |
| struct RpPrtStdParticleClass
 | |
| {
 | |
|     RpPrtStdParticleClass                   *next;          /**< Internal usage */
 | |
| 
 | |
|     RwInt32                                 id;             /**< Particle class's id */
 | |
| 
 | |
|     RwInt32                                 objSize;        /**< Size of a particle */
 | |
|     RpPrtStdPropertyTable                   *propTab;       /**< Reference to a table of particle properties */
 | |
| 
 | |
|     RwInt32                                 numCallback;    /**< Number of callback sets */
 | |
|     RpPrtStdParticleCallBackArray           *callback;      /**< Array of particle batch callback functions */
 | |
| };
 | |
| 
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleBatch
 | |
|  * A structure repsenting a group of particles. For efficient, particles are stored
 | |
|  * in batches rather than individually. All live particles are stored at the head
 | |
|  * of batch with no gaps of dead particles. A counter is used to record the number of
 | |
|  * live particles in the batch. Once a batch has 0 live particles, it will removed
 | |
|  * from the emitter's active particle list to the inactive list.
 | |
|  * The first particle of the batch is given by an offset from the start of the
 | |
|  * particle batch.
 | |
|  */
 | |
| struct RpPrtStdParticleBatch
 | |
| {
 | |
|     RpPrtStdParticleBatch       *next;                      /**< Pointer to the next particle batch */
 | |
| 
 | |
|     RpPrtStdParticleClass       *prtClass;                  /**< Pointer to the particle's class */
 | |
| 
 | |
|     RwInt32                     numPrt;                     /**< Number of particles in the batch */
 | |
|     RwInt32                     maxPrt;                     /**< Maxium number of particles in batch */
 | |
|     RwInt32                     newPrt;                     /**< Start of newly emitted particles in the batch */
 | |
| 
 | |
|     RwInt32                     offset;                     /**< Offset to the first particle, from the start of the
 | |
|                                                              * particle batch */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitter
 | |
|  * A structure repsenting the mandatory data set for any emitter. Each emitter contains information of
 | |
|  * itself and its particles, via the emitter class and particle class respectively. It also contains the
 | |
|  * list of particles, in batches, it had emitted.
 | |
|  * Optional data are stored immediately after the mandatory set. The contents of the optional data are
 | |
|  * described in the emitter class's property table. The offset from the property table are from the start
 | |
|  * of the emitter.
 | |
|  *
 | |
|  * The type of particles emitted are given by the particle class. Each emitter may have only emitter class
 | |
|  * and particle class and these should not be changed during the lifetime of the emitter and its particles.
 | |
|  * The emitter maintains two lists of particle batches, an acitive list, contain still active particles,
 | |
|  * and an inactive list. The maximum number of particles in each batch is given by the prtBatchMaxPrt field.
 | |
|  */
 | |
| struct RpPrtStdEmitter
 | |
| {
 | |
|     RpPrtStdEmitter             *next;                      /**< Pointer to the next emitter */
 | |
| 
 | |
|     RwUInt32                    flag;                       /**< Emitter's property flag */
 | |
| 
 | |
|     RpAtomic                    *atomic;                    /**< Pointer to emitter's parent atomic */
 | |
| 
 | |
|     RpPrtStdEmitterClass        *emtClass;                  /**< Pointer the emitter's class */
 | |
| 
 | |
|     RwInt32                     prtActive;                  /**< Number of particles emitted */
 | |
|     RwInt32                     prtBatchMaxPrt;             /**< Maximum number of particles per batch */
 | |
|     RpPrtStdParticleClass       *prtClass;                  /**< Pointer to the particle's class */
 | |
| 
 | |
|     RpPrtStdParticleBatch       *inactiveBatch,             /**< Circular linked list of inactive particle batches */
 | |
|                                 *activeBatch;               /**< Circular linked list of active particle batches */
 | |
| 
 | |
|     RwReal                      boundingSphere;             /**< Emitter's bounding sphere. */
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| #define rpPRTSTDPROPERTYCODEEMITTER                                 0
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERSTANDARD                         1
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTCOLOR                         2
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTTEXCOORDS                     3
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTANIMFRAME                     4
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTSIZE                          5
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPTANK                            6
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTVELOCITY                      7
 | |
| #define rpPRTSTDPROPERTYCODEEMITTERPRTMATRIX                        8
 | |
| 
 | |
| #define rpPRTSTDEMITTERPROPERTYCOUNT                                9
 | |
| 
 | |
| #define rpPRTSTDEMITTERDATAFLAGSTANDARD                     0x00000001
 | |
| #define rpPRTSTDEMITTERDATAFLAGPRTCOLOR                     0x00000002
 | |
| #define rpPRTSTDEMITTERDATAFLAGPRTTEXCOORDS                 0x00000004
 | |
| #define rpPRTSTDEMITTERDATAFLAGPRTANIMFRAME                 0x00000008
 | |
| #define rpPRTSTDEMITTERDATAFLAGPRTSIZE                      0x00000010
 | |
| #define rpPRTSTDEMITTERDATAFLAGPTANK                        0x00000020
 | |
| #define rpPRTSTDEMITTERDATAFLAGPRTMATRIX                    0x00000040
 | |
| 
 | |
| 
 | |
| typedef struct RpPrtStdEmitterStandard RpPrtStdEmitterStandard;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitterStandard
 | |
|  * A structure represent the set of properties for a basic emitter. The structure is stored as
 | |
|  * a single optional data in the emitter property table.
 | |
|  *
 | |
|  * The basic emitter uses a 'time' variable to control particle emissions. A large time gap between
 | |
|  * emission can give pulse effects where as a small time gap produces a streaming effects. Particles
 | |
|  * can be emitted from a single point, line, area or a volume.
 | |
|  *
 | |
|  * Particles emitted from an emitter are of the same type. An emitter cannot emit different types of
 | |
|  * particles. Once an emitter has reached its maximum number of particles, no further particles are
 | |
|  * emitted until some of the existing particles have died.
 | |
|  *
 | |
|  * Most properties have a bias value to vary the property value. This uses the seed field
 | |
|  * to give a degreee of randomness.
 | |
|  */
 | |
| struct RpPrtStdEmitterStandard
 | |
| {
 | |
|     RwInt32                     seed;                           /**< Seed for random number generator */
 | |
| 
 | |
|     RwInt32                     maxPrt;                         /**< Maximum number of active particles */
 | |
| 
 | |
|     RwReal                      currTime,                       /**< Current timestamp for emitter */
 | |
|                                 prevTime;                       /**< Previous timestamp for emitter */
 | |
|     RwV3d                       force;                          /**< External force applied to particles */
 | |
| 
 | |
|     RwV3d                       emtPos,                         /**< Emitter position */
 | |
|                                 emtSize;                        /**< Emitter size. This is the volume where new particles
 | |
|                                                                  * are emitted */
 | |
|     RwReal                      emtEmitGap,                     /**< Time gap between emission */
 | |
|                                 emtEmitGapBias,                 /**< Time gap bias */
 | |
|                                 emtPrevEmitTime,                /**< Previous particle emission time */
 | |
|                                 emtEmitTime;                    /**< Next particle emission time */
 | |
|     RwInt32                     emtPrtEmit,                     /**< Number of particle emit per emission */
 | |
|                                 emtPrtEmitBias;                 /**< Particle emission bias */
 | |
| 
 | |
|     RwReal                      prtInitVel,                     /**< Particle's initial speed */
 | |
|                                 prtInitVelBias;                 /**< Particle's initial speed bias */
 | |
|     RwReal                      prtLife,                        /**< Particle's duration */
 | |
|                                 prtLifeBias;                    /**< Particle's duration bias */
 | |
| 
 | |
|     RwV3d                       prtInitDir,                     /**< Particle's initial direction */
 | |
|                                 prtInitDirBias;                 /**< particle's initial direction bias */
 | |
| 
 | |
|     RwV2d                       prtSize;                        /**< Particle's size */
 | |
| 
 | |
|     RwRGBA                      prtColor;                       /**< Particle's color */
 | |
| 
 | |
|     RwTexCoords                 prtUV[4];                       /**< Particle's texture coordindates */
 | |
|     RwTexture                   *texture;                       /**< Particle's texture */
 | |
| 
 | |
|     RwMatrix                    *ltm;                           /**< LTM to transform particle coordinates from local space
 | |
|                                                                  * to world space */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPrtColor RpPrtStdEmitterPrtColor;
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitterPrtColor
 | |
|  * An optional structure to represent the change in color of a particle from birth to death.
 | |
|  * The particles will start with the prtStartCol and ends with endPrtColor. The particle's
 | |
|  * life is used to interpolate the colors.
 | |
|  *
 | |
|  * If this structure is not present, then the particles will have a constant color.
 | |
|  */
 | |
| struct RpPrtStdEmitterPrtColor
 | |
| {
 | |
|     RwRGBAReal                  prtStartCol,                    /**< Particle start color */
 | |
|                                 prtStartColBias;                /**< Particle start color bias */
 | |
|     RwRGBAReal                  prtEndCol,                      /**< Particle end color */
 | |
|                                 prtEndColBias;                  /**< Particle end color bias */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPrtTexCoords RpPrtStdEmitterPrtTexCoords;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitterPrtTexCoords
 | |
|  * An optional structure to represent the change in texcoords of a particle from birth to death.
 | |
|  * The particles will start with prtStartUV0 and prtStartUV1 and ends with endPrtEndUV0 and endPrtEndUV1.
 | |
|  * The particle's life is used to interpolate the texcoords.
 | |
|  *
 | |
|  * A particle can have two texcoords representing the top left and bottom right respectively. By varying
 | |
|  * the texcoords can give an animated texture effect on a particle.
 | |
|  *
 | |
|  * If this structure is not present, then the particles will have a constant texcoords.
 | |
|  */
 | |
| struct RpPrtStdEmitterPrtTexCoords
 | |
| {
 | |
|     RwTexCoords                 prtStartUV0,                        /**< Particle start top left texcoords */
 | |
|                                 prtStartUV0Bias;                    /**< Particle start top left texcoords bias */
 | |
|     RwTexCoords                 prtEndUV0,                          /**< Particle end top left texcoords */
 | |
|                                 prtEndUV0Bias;                      /**< Particle end top left texcoords bias */
 | |
|     RwTexCoords                 prtStartUV1,                        /**< Particle start bottom right texcoords */
 | |
|                                 prtStartUV1Bias;                    /**< Particle start botton right texcoords bias */
 | |
|     RwTexCoords                 prtEndUV1,                          /**< Particle end bottom right texcoords */
 | |
|                                 prtEndUV1Bias;                      /**< Particle end bottom right texcoords bias */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPrtAnimFrame RpPrtStdEmitterPrtAnimFrame;
 | |
| 
 | |
| struct RpPrtStdEmitterPrtAnimFrame
 | |
| {
 | |
|     RwInt32                     prtNumFrames;
 | |
| 
 | |
|     RwTexCoords                 *prtAnimFrameTexCoords;
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPrtSize RpPrtStdEmitterPrtSize;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdEmitterPrtSize
 | |
|  * An optional structure to represent the change in size of a particle from birth to death.
 | |
|  * The particles will start with prtStartSize and ends with prtEndSize. The particle's life
 | |
|  * is used to interpolate the size.
 | |
|  *
 | |
|  * If this structure is not present, then the particles will have a constant size.
 | |
|  */
 | |
| struct RpPrtStdEmitterPrtSize
 | |
| {
 | |
|     RwV2d                       prtStartSize,                       /**< Particle start size */
 | |
|                                 prtStartSizeBias;                   /**< Particle start size bias */
 | |
|     RwV2d                       prtEndSize,                         /**< Particle end size */
 | |
|                                 prtEndSizeBias;                     /**< Particle end size bias */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPrtMatrix RWALIGN(RpPrtStdEmitterPrtMatrix, rwMATRIXALIGNMENT);
 | |
| 
 | |
| struct RpPrtStdEmitterPrtMatrix
 | |
| {
 | |
|     RwMatrix                    prtCnsMtx;
 | |
| 
 | |
|     RwV3d                       prtPosMtxAt,
 | |
|                                 prtPosMtxAtBias;
 | |
|     RwV3d                       prtPosMtxUp,
 | |
|                                 prtPosMtxUpBias;
 | |
| 
 | |
|     RwInt32                     flags;
 | |
| };
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| 
 | |
| 
 | |
| enum RpPrtStdPTankPropertyCode
 | |
| {
 | |
|     rpPRTSTDPTANKPROPPARTICLESMAX                   = 0,
 | |
|     rpPRTSTDPTANKPROPDATAFLAGS,
 | |
|     rpPRTSTDPTANKPROPPLATFORMFLAGS,
 | |
|     rpPRTSTDPTANKPROPPTANK,
 | |
|     rpPRTSTDPTANKPROPFORCEENUMSIZEINT               = RWFORCEENUMSIZEINT
 | |
| };
 | |
| 
 | |
| typedef enum RpPrtStdPTankPropertyCode RpPrtStdPTankPropertyCode;
 | |
| 
 | |
| typedef struct RpPrtStdEmitterPTank RpPrtStdEmitterPTank;
 | |
| struct RpPrtStdEmitterPTank
 | |
| {
 | |
|     RwUInt32                    dataFlags,
 | |
|                                 platFlags,
 | |
|                                 numPrt,
 | |
|                                 maxPrt,
 | |
|                                 updateFlags,
 | |
|                                 emitFlags;
 | |
|     RpAtomic                    *pTank;
 | |
|     RwChar                      **dataInPtrs,
 | |
|                                 **dataOutPtrs;
 | |
|     RwInt32                     *dataStride;
 | |
| };
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLESTANDARD                0
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLEPOSITION                1
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLECOLOR                   2
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLETEXCOORDS               3
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLEANIMFRAME               4
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLESIZE                    5
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLEVELOCITY                6
 | |
| #define rpPRTSTDPROPERTYCODEPARTICLEMATRIX                  7
 | |
| 
 | |
| #define rpPRTSTDPARTICLEPROPERTYCOUNT                       8
 | |
| 
 | |
| #define rpPRTSTDPARTICLEDATAFLAGSTANDARD                    0x00000001
 | |
| #define rpPRTSTDPARTICLEDATAFLAGPOSITION                    0x00000002
 | |
| #define rpPRTSTDPARTICLEDATAFLAGCOLOR                       0x00000004
 | |
| #define rpPRTSTDPARTICLEDATAFLAGTEXCOORDS                   0x00000008
 | |
| #define rpPRTSTDPARTICLEDATAFLAGANIMFRAME                   0x00000010
 | |
| #define rpPRTSTDPARTICLEDATAFLAGSIZE                        0x00000020
 | |
| #define rpPRTSTDPARTICLEDATAFLAGVELOCITY                    0x00000040
 | |
| #define rpPRTSTDPARTICLEDATAFLAGMATRIX                      0x00000080
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleStandard
 | |
|  * A structure represent the set of properties for a basic particle. This structure is mandatory
 | |
|  * for all particles.
 | |
|  * The structure contain the life duration of the particle. The particle will be removed when the current
 | |
|  * time is greater than the end time. The particle timer always starts at zero.
 | |
|  *
 | |
|  * The inverted end time is for interpolating optional particle properties.
 | |
|  */
 | |
| typedef struct RpPrtStdParticleStandard RpPrtStdParticleStandard;
 | |
| struct RpPrtStdParticleStandard
 | |
| {
 | |
|     RwInt32                     flag;                               /**< Particle's property flag */
 | |
|     RwReal                      currTime,                           /**< Particle's curr time  */
 | |
|                                 endTime,                            /**< Particle's end time */
 | |
|                                 invEndTime;                         /**< Particle's inv end for interpolation */
 | |
| };
 | |
| 
 | |
| 
 | |
| typedef struct RpPrtStdParticleColor RpPrtStdParticleColor;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleColor
 | |
|  * A structure representing the change in a particle's color during its life time. The structure is optional
 | |
|  * and should not be used if particles have a constant color.
 | |
|  */
 | |
| struct RpPrtStdParticleColor
 | |
| {
 | |
|     RwRGBAReal                  startCol,                           /**< Particle's end size bias */
 | |
|                                 deltaCol;                           /**< Particle's color rate of change */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdParticleTexCoords RpPrtStdParticleTexCoords;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleTexCoords
 | |
|  * A structure representing the change in a particle's texcoords during its life time. The structure is optional
 | |
|  * and should not be used if particles have a constant texcoords.
 | |
|  */
 | |
| struct RpPrtStdParticleTexCoords
 | |
| {
 | |
|     RwTexCoords                 startUV0,                           /**< Particle's starting top left texcoords */
 | |
|                                 startUV1;                           /**< Particle's starting bottom right texcoords */
 | |
|     RwTexCoords                 deltaUV0,                           /**< Particle's top left texcoords rate of change */
 | |
|                                 deltaUV1;                           /**< Particle's bottom right texcoords rate of change */
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdParticleAnimFrame RpPrtStdParticleAnimFrame;
 | |
| 
 | |
| struct RpPrtStdParticleAnimFrame
 | |
| {
 | |
|     RwInt32                     frame;
 | |
| 
 | |
|     RwReal                      delta;
 | |
| };
 | |
| 
 | |
| typedef struct RpPrtStdParticleSize RpPrtStdParticleSize;
 | |
| 
 | |
| /**
 | |
|  * \ingroup rpprtstd
 | |
|  * \struct RpPrtStdParticleSize
 | |
|  * A structure representing the change in a particle's size during its life time. The structure is optional
 | |
|  * and should not be used if particles have a constant size.
 | |
|  */
 | |
| struct RpPrtStdParticleSize
 | |
| {
 | |
|     RwV2d                       startSize,                          /**< Particle's starting size */
 | |
|                                 deltaSize;                          /**< Particle's size rate of change */
 | |
|     RwV2d                       currSize,                           /**< Particle's current size. Internal use only */
 | |
|                                 invCurrSize;                        /**< Particle's inverse current size. Internal use only */
 | |
| };
 | |
| 
 | |
| /************************************************************************
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  ************************************************************************/
 | |
| 
 | |
| #ifdef    __cplusplus
 | |
| extern "C"
 | |
| {
 | |
| #endif         /* __cplusplus */
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RwBool
 | |
| RpParticleStandardPluginAttach( void );
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpAtomic *
 | |
| RpPrtStdAtomicCreate(RpPrtStdEmitterClass *eClass, void *data);
 | |
| 
 | |
| extern RpAtomic *
 | |
| RpPrtStdAtomicUpdate(RpAtomic *atomic, void *data);
 | |
| 
 | |
| extern RpAtomic *
 | |
| RpPrtStdAtomicSetEmitter(RpAtomic *atomic, RpPrtStdEmitter *emt);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdAtomicGetEmitter(RpAtomic *atomic);
 | |
| 
 | |
| extern RpAtomic *
 | |
| RpPrtStdAtomicForAllEmitter(RpAtomic *atomic,
 | |
|                             RpPrtStdEmitterCallBack callback,
 | |
|                             void *data);
 | |
| 
 | |
| extern RpAtomic *
 | |
| RpPrtStdAtomicAddEmitter(RpAtomic *,
 | |
|                          RpPrtStdEmitter *emt);
 | |
| 
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterCreate(RpPrtStdEmitterClass *eClass);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdEmitterDestroy(RpPrtStdEmitter *emt);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterForAllParticleBatch(RpPrtStdEmitter *emt,
 | |
|                                     RpPrtStdParticleCallBack callback,
 | |
|                                     void * data);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterAddEmitter(RpPrtStdEmitter *emtHead,
 | |
|                           RpPrtStdEmitter *emt);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterLinkPTank(RpPrtStdEmitter *emt,RpAtomic *ptank);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterDestroyParticleBatch(RpPrtStdEmitter *emt);
 | |
| 
 | |
| extern RpPrtStdParticleBatch *
 | |
| RpPrtStdEmitterNewParticleBatch(RpPrtStdEmitter *emt);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterAddParticleBatch(RpPrtStdEmitter *emt,
 | |
|                                 RpPrtStdParticleBatch *prtBatch);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterSetPClass(RpPrtStdEmitter *emt,
 | |
|                                  RpPrtStdParticleClass *pClass,
 | |
|                                  RwInt32 maxPrt);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterGetPClass(RpPrtStdEmitter *emt,
 | |
|                                  RpPrtStdParticleClass **pClass,
 | |
|                                  RwInt32 *maxPrt);
 | |
| 
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpPrtStdParticleBatch *
 | |
| RpPrtStdParticleBatchCreate(RpPrtStdParticleClass *pClass, RwInt32 maxPrt);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdParticleBatchDestroy(RpPrtStdParticleBatch *prtBatch);
 | |
| 
 | |
| extern RpPrtStdParticleBatch *
 | |
| RpPrtStdParticleBatchAddBatch(RpPrtStdParticleBatch *prtBatchHead,
 | |
|                               RpPrtStdParticleBatch *prtBatch);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpPrtStdPropertyTable *
 | |
| RpPrtStdPropTabCreate(RwInt32 numProp,
 | |
|                             RwInt32 *propID, RwInt32 *propStride);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdPropTabDestroy(RpPrtStdPropertyTable *propTab);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdPropertyTable *
 | |
| RpPrtStdPropTabGetProperties(RpPrtStdPropertyTable *propTab,
 | |
|                              RwInt32 *numProp,
 | |
|                              RwInt32 **propID,
 | |
|                              RwInt32 **propOffset,
 | |
|                              RwInt32 **propSize);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdPropTabGetPropOffset(RpPrtStdPropertyTable *propTab,
 | |
|                              RwInt32 propID);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdPropTabGetPropIndex(RpPrtStdPropertyTable *propTab,
 | |
|                             RwInt32 propID);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdPropertyTable *
 | |
| RpPrtStdPropTabGet(RwInt32 id);
 | |
| 
 | |
| extern RpPrtStdPropertyTable *
 | |
| RpPrtStdPropTabStreamRead(RwStream *stream);
 | |
| 
 | |
| extern RpPrtStdPropertyTable *
 | |
| RpPrtStdPropTabStreamWrite(RpPrtStdPropertyTable *eClass,
 | |
|                            RwStream *stream);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdPropTabStreamGetSize(RpPrtStdPropertyTable *eClass);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdEClassDestroy(RpPrtStdEmitterClass *eClass);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassCreate( void );
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassSetCallBack(RpPrtStdEmitterClass *eClass,
 | |
|                                 RwInt32 numCallback,
 | |
|                                 RpPrtStdEmitterCallBackArray *emtCB);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassGetCallBack(RpPrtStdEmitterClass *eClass,
 | |
|                            RwInt32 *numCallback,
 | |
|                            RpPrtStdEmitterCallBackArray **emtCB);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassSetPropTab(RpPrtStdEmitterClass *eClass,
 | |
|                          RpPrtStdPropertyTable *propTab);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassGetPropTab(RpPrtStdEmitterClass *eClass,
 | |
|                          RpPrtStdPropertyTable **propTab);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassGet(RwInt32 id);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassStreamRead(RwStream *stream);
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassStreamWrite(RpPrtStdEmitterClass *eClass,
 | |
|                                  RwStream *stream);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdEClassStreamGetSize(RpPrtStdEmitterClass *eClass);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassCreate( void );
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdPClassDestroy(RpPrtStdParticleClass *pClass);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassSetCallBack(RpPrtStdParticleClass *pClass,
 | |
|                                  RwInt32 numCallback,
 | |
|                                  RpPrtStdParticleCallBackArray *prtCB);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassGetCallBack(RpPrtStdParticleClass *pClass,
 | |
|                                  RwInt32 *numCallback,
 | |
|                                  RpPrtStdParticleCallBackArray **prtCB);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassSetPropTab(RpPrtStdParticleClass *pClass,
 | |
|                                       RpPrtStdPropertyTable *propTab);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassGetPropTab(RpPrtStdParticleClass *pClass,
 | |
|                                       RpPrtStdPropertyTable **propTab);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassGet(RwInt32 id);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassStreamRead(RwStream *stream);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassStreamWrite(RpPrtStdParticleClass *pClass,
 | |
|                                  RwStream *stream);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdPClassStreamGetSize(RpPrtStdParticleClass *pClass);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdSetEClassSetupCallBack(RpPrtStdEClassSetupCallBack emtCB);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdGetEClassSetupCallBack(RpPrtStdEClassSetupCallBack *emtCB);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdSetPClassSetupCallBack(RpPrtStdPClassSetupCallBack prtCB);
 | |
| 
 | |
| extern RwBool
 | |
| RpPrtStdGetPClassSetupCallBack(RpPrtStdPClassSetupCallBack *prtCB);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| 
 | |
| extern RwStream *
 | |
| RpPrtStdGlobalDataStreamRead(RwStream *stream);
 | |
| 
 | |
| extern RwStream *
 | |
| RpPrtStdGlobalDataStreamWrite(RwStream *stream);
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdGlobalDataStreamGetSize( void );
 | |
| 
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterDefaultCB(RpAtomic * atomic,
 | |
|                          RpPrtStdEmitter *prtEmt, void * data);
 | |
| 
 | |
| 
 | |
| extern RpPrtStdParticleBatch *
 | |
| RpPrtStdParticleDefaultCB(RpPrtStdEmitter * prtEmt,
 | |
|                           RpPrtStdParticleBatch *prtBatch, void * data);
 | |
| 
 | |
| /************************************************************************/
 | |
| 
 | |
| extern RpPrtStdParticleBatch *
 | |
| RpPrtStdParticleStdUpdateCB(RpPrtStdEmitter *emt,
 | |
|                                  RpPrtStdParticleBatch *prtBatch, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdEmitCB(RpAtomic *atomic,
 | |
|                               RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdCreateCB(RpAtomic *atomic,
 | |
|                                 RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdBeginUpdateCB(RpAtomic *atomic,
 | |
|                                      RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdEndUpdateCB(RpAtomic *atomic,
 | |
|                                    RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdRenderCB(RpAtomic *atomic,
 | |
|                                 RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdStreamReadCB(RpAtomic *atomic,
 | |
|                                     RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdStreamWriteCB(RpAtomic *atomic,
 | |
|                                      RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| extern RpPrtStdEmitter *
 | |
| RpPrtStdEmitterStdStreamGetSizeCB(RpAtomic *atomic,
 | |
|                                        RpPrtStdEmitter *emt, void *data);
 | |
| 
 | |
| 
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassStdCreate( RwInt32 dataFlag );
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdEClassStdCreateID( RwInt32 dataFlag );
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassStdCreate( RwInt32 dataFlag );
 | |
| 
 | |
| extern RwInt32
 | |
| RpPrtStdPClassStdCreateID( RwInt32 dataFlag );
 | |
| 
 | |
| extern RpPrtStdEmitterClass *
 | |
| RpPrtStdEClassStdSetupCB(RpPrtStdEmitterClass *eClass);
 | |
| 
 | |
| extern RpPrtStdParticleClass *
 | |
| RpPrtStdPClassStdSetupCB(RpPrtStdParticleClass *pClass);
 | |
| 
 | |
| 
 | |
| #ifdef    __cplusplus
 | |
| }
 | |
| #endif         /* __cplusplus */
 | |
| 
 | |
| /*---- end: ./prtstd.h----*/
 | |
| 
 | |
| /*---- start: c:/daily/rwsdk/plugin/prtstd/d3d8/prtstdplatform.h----*/
 | |
| /*---- end: c:/daily/rwsdk/plugin/prtstd/d3d8/prtstdplatform.h----*/
 | |
| 
 | |
| #endif /* RPPRTSTD_H */
 | |
| 
 | |
| 
 |