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

#ifndef DSE_RS_MESH_VERTEX_BUFFER_HPP
#define DSE_RS_MESH_VERTEX_BUFFER_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Resource System/Model/vertex_stream.hpp>
#include <Darkstar/Resource System/Model/input_layout.hpp>

namespace rs
{
	class VertexBuffer
	{
	private:
		std::vector<shared_ptr<VertexStream> > streams;
		shared_ptr<InputLayout> input_layout;

		unsigned int elems_count;
	public:
		VertexBuffer(const shared_ptr<InputLayout>& il);
		~VertexBuffer();

		int createNextStream(const unsigned int stream_elem_size, const unsigned int elems_count, 
			const DEUSAGE& usage = DEU_DYNAMIC);
		int createNextStreamWithData(const unsigned int stream_elem_size, const unsigned int elems_count,
			void* data, const DEUSAGE& usage = DEU_DEFAULT);
		bool uploadStream(const unsigned int stream_num, const unsigned int size, 
			void* data, const unsigned int offset = 0);
		void* mapStream(const unsigned int stream_num, const DEMAPTYPE& map_type = DEMT_WRITE);
		void unmapStream(const unsigned int stream_num);

		void set(const unsigned int start_slot = 0);

		unsigned int getElementsCount() const;
	};
};

#endif