#ifndef RENDER_TARGET_H
#define RENDER_TARGET_H

#include "common.h"
#include "texture.h"
#include "vector.h"

enum RenderTargetType
{
	RAVEN_RENDER_TARGET_FRAMEBUFFER=0,
	RAVEN_RENDER_TARGET_COLORTEX=1,
	RAVEN_RENDER_TARGET_DEPTHTEX=2
};

enum TextureBindingMode
{
	RAVEN_TEXTURE_BIND_NONE=0,
	RAVEN_TEXTURE_BIND_TARGET=1
};

class RenderTarget
{
protected:
	bool rtis_valid;
	bool is_main_fb;
	bool is_floating_point;

	TextureBindingMode bindmode;

	float width,height;
public:
	RenderTarget(float width=0,float height=0): bindmode(RAVEN_TEXTURE_BIND_NONE), rtis_valid(true),
		is_main_fb(true), is_floating_point(false), width(width), height(height) {}
	virtual ~RenderTarget() {}

	virtual void BindingMode(TextureBindingMode mode) {bindmode=mode;}
	virtual TextureBindingMode BindingMode() {return bindmode;}

	virtual RenderTargetType Type() {return RAVEN_RENDER_TARGET_FRAMEBUFFER;}
	virtual bool IsValid() {return rtis_valid;}
	
	virtual bool IsMainFrameBuffer() {return is_main_fb;}
	virtual bool IsFloatingPointFormat() {return is_floating_point;}

	virtual float GetWidth() {return width;}
	virtual float GetHeight() {return height;}
	virtual Vector2 GetSize() {return Vector2(width,height);}

	virtual bool BindTarget() {return true;}
	virtual Texture *GetTexture() {return NULL;}
};

#endif
