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;
	}
}
Esempio n. 2
0
	static void StencilOpSeparate(
		Face face,
		const StencilOperations& ops
	)
	{
		StencilOpSeparate(face, ops._sfail, ops._dfail, ops._dpass);
	}