/*!****************************************************************************

 @file         PVRTBoneBatch.h
 @copyright    Copyright (c) Imagination Technologies Limited.
 @brief        Utility functions which process vertices.

******************************************************************************/
#ifndef _PVRTBONEBATCH_H_
#define _PVRTBONEBATCH_H_

#include "PVRTVertex.h"
#include <stdlib.h>

/*!***************************************************************************
 Handles a batch of bones
*****************************************************************************/
/*!***************************************************************************
 @class CPVRTBoneBatches
 @brief A class for processing vertices into bone batches
*****************************************************************************/
class CPVRTBoneBatches
{
public:
	int	*pnBatches;			/*!< Space for nBatchBoneMax bone indices, per batch */
	int	*pnBatchBoneCnt;	/*!< Actual number of bone indices, per batch */
	int	*pnBatchOffset;		/*!< Offset into triangle array, per batch */
	int nBatchBoneMax;		/*!< Stored value as was passed into Create() */
	int	nBatchCnt;			/*!< Number of batches to render */

	/*!***********************************************************************
	 @brief      	Fills the bone batch structure
	 @param[out]	pnVtxNumOut		vertex count
	 @param[out]	pVtxOut			Output vertices (program must free() this)
	 @param[in,out]	pui32Idx		index array for triangle list
	 @param[in]		nVtxNum			vertex count
	 @param[in]		pVtx			vertices
	 @param[in]		nStride			Size of a vertex (in bytes)
	 @param[in]		nOffsetWeight	Offset in bytes to the vertex bone-weights
	 @param[in]		eTypeWeight		Data type of the vertex bone-weights
	 @param[in]		nOffsetIdx		Offset in bytes to the vertex bone-indices
	 @param[in]		eTypeIdx		Data type of the vertex bone-indices
	 @param[in]		nTriNum			Number of triangles
	 @param[in]		nBatchBoneMax	Number of bones a batch can reference
	 @param[in]		nVertexBones	Number of bones affecting each vertex
	 @return		PVR_SUCCESS if successful
	*************************************************************************/
	EPVRTError Create(
		int					* const pnVtxNumOut,
		char				** const pVtxOut,
		unsigned int		* const pui32Idx,
		const int			nVtxNum,
		const char			* const pVtx,
		const int			nStride,
		const int			nOffsetWeight,
		const EPVRTDataType	eTypeWeight,
		const int			nOffsetIdx,
		const EPVRTDataType	eTypeIdx,
		const int			nTriNum,
		const int			nBatchBoneMax,
		const int			nVertexBones);

	/*!***********************************************************************
	 @brief      	Destroy the bone batch structure
	*************************************************************************/
	void Release()
	{
		FREE(pnBatches);
		FREE(pnBatchBoneCnt);
		FREE(pnBatchOffset);
		nBatchCnt = 0;
	}
};


#endif /* _PVRTBONEBATCH_H_ */

/*****************************************************************************
 End of file (PVRTBoneBatch.h)
*****************************************************************************/