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

#ifndef DSE_RS_MESH_MESH_HPP
#define DSE_RS_MESH_MESH_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Resource System/Material/material.hpp>
#include <Darkstar/Resource System/Model/index_buffer.hpp>
#include <Darkstar/Resource System/Model/vertex_buffer.hpp>
#include <Darkstar/math.hpp>
#include <Darkstar/Graphic System/Camera/camera.hpp>
#include <Darkstar/Resource System/rs_common.hpp>

namespace rs
{
	class Mesh
	{
	private:
		shared_ptr<VertexBuffer> vertex_buffer;
		shared_ptr<IndexBuffer> index_buffer;
		shared_ptr<Material> material;

		DE_PRIMITIVE_TOPOLOGY primitive_topology;

		math::Matr4 transform_matrix_os;
	public:
		Mesh(const shared_ptr<VertexBuffer>& vb, const shared_ptr<IndexBuffer>& ib, const shared_ptr<Material>& mat, const math::Matr4& tr_mat_os = math::matr4_sing);
		~Mesh();

		const shared_ptr<VertexBuffer>& getVertexBuffer() const;
		const shared_ptr<IndexBuffer>& getIndexBuffer() const;
		const shared_ptr<Material>& getMaterial() const;
		const shared_ptr<gs::Effect>& getEffect() const;
		math::Matr4& getTransformOS2WS();

		void draw(const math::Matr4& world_matr, const shared_ptr<gs::Camera>& camera);
	};
};

#endif