void texture::unbind() const { gl_assert_error("entering texture::unbind()"); #ifdef SCM_GL_USE_DIRECT_STATE_ACCESS glBindMultiTextureEXT(GL_TEXTURE0 + _occupied_texture_unit, target(), 0); glDisableIndexedEXT(target(), _occupied_texture_unit); #else // SCM_GL_USE_DIRECT_STATE_ACCESS if (_occupied_texture_unit >= 0) { glActiveTexture(GL_TEXTURE0 + _occupied_texture_unit); _occupied_texture_unit = -1; } glBindTexture(target(), 0); glDisable(target()); #endif // SCM_GL_USE_DIRECT_STATE_ACCESS gl_assert_error("exiting texture::unbind()"); }
enum piglit_result piglit_display(void) { GLboolean pass = GL_TRUE; GLuint tex0, tex1, fb; GLenum status; float green[] = {0, 1, 0, 0}; float blue[] = {0, 0, 1, 0}; const GLenum attachments[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, }; piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); glGenFramebuffersEXT(1, &fb); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); tex0 = attach_texture(0); tex1 = attach_texture(1); glDrawBuffersARB(2, attachments); status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT); if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { fprintf(stderr, "fbo incomplete (status = 0x%04x)\n", status); piglit_report_result(PIGLIT_SKIP); } /* Clear to blue. The first buffer will have no blending and * get overwritten green, and the second will be blended ZERO, * ONE leaving the blue in place. */ glClearColor(0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glBlendFunc(GL_ZERO, GL_ONE); glDisableIndexedEXT(GL_BLEND, 0); glEnableIndexedEXT(GL_BLEND, 1); glColor4fv(green); piglit_draw_rect(0, 0, piglit_width, piglit_height); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, piglit_winsys_fbo); glDisable(GL_BLEND); /* Draw the two textures to halves of the window. */ glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBindTexture(GL_TEXTURE_2D, tex0); piglit_draw_rect_tex(0, 0, piglit_width / 2, piglit_height, 0, 0, 1, 1); glBindTexture(GL_TEXTURE_2D, tex1); piglit_draw_rect_tex(piglit_width / 2, 0, piglit_width, piglit_height, 0, 0, 1, 1); glDisable(GL_TEXTURE_2D); glDeleteTextures(1, &tex0); glDeleteTextures(1, &tex1); glDeleteFramebuffersEXT(1, &fb); pass = pass && piglit_probe_rect_rgb(0, 0, piglit_width/2, piglit_height, green); pass = pass && piglit_probe_rect_rgb(piglit_width/2, 0, piglit_width/2, piglit_height, blue); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }