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

#ifdef GD_D3D9

#ifndef DSE_RS_MESH_VERTEX_STREAM_D3D9_HPP
#define DSE_RS_MESH_VERTEX_STREAM_D3D9_HPP

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

namespace rs
{
	class VertexStream
	{
	private:
		IDirect3DVertexBuffer9* stream;
		unsigned int stream_element_size;
		unsigned int stream_size;
		unsigned int elems_count;

		bool is_dynamic;
	public:
		VertexStream();
		VertexStream(const unsigned int stream_elem_size, const unsigned int elems_count, const DEUSAGE& usage);
		~VertexStream();

		bool create(const unsigned int stream_elem_size, const unsigned int elems_count, 
			const DEUSAGE& usage = DEU_DYNAMIC);
		bool createWithData(const unsigned int stream_elem_size, const unsigned int elems_count,
			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 = DEMT_WRITE);
		void unmap();

		IDirect3DVertexBuffer9* getStream() const;
		unsigned int getElementSize() const;
		unsigned int getElementsCount() const;
	};
};

#endif

#endif