Fixed a bugg with RenderState.

Renderstate now also handles the Frambuffer binding.
This commit is contained in:
Tleety
2015-12-11 16:07:12 +01:00
parent 433331e752
commit 53d5736420
10 changed files with 100 additions and 63 deletions
+34 -4
View File
@@ -2,6 +2,7 @@
RenderState::RenderState()
{
}
bool RenderState::Enable(GLenum GLEnable)
@@ -30,12 +31,11 @@ bool RenderState::CullFace(GLenum GLCullFace)
GLint a;
glGetIntegerv(GL_CULL_FACE_MODE, &a);
if(a == GL_BACK)
if(a != GL_BACK)
{
//LOG_INFO("Setting Cullface to back, unessesary since this is already default.");
glCullFace(GLCullFace);
}
m_preCullFace = a;
glCullFace(GLCullFace);
if (GLERROR("RenderState::CullFace"))
{
return false;
@@ -62,20 +62,50 @@ bool RenderState::Clear(GLbitfield mask)
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
glCullFace(m_preCullFace);
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");
}