#pragma once

//! @file Mix/Graphics/IShaderConstant.h
//! @brief シェーダーコンスタントインターフェースインクルードファイル

#include "Mix/Graphics/IDeviceObject.h"

namespace Mix{ namespace Graphics{

	//! @class IShaderConstant
	//! @brief シェーダーコンスタントインターフェース
	class IShaderConstant : public Mix::Graphics::IDeviceObject
	{
	protected:
		//! @brief デストラクタ
		virtual ~IShaderConstant( void ){}

	public:
		//! @brief ロックし、書き込める状態にします
		//! @return 成功した場合は True を返します
		virtual Boolean Lock( void ) = 0;
		//! @brief アンロックし、使用できる状態にします
		virtual void Unlock( void ) = 0;
		//! @brief データを書き込みます
		//! @param[in] pData 書き込むデータのポインタ
		//! @param[in] dataSize 書き込むデータのサイズ
		//! @return 成功した場合は True を返します
		//! @note このメソッドを使用するには事前にロックしておく必要があります
		virtual Boolean Write( const void* pData, UInt32 dataSize ) = 0;

		//! @brief サイズ( バイト単位 )を取得します
		//! @return サイズを返します
		virtual UInt32 GetSize( void ) const = 0;
	};

}}
