
#ifndef SPECTRE_GRAPHICS_RENDERABLE_H
#define SPECTRE_GRAPHICS_RENDERABLE_H

#include "Vertex2D.h"
#include "Transformable.h"
#include <Spectre/Math/Matrix4.h>
#include <Spectre/Math/Vector2.h>
#include <vector>

class Renderer2D;
class ShaderProgram;
class Texture;

enum RenderType
{
	RenderType_Scene	= 0,
	RenderType_UI		= 1
};

class Renderable2D : public Transformable
{
public :
	Renderable2D();
	Renderable2D(const Vector2f& position);
	virtual ~Renderable2D();

	unsigned char getZOrder() const;
	void setZOrder(unsigned char value);

	virtual const std::vector<Vertex2D>& getVertices() const = 0;

	virtual const std::vector<unsigned short>& getIndices() const = 0;

	virtual const Texture* getTexture() const { return NULL; };

	virtual const RenderType getRenderType() const = 0;

	virtual void render(Renderer2D& renderer) const = 0;

protected :

	unsigned char m_zorder;
};

#endif /* SPECTRE_GRAPHCIS_RENDERABLE_H */
