#include "RenderState.h" #include "glInterface.h" #include "Geometry.h" #include "Material.h" namespace CHCDemo { /** Constructor setting render as default state. */ RenderState::RenderState(): mAlphaTestEnabled(false), mTexturesEnabled(false), mMode(RENDER) { Reset(); } bool RenderState::SetState(Mode mode) { //-- just change the modewhen necessary if (mode == mMode) return false; mMode = mode; //++ state_changes; if (mode == QUERY) { //glDisableClientState(GL_NORMAL_ARRAY); glDisable(GL_LIGHTING); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDepthMask(GL_FALSE); ///////// //-- handle vbo /*glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); if (Bvh::sCurrentVboId != -1) glBindBufferARB(GL_ARRAY_BUFFER_ARB, Bvh::sCurrentVboId); else glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); */ SetState(false, false); } else // mode returns to render { ///////////// //-- restore render state glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthMask(GL_TRUE); glEnable(GL_LIGHTING); } return true; } void RenderState::SetState(bool texturing, bool alphaTest) { if (mTexturesEnabled && !texturing) { mTexturesEnabled = false; glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } else if (!mTexturesEnabled && texturing) { mTexturesEnabled = true; glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); } if (mAlphaTestEnabled && !alphaTest) { mAlphaTestEnabled = false; glDisable(GL_ALPHA_TEST); } else if (!mAlphaTestEnabled && alphaTest) { mAlphaTestEnabled = true; glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GEQUAL, 0.5f); } } void RenderState::Reset() { SetState(false, false); SetState(RENDER); } }