#include"TraceMode.h"
#include"CGraphicCore.h"
#include"../CRenderMessageImpl1.h"



namespace Maid
{

	/*!
	 	@class CGraphicCore CGraphicCore.h
	 	@brief グラフィック周りを管理するクラス
			   このクラスはコア部分になので、低レベルな機能しかありません
	 */

CGraphicCore::CGraphicCore()
{
}

CGraphicCore::~CGraphicCore()
{
	Finalize();
}

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
//! 初期化
/*!
	@param	pDriver	[i ]	使うドライバ
	@param	Mode	[i ]	最初の解像度
 */
void CGraphicCore::Initialize( const SPVIDEOCARDDRIVER& pDriver, const IVideoCardDriver::SCREENMODE& Mode  )
{
	m_pDriver = pDriver;

	m_DefaultScreenMode = Mode;

	m_pDriver->Initialize(m_DefaultScreenMode);
}

void CGraphicCore::Finalize()
{
	if( m_pDriver.get()==NULL ) { return ; }

	{
		//	残っているデータがないか確認

		for( SURFACEMAP::iterator ite=m_SurfaceMap.begin(); ite!=m_SurfaceMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
		for( TEXTUREMAP::iterator ite=m_TextureMap.begin(); ite!=m_TextureMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
		for( INDEXMAP::iterator ite=m_IndexMap.begin(); ite!=m_IndexMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
		for( VERTEXMAP::iterator ite=m_VertexMap.begin(); ite!=m_VertexMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
		for( VERTEXSHADERMAP::iterator ite=m_VertexShaderMap.begin(); ite!=m_VertexShaderMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
		for( PIXELSHADERMAP::iterator ite=m_PixelShaderMap.begin(); ite!=m_PixelShaderMap.end(); ++ite )
		{
			MAID_ASSERT( true, ite->first << MAIDTEXT("が残っています") );
		}
	}

	m_pDriver->Finalize();
	m_pDriver.reset();
}





}

