//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007-2008)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: index_buffer_d3d9.hpp
//      Краткое описание: Индексный буфер для платформы Direct3D 9
//

#ifdef GD_D3D9

#ifndef DSE_RS_MESH_INDEX_BUFFER_D3D9_HPP
#define DSE_RS_MESH_INDEX_BUFFER_D3D9_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Graphic System/Direct3D/direct3d_include.hpp>
#include <Darkstar/Resource System/rs_common.hpp>

namespace rs
{
	enum IBTYPE
	{
		DSEIB_16 = 101,
		DSEIB_32 = 102,
	};

	class IndexBuffer
	{
	private:
		IDirect3DIndexBuffer9* buffer;
		IBTYPE buf_type;
		unsigned int buf_size;
		unsigned int ind_count;

		bool is_dynamic;
	public:
		IndexBuffer();
		IndexBuffer(const unsigned int ind_count, const IBTYPE& type, const DEUSAGE& usage = DEU_DYNAMIC);
		~IndexBuffer();

		bool create(const unsigned int ind_count, const IBTYPE& type, const DEUSAGE& usage = DEU_DYNAMIC);
		bool createWithData(const unsigned int ind_count, const IBTYPE& type, void* data, const DEUSAGE& usage = DEU_DEFAULT);
		bool upload(const unsigned int size, void* data, const unsigned int offset = 0);
		void* map(const DEMAPTYPE& map_type);
		void unmap();

		const unsigned int getIndicesNumber() const;

		void set();
	};
};

#endif

#endif