void disable_mask() { assert(m_mask_level > 0); if (--m_mask_level == 0) { glDisable(GL_STENCIL_TEST); return; } // begin submit previous mask glColorMask(0, 0, 0, 0); // we set the stencil buffer to 'm_mask_level' // where the stencil buffer m_mask_level + 1 glStencilFunc(GL_EQUAL, m_mask_level + 1, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); // draw the quad to fill stencil buffer glBegin(GL_QUADS); glVertex2f(0, 0); glVertex2f(m_display_width, 0); glVertex2f(m_display_width, m_display_height); glVertex2f(0, m_display_height); glEnd(); end_submit_mask(); }
void disable_mask() { assert(m_mask_level > 0); if (--m_mask_level == 0) { glDisable(GL_STENCIL_TEST); return; } // begin submit previous mask glColorMask(0, 0, 0, 0); // we set the stencil buffer to 'm_mask_level' // where the stencil buffer m_mask_level + 1 glStencilFunc(GL_EQUAL, m_mask_level + 1, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); // draw the quad to fill stencil buffer // glBegin(GL_QUADS); // glVertex2f(0, 0); // glVertex2f(m_display_width, 0); // glVertex2f(m_display_width, m_display_height); // glVertex2f(0, m_display_height); // glEnd(); Sint16 squareVertices[8]; squareVertices[0] = 0; squareVertices[1] = 0; squareVertices[2] = m_display_width; squareVertices[3] = 0; squareVertices[4] = 0; squareVertices[5] = m_display_height; squareVertices[6] = m_display_width; squareVertices[7] = m_display_height; glVertexPointer(2, GL_SHORT, 0, squareVertices); glEnableClientState(GL_VERTEX_ARRAY); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); end_submit_mask(); }