//
// Tools_SmoothSkin_Processor_PC.h
//
// Created by RJF - 17 June 2005
//
// Copyright (C) 2005 Rebellion, All Rights Reserved.
//

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif

#ifndef __TOOLS_SMOOTHSKIN_PROCESSOR_PC_H__
#define __TOOLS_SMOOTHSKIN_PROCESSOR_PC_H__

class Asura_Chunk_Stream;
class Tools_SmoothSkin_Processor;
class Tools_SmoothSkin_PC_Material;

class Tools_SmoothSkin_PC_Processor
{
public:
	Tools_SmoothSkin_PC_Processor(const Tools_SmoothSkin_Processor& xProcessor);
	~Tools_SmoothSkin_PC_Processor();
	//If bStripify is false then the 'strips' will just contain tri-lists instead. RAR 05/01/2007
	bool Initialise(bool bStripify = true);
#if defined(ASURA_TARGET_SM3)
	bool InitialiseV2(bool bStripify = true);
	bool InitialiseV2FromHierarchyProcessor();
#endif

	bool OutputToChunk(Asura_Chunk_Stream& xStream, bool bConvertMaterialIDs) const;

#if defined(ASURA_TARGET_SM3)
	bool OutputToChunk_SmoothSkinSM3(Asura_Chunk_Stream& xStream, bool bConvertMaterialIDs) const;
	bool OutputToChunkV2( Asura_Chunk_Stream& xStream ) const;
#endif

protected:
	const Tools_SmoothSkin_Processor& m_xSrcProcessor;
	Tools_SmoothSkin_PC_Material* m_pxMaterial;
	bool m_bTriLists;

#if defined(ASURA_TARGET_SM3)
	// (from 360 version...)
	class ProcessedStrip;
	const char*			m_szSrcName;
	ProcessedStrip*	   m_pxProcessedStrips;
	u_int			   m_uNumProcessedStrips;	
	u_int              m_uTotalVertices;
	u_int              m_uTotalIndices;
	u_int              m_uTotalTriangles;
#endif

};

#endif//__TOOLS_SMOOTHSKIN_PROCESSOR_PC_H__
