Задача такая: трафарет opengl содержит значения 0 и 1. Для всех нулевых значений трафарета надо сбросить буфер глубины (присвоить ему значение 1). Аппаратного способа сделать это я не нашел. Попробовал в лоб cделать это программно:
static GLfloat *zbuffer = new GLfloat[1024*768];
glReadPixels(0, 0, 1024, 768, GL_DEPTH_COMPONENT, GL_FLOAT, zbuffer);
static GLfloat *sbuffer = new GLfloat[1024*768];
glReadPixels(0, 0, 1024, 768, GL_STENCIL_INDEX, GL_FLOAT, sbuffer);
for (int i = 0; i < 1024*768; i++) {
if (sbuffer[i] < 1.0f)
zbuffer[i] = 1.0f;
}
glDepthFunc(GL_GREATER);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDrawPixels(1024, 768, GL_DEPTH_COMPONENT, GL_FLOAT, zbuffer);
glDepthFunc(GL_LESS);