void Device::Clear(CLEAR_FLAG flags) { glShadeModel(GL_SMOOTH); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); GLfloat lightModelAmbient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lightModelAmbient); GLfloat lightAmbient[] = { 0.25f, 0.25f, 0.25f, 1.0f }; glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); GLfloat lightDiffuse[] = { 0.75f, 0.75f, 0.75f, 1.0f }; glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); GLfloat materialAmbient[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, materialAmbient); GLfloat materialDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, materialDiffuse); GLfloat lightPosition[] = { 0.0f, 0.0f, 2.5f, 1.0f }; glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); SetClearStencil(0); SetClearDepth(1); glClear((flags & CLEAR_FLAG::Color ? GL_COLOR_BUFFER_BIT : 0) | (flags & CLEAR_FLAG::Depth ? GL_DEPTH_BUFFER_BIT : 0) | (flags & CLEAR_FLAG::Stencil ? GL_STENCIL_BUFFER_BIT : 0)); }
void Graphics::ResetCachedState() { Program::Clear(); viewport_ = Recti(0); glGetIntegerv(GL_FRAMEBUFFER_BINDING, &systemFbo_); // On IOS default FBO is not zero // Set up texture data read/write alignment glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); VertexArrayObj::Clear(); lastMesh_ = nullptr; lastProgram_ = nullptr; activeMesh_ = nullptr; activeWindow_ = nullptr; CHECK_GL_STATUS(); SetClearColor(Color(0, 0, 0, 1)); SetClearDepth(1); SetClearStencil(0); SetFrameBuffer(nullptr); SetStencilTest(DEFAULT_STENCIL_ENABLE, DEFAULT_STENCIL_WRITEMASK, DEFAULT_STENCIL_SFAIL, DEFAULT_STENCIL_DPFAIL, DEFAULT_STENCIL_DPPASS, DEFAULT_STENCIL_FUNC, DEFAULT_STENCIL_REF, DEFAULT_STENCIL_COMPAREMASK); SetScissorTest(); CHECK_GL_STATUS(); SetColorMask(DEFAULT_COLOR_MASK); SetDepthMask(DEFAULT_DEPTH_MASK); SetDepthFunc(DepthFunc::LESS); SetStencilMask(DEFAULT_STENCIL_MASK); SetBlendModeTest(DEFAULT_BLEND_MODE); EnableDepthTest(DEFAULT_DEPTH_TEST_ENABLE); EnableCullFace(DEFAULT_CULL_FACE_ENABLE); SetCullFace(CullFaceMode::DEFAULT); SetFrontFace(FrontFaceMode::DEFAULT); CHECK_GL_STATUS(); UnboundTextures(); SetVertexArrayObj(nullptr); SetVertexBuffer(nullptr); SetIndexBuffer(nullptr); SetProgram(nullptr); SetSlopeScaledBias(0); CHECK_GL_STATUS(); }
void Graphics::ClearStencilBuffer(GLint value) { SetScissorTest(); SetClearStencil(value); glClear(GL_STENCIL_BUFFER_BIT); }