void opengl_state::StencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) { if (face == GL_FRONT_AND_BACK) { StencilOpSeparate(GL_FRONT, sfail, dpfail, dppass); StencilOpSeparate(GL_BACK, sfail, dpfail, dppass); return; } if (face == GL_FRONT) { if (stencilOpFrontStencilFail == sfail && stencilOpFrontDepthFail == dpfail && stencilOpFrontPass == dppass) { return; } glStencilOpSeparate(GL_FRONT, sfail, dpfail, dppass); stencilOpFrontStencilFail = sfail; stencilOpFrontDepthFail = dpfail; stencilOpFrontPass = dppass; } else { if (stencilOpBackStencilFail == sfail && stencilOpBackDepthFail == dpfail && stencilOpBackPass == dppass) { return; } glStencilOpSeparate(GL_BACK, sfail, dpfail, dppass); stencilOpBackStencilFail = sfail; stencilOpBackDepthFail = dpfail; stencilOpBackPass = dppass; } }
static void StencilOpSeparate( Face face, const StencilOperations& ops ) { StencilOpSeparate(face, ops._sfail, ops._dfail, ops._dpass); }