#pragma once

//! @file Mix/Graphics/IDeviceObject.h
//! @brief デバイスオブジェクトインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Graphics{

	//! @class IDeviceObject
	//! @brief デバイスオブジェクトインターフェース
	class IDeviceObject : public Mix::Reference
	{
	public:
		//! @enum TYPE
		//! @brief タイプ列挙定数
		enum TYPE
		{
			VERTEX_LAYOUT	= 0,	//!< バーテックスレイアウト

			COMPUTE_SHADER	= 1,	//!< コンピュートシェーダー
			HULL_SHADER		= 2,	//!< ハルシェーダー
			DOMAIN_SHADER	= 3,	//!< ドメインシェーダー
			GEOMETRY_SHADER	= 4,	//!< ジオメトリシェーダー
			VERTEX_SHADER	= 5,	//!< バーテックスシェーダー
			PIXEL_SHADER	= 6,	//!< ピクセルシェーダー

			SHADER_CONSTANT	= 7,	//!< シェーダーコンスタント

			VERTEX_BUFFER	= 8,	//!< バーテックスバッファー
			INDEX_BUFFER	= 9,	//!< インデックスバッファー

			TEXTURE			= 10,	//!< テクスチャ

			QUERY			= 11,	//!< クエリ
		};

	protected:
		//! @brief デストラクタ
		virtual ~IDeviceObject( void ) {}

	public:
		//! @brief タイプを取得します
		//! @return タイプを表す Mix::Graphics::IDeviceObject::TYPE 列挙定数を返します
		virtual Mix::Graphics::IDeviceObject::TYPE GetType( void ) const = 0;
	};

}}
