/*!	
	@file
	@brief	描画命令メッセージ 定義
*/

#ifndef CRenderMessage_h
#define CRenderMessage_h

#include"../Setup/CompileMode.h"
#include"../Template/Mathematics.h"
#include"../Auxiliary/mstring.h"
#include<boost/smart_ptr.hpp>
#include<vector>


namespace Maid
{
	//	描画スレッドに投げる　メッセージクラス

	namespace RenderMessage
	{
		class Base
		{
		public:
			//	描画メッセージ
			enum MESSAGE
			{
				NONE,				//!<	何もしない

				SCREENCHANGE,		//!<	スクリーンモード変更

				REGISTSURFACE,		//!<	サーフェスの登録
				REGISTTEXTURE,		//!<	テクスチャの登録
				REGISTRTTEXTURE,	//!<	レンダリングテクスチャの作成
				REGISTVERTEX,		//!<	頂点の登録
				REGISTINDEX,		//!<	インデックスの登録
				REGISTVERTEXSHADER,	//!<	バーテックスシェーダーの登録
				REGISTVERTEXDECLARATION,	//!<	頂点定義の登録
				REGISTPIXELSHADER,	//!<	ピクセルシェーダーの登録

				DELETESURFACE,		//!<	サーフェスの破棄
				DELETETEXTURE,		//!<	テクスチャの破棄
				DELETEVERTEX,		//!<	頂点の破棄
				DELETEINDEX,		//!<	インデックスの破棄
				DELETEVERTEXSHADER,	//!<	バーテックスシェーダーの破棄
				DELETEVERTEXDECLARATION,	//!<	頂点定義の登録
				DELETEPIXELSHADER,	//!<	ピクセルシェーダーの破棄


				RENDERTARGET_CLEAR_COLOR,		//!<	描画先のクリア
				RENDERTARGET_CLEAR_Z,			//!<	描画先のクリア

				UNSETTEXTURE,		//!<	テクスチャをはずす
				RESETRENDERTARGET,	//!<	レンダーターゲットのリセット
				SETRENDERTARGET,	//!<	レンダーターゲットのセット
				SETTEXTURE,			//!<	テクスチャのセット
				SETVERTEX,			//!<	頂点のセット
				SETINDEX,			//!<	インデックスのセット
				SETVERTEXSHADER,	//!<	バーテックスシェーダーのセット
				SETPIXELSHADER,		//!<	ピクセルシェーダーのセット
				SETVERTEXDECLARATION,	//!<	頂点定義のセット

				SETVERTEXSHADER_CONSTF,	//!<	const float セット

				SETVIEWPORT,		//!<	ビューポートの設定
				SETRENDERSTATE,		//!<	レンダーステート
				SETSAMPLERSTATE,

				DRAWPRIMITIVE,		//!<	ポリゴンの描画
				DRAWPRIMITIVEUP,	//!<	ポリゴンの描画
				DRAWINDEXPRIMITIVE,	//!<	ポリゴンの描画
				DRAWINDEXPRIMITIVEUP,	//!<	ポリゴンの描画

				COPYSURFACE,		//!<	システムメモリに転送
				GETVIDEOINFO,		//!<	ビデオ能力を取得
			};

			Base( MESSAGE mess ) : Message(mess){}

			const MESSAGE	Message;
			mstring GetMessage() const;
		};
	}

	typedef	boost::shared_ptr<RenderMessage::Base>	SPRENDERMESSAGE;
	typedef	MySTL::vector<SPRENDERMESSAGE>			RENDERMESSAGEQUE;

	typedef boost::shared_ptr<MySTL::vector<unt08> > SPBINARY;

}


#endif
