Esempio n. 1
0
bool
Stencil2Test::isApplicable() const
{
	return (have_ATI_separate_stencil() ||
		have_EXT_stencil_two_side() ||
		have_EXT_stencil_two_side());
}
Esempio n. 2
0
void
Stencil2Test::runOne(Stencil2Result &r, Window &w)
{
	(void) w;  // silence warning
	r.pass = true;

	get_ext_functions();

	// how many stencil bits (we assume at least 8 above)
	glGetIntegerv(GL_STENCIL_BITS, &stencilBits);
	stencilMax = (1 << stencilBits) - 1;
	assert(stencilBits >= 8);

	glViewport(0, 0, windowSize, windowSize);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0, windowSize, 0, windowSize, -1, 1);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	if (have_ATI_separate_stencil()) {
		r.pass &= test_stencil(ATI);
	}

	if (have_EXT_stencil_two_side()) {
		r.pass &= test_stencil(EXT);
	}

	if (have_GL2_stencil_two_side()) {
		r.pass &= test_stencil(GL2);
	}
}
Esempio n. 3
0
void enable_shadow_stencil() {
	assert(have_EXT_stencil_wrap());
	if (have_EXT_stencil_two_side()) {
		glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT);

		glActiveStencilFaceEXT(GL_BACK);
		glStencilFunc(GL_ALWAYS, 1, ~0U);
		glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);

		glActiveStencilFaceEXT(GL_FRONT);
		glStencilFunc(GL_ALWAYS, 1, ~0U);
		glStencilOp(GL_KEEP, GL_KEEP, GL_DECR_WRAP);
 	} else if (have_ATI_separate_stencil()) {
		glStencilFuncSeparateATI( GL_ALWAYS, GL_ALWAYS, 1, ~0U );
		glStencilOpSeparateATI( GL_BACK, GL_KEEP, GL_KEEP, GL_INCR_WRAP );
		glStencilOpSeparateATI( GL_FRONT, GL_KEEP, GL_KEEP, GL_DECR_WRAP );
	} else {
		assert(0);
	}

}