#pragma once

//! @file Mix/Graphics/IVertexLayout.h
//! @brief バーテックスレイアウトインターフェースインクルードファイル

#include "Mix/Graphics/IDeviceObject.h"

namespace Mix{ namespace Graphics{

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

	public:
		//! @brief エレメントの数を取得します
		//! @return エレメントの数を返します
		virtual UInt32 GetElementCount( void ) const = 0;
		//! @brief エレメントを取得します
		//! @return エレメント配列の先頭のポインタを返します
		virtual const Mix::Graphics::VERTEX_ELEMENT* GetElements( void ) const = 0;
		//! @brief エレメントで使用されているセマンティックフラグを取得します
		//! @return セマンティックフラグを返します
		//! @note VERTEX_ELEMENT_SEMANTIC 列挙定数で 1 を左へシフトすることで判定するためのビットになります( 1 << VLS_NORMAL )
		virtual UInt32 GetElementSemanticFlags( void ) const = 0;

		//! @brief ストライドを取得します
		//! @return ストライド( バイト単位 )を返します
		virtual UInt32 GetStride( void ) const = 0;
	};

}}
