111 lines
2.4 KiB
C++
111 lines
2.4 KiB
C++
#include "Rendering/RenderState.h"
|
|
|
|
RenderState::RenderState()
|
|
{
|
|
|
|
}
|
|
|
|
bool RenderState::Enable(GLenum GLEnable)
|
|
{
|
|
if(glIsEnabled(GLEnable))
|
|
{
|
|
return false;
|
|
}
|
|
m_Enables.push_back(GLEnable);
|
|
glEnable(GLEnable);
|
|
if (GLERROR("RenderState::Enable"))
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool RenderState::CullFace(GLenum GLCullFace)
|
|
{
|
|
if(!glIsEnabled(GL_CULL_FACE))
|
|
{
|
|
LOG_ERROR("Setting GL_CULL_FACE without enabling it.");
|
|
return false;
|
|
}
|
|
|
|
GLint a;
|
|
glGetIntegerv(GL_CULL_FACE_MODE, &a);
|
|
if(a != GL_BACK)
|
|
{
|
|
//LOG_INFO("Setting Cullface to back, unessesary since this is already default.");
|
|
glCullFace(GLCullFace);
|
|
}
|
|
if (GLERROR("RenderState::CullFace"))
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool RenderState::ClearColor(glm::vec4 color)
|
|
{
|
|
glGetFloatv(GL_COLOR_CLEAR_VALUE, &m_preClearColor[0]);
|
|
glClearColor(color.r, color.g, color.b, color.a);
|
|
if (GLERROR("RenderState::ClearColor")) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool RenderState::Clear(GLbitfield mask)
|
|
{
|
|
glClear(mask);
|
|
if (GLERROR("RenderState::Clear")) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool RenderState::BindBuffer(GLint buffer)
|
|
{
|
|
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &m_preBuffer);
|
|
if (buffer == m_preBuffer)
|
|
{
|
|
return true;
|
|
}
|
|
glBindFramebuffer(GL_FRAMEBUFFER, buffer);
|
|
if (GLERROR("RenderState::BindBuffer"))
|
|
{
|
|
printf("BufferID: %i\npreBufferID: %i\n", buffer, m_preBuffer);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
RenderState::~RenderState()
|
|
{
|
|
GLERROR("RenderState::~RenderState Pre");
|
|
GLint n_buffer = -1;
|
|
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &n_buffer);
|
|
|
|
//Set cullface to default
|
|
if (glIsEnabled(GL_CULL_FACE)) {
|
|
glCullFace(GL_BACK);
|
|
}
|
|
GLERROR("RenderState::~RenderState glCullFace");
|
|
|
|
//Set color to default
|
|
glClearColor(m_preClearColor[0], m_preClearColor[1], m_preClearColor[2], m_preClearColor[3]);
|
|
GLERROR("RenderState::~RenderState glClearColor");
|
|
|
|
//Disable Enables
|
|
for (auto i : m_Enables)
|
|
{
|
|
glDisable(i);
|
|
}
|
|
GLERROR("RenderState::~RenderState glDisable");
|
|
|
|
if(m_preBuffer != 0)
|
|
{
|
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
}
|
|
m_Enables.clear();
|
|
GLERROR("RenderState::~RenderState glBindFramebuffer");
|
|
}
|
|
|