enum piglit_result piglit_display(void) { enum piglit_result res; GLuint fb, rb; GLint stencil_size; GLenum status; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT); /* Create the FBO. */ glGenRenderbuffersEXT(1, &rb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rb); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, f.iformat, BUF_SIZE, BUF_SIZE); glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_STENCIL_SIZE_EXT, &stencil_size); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); glGenFramebuffersEXT(1, &fb); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER_EXT, rb); glViewport(0, 0, BUF_SIZE, BUF_SIZE); glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE); status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { printf("FBO incomplete status 0x%X\n", status); piglit_report_result(PIGLIT_SKIP); } mask = (1 << stencil_size) - 1; switch (test) { case CLEAR: puts("Testing glClear(stencil)."); res = test_clear(); break; case READPIXELS: puts("Testing glReadPixels(stencil)."); res = test_readpixels(); break; case DRAWPIXELS: puts("Testing glDrawPixels(stencil)."); res = test_drawpixels(); break; case COPYPIXELS: case BLIT: puts(test == BLIT ? "Testing glBlitFramebuffer(stencil)." : "Testing glCopyPixels(stencil)."); res = test_copy(); break; default: assert(0); } /* Cleanup. */ glDeleteFramebuffersEXT(1, &fb); glDeleteRenderbuffersEXT(1, &rb); glutSwapBuffers(); assert(glGetError() == 0); return res; }
enum piglit_result piglit_display(void) { enum piglit_result res; GLuint fb, rb; GLenum status; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT); /* Create the FBO. */ glGenRenderbuffersEXT(1, &rb); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rb); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, f.iformat, BUF_SIZE, BUF_SIZE); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); glGenFramebuffersEXT(1, &fb); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER_EXT, rb); glViewport(0, 0, BUF_SIZE, BUF_SIZE); glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE); status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { printf("FBO incomplete status 0x%X\n", status); piglit_report_result(PIGLIT_SKIP); } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ALIGNMENT, 1); switch (test) { case CLEAR: puts("Testing glClear(depth)."); res = test_clear(); break; case READPIXELS: puts("Testing glReadPixels(depth)."); res = test_readpixels(); break; case DRAWPIXELS: puts("Testing glDrawPixels(depth)."); res = test_drawpixels(); break; case COPYPIXELS: case BLIT: puts(test == BLIT ? "Testing glBlitFramebuffer(depth)." : "Testing glCopyPixels(depth)."); res = test_copy(); break; default: assert(0); res = PIGLIT_SKIP; } /* Cleanup. */ glBindFramebufferEXT(GL_FRAMEBUFFER, piglit_winsys_fbo); glDeleteFramebuffersEXT(1, &fb); glDeleteRenderbuffersEXT(1, &rb); piglit_present_results(); if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); return res; }