

#include <Spectre/Graphics/ShaderProgram.h>
#include <Spectre/Graphics/Texture.h>
#include <Spectre/Graphics/RenderState.h>

RenderState::RenderState() :
m_texture	(0),
m_shader	(0)
{
}

RenderState::~RenderState()
{
	cleanup();
}

void RenderState::enableTexture(const Texture *texture)
{
	// Enable the new texture.
	if (texture) {
		texture->enable();
	} 
	// No texture selected.
	// Must unbind cached texture if set.
	else if (m_texture) {
		m_texture->disable();
	}
	m_texture = texture;
}

void RenderState::enableShader(const ShaderProgram *program)
{
	m_shader = program;
	m_shader->enable();
}

void RenderState::cleanup()
{
	// Disable current texture if set.
	if (m_texture) {
		m_texture->disable();
	}

	if (m_shader) {
		m_shader->disable();
	}
}