#pragma once

//! @file Mix/Graphics/IIndexBuffer.h
//! @brief インデックスバッファインターフェースインクルードファイル

#include "Mix/Graphics/IDeviceObject.h"

namespace Mix{ namespace Graphics{

	//! @class IIndexBuffer
	//! @brief インデックスバッファインターフェース
	class IIndexBuffer : public Mix::Graphics::IDeviceObject
	{
	protected:
		//! @brief デストラクタ
		virtual ~IIndexBuffer( void ){}

	public:
		//! @brief ロックして、書き込める状態にします
		//! @return 成功した場合は True を返します
		virtual Boolean Lock( void ) = 0;
		//! @brief アンロックして、描画できる状態にします
		virtual void Unlock( void ) = 0;

		//! @brief インデックスを書き込みます
		//! @param[in] pData 書き込むインデックス
		//! @param[in] count 書き込むインデックスの数
		//! @return 成功した場合は True を返します
		virtual Boolean Push( const void* pData, UInt32 count ) = 0;
		//! @brief インデックスの書き込み予約をします
		//! @param[in] count 書き込むインデックスの数
		//! @return 成功した場合は、書き込み先のポインタを取得します<br>
		//! 失敗した場合は NULL を返します
		virtual void* Push( UInt32 count ) = 0;

		//! @brief 書き込まれているインデックスをクリアします
		virtual void Clear( void ) = 0;

		//! @brief 書き込まれている頂点数を取得します
		//! @return 書き込まれている頂点数を取得します
		virtual UInt32 GetCount( void ) const = 0;
		//! @brief 書き込める最大インデックス数を取得します
		//! @return 書き込める最大インデックス数を返します
		virtual UInt32 GetCapacity( void ) const = 0;

		//! @brief フォーマットを取得します
		//! @return フォーマットを表す Mix::Graphics::INDEX_FORMAT 列挙定数を返します
		virtual Mix::Graphics::INDEX_FORMAT GetFormat( void ) const = 0;
	};

}}
