#define GL_GLEXT_PROTOTYPES
#include <GL/glut.h>
+#define TEST_DISPLAY_LISTS 0
static GLboolean Anim = GL_TRUE;
static GLfloat Xpos = 0;
glScalef(0.3, 0.3, 1.0);
glRotatef(-90.0 * Xpos, 0, 0, 1);
+#if defined(GL_ARB_occlusion_query)
+#if TEST_DISPLAY_LISTS
+ glNewList(10, GL_COMPILE);
glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery);
+ glEndList();
+ glCallList(10);
+#else
+ glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery);
+#endif
glColorMask(0, 0, 0, 0);
glDepthMask(GL_FALSE);
glVertex3f(-1, 1, 0);
glEnd();
+#if TEST_DISPLAY_LISTS
+ glNewList(11, GL_COMPILE);
+ glEndQueryARB(GL_SAMPLES_PASSED_ARB);
+ glEndList();
+ glCallList(11);
+#else
glEndQueryARB(GL_SAMPLES_PASSED_ARB);
+#endif
do {
/* do useful work here, if any */
/* turn off occlusion testing */
glColorMask(1, 1, 1, 1);
glDepthMask(GL_TRUE);
+#endif /* GL_ARB_occlusion_query */
/* draw the orange rect, so we can see what's going on */
glColor3f(0.8, 0.5, 0);
glLoadIdentity();
glColor3f(1, 1, 1);
+#if defined(GL_ARB_occlusion_query)
sprintf(s, " %4d Fragments Visible", passed);
glRasterPos3f(-0.50, -0.7, 0);
PrintString(s);
glRasterPos3f(-0.25, -0.8, 0);
PrintString("Fully Occluded");
}
+#else
+ glRasterPos3f(-0.25, -0.8, 0);
+ PrintString("GL_ARB_occlusion_query not available at compile time");
+#endif /* GL_ARB_occlusion_query */
glutSwapBuffers();
}
exit(-1);
}
+#if defined(GL_ARB_occlusion_query)
glGetQueryivARB(GL_SAMPLES_PASSED_ARB, GL_QUERY_COUNTER_BITS_ARB, &bits);
if (!bits) {
printf("Hmmm, GL_QUERY_COUNTER_BITS_ARB is zero!\n");
exit(-1);
}
+#endif /* GL_ARB_occlusion_query */
+
+ glGetIntegerv(GL_DEPTH_BITS, &bits);
+ printf("Depthbits: %d\n", bits);
+#if defined(GL_ARB_occlusion_query)
glGenQueriesARB(1, &OccQuery);
- assert( glIsQueryARB(OccQuery) );
+ assert(OccQuery > 0);
+#endif /* GL_ARB_occlusion_query */
glEnable(GL_DEPTH_TEST);
}