From 37cf42527b9de668c0e1e5834fa597423eb24bf4 Mon Sep 17 00:00:00 2001 From: Tleety Date: Thu, 10 Dec 2015 16:03:48 +0100 Subject: [PATCH] RenderState class structure made. --- include/Engine/Rendering/RenderState.h | 22 +++++++ src/Engine/Rendering/RenderState.cpp | 81 ++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 include/Engine/Rendering/RenderState.h create mode 100644 src/Engine/Rendering/RenderState.cpp diff --git a/include/Engine/Rendering/RenderState.h b/include/Engine/Rendering/RenderState.h new file mode 100644 index 00000000..76816308 --- /dev/null +++ b/include/Engine/Rendering/RenderState.h @@ -0,0 +1,22 @@ +#ifndef RenderState_h__ +#define RenderState_h__ + +#include "../Common.h" +#include "../OpenGL.h" +#include "../GLM.h" + +class RenderState +{ +public: + RenderState(); + ~RenderState(); + bool Enable(GLenum GLEnable); + bool CullFace(GLenum GlFaceToCull); + bool ClearColor(glm::vec4 color); + bool Clear(GLbitfield mask); +private: + std::vector m_Enables; + float m_preClearColor[4]; + GLenum m_preCullFace; +}; +#endif \ No newline at end of file diff --git a/src/Engine/Rendering/RenderState.cpp b/src/Engine/Rendering/RenderState.cpp new file mode 100644 index 00000000..6844dbfd --- /dev/null +++ b/src/Engine/Rendering/RenderState.cpp @@ -0,0 +1,81 @@ +#include "Rendering/RenderState.h" + +RenderState::RenderState() +{ +} + +bool RenderState::Enable(GLenum GLEnable) +{ + if(glIsEnabled(GLEnable)) + { + LOG_WARNING("Trying to enable somthing that is already enabled."); + 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."); + } + m_preCullFace = a; + 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; +} + +RenderState::~RenderState() +{ + //Set cullface to default + glCullFace(m_preCullFace); + + //Set color to default + glClearColor(m_preClearColor[0], m_preClearColor[1], m_preClearColor[2], m_preClearColor[3]); + + //Disable Enables + for (auto i : m_Enables) + { + glDisable(i); + } + + m_Enables.clear(); +} +