void _al_ogl_set_target_bitmap(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *bitmap) { ALLEGRO_BITMAP_OGL *ogl_bitmap = (void *)bitmap; if (bitmap->parent) ogl_bitmap = (void *)bitmap->parent; /* if either this bitmap or its parent (in the case of subbitmaps) * is locked then don't do anything */ if (!(bitmap->locked || (bitmap->parent && bitmap->parent->locked))){ setup_fbo(display, bitmap); if (display->ogl_extras->opengl_target == ogl_bitmap) { _al_ogl_setup_bitmap_clipping(bitmap); } } }
void piglit_init(int argc, char **argv) { GLint max_samples; if (argc != 5) { print_usage_and_exit(argv[0]); } if (strcmp(argv[1], "texture") == 0) { use_textures = true; } else if (strcmp(argv[1], "renderbuffer") == 0) { use_textures = false; } else { print_usage_and_exit(argv[0]); } if (strcmp(argv[2], "linear") == 0) { src_format = GL_RGBA; dst_format = GL_RGBA; } else if (strcmp(argv[2], "srgb") == 0) { src_format = GL_SRGB8_ALPHA8; dst_format = GL_SRGB8_ALPHA8; } else if (strcmp(argv[2], "linear_to_srgb") == 0) { src_format = GL_RGBA; dst_format = GL_SRGB8_ALPHA8; } else if (strcmp(argv[2], "srgb_to_linear") == 0) { src_format = GL_SRGB8_ALPHA8; dst_format = GL_RGBA; } else { print_usage_and_exit(argv[0]); } if (strcmp(argv[3], "single_sampled") == 0) { src_samples = 0; dst_samples = 0; scaled_blit = false; } else if (strcmp(argv[3], "upsample") == 0) { src_samples = 0; dst_samples = 1; /* selects minimum available sample count */ scaled_blit = false; } else if (strcmp(argv[3], "downsample") == 0) { src_samples = 1; dst_samples = 0; scaled_blit = false; } else if (strcmp(argv[3], "msaa") == 0) { src_samples = 1; dst_samples = 1; scaled_blit = false; } else if (strcmp(argv[3], "scaled") == 0) { src_samples = 0; dst_samples = 0; scaled_blit = true; } else { print_usage_and_exit(argv[0]); } if (strcmp(argv[4], "enabled") == 0) { enable_srgb_framebuffer = true; } else if (strcmp(argv[4], "disabled") == 0) { enable_srgb_framebuffer = false; } else { print_usage_and_exit(argv[0]); } piglit_require_gl_version(21); piglit_require_extension("GL_ARB_framebuffer_object"); piglit_require_extension("GL_ARB_framebuffer_sRGB"); /* skip the test if we don't support multisampling */ glGetIntegerv(GL_MAX_SAMPLES, &max_samples); if (src_samples > max_samples || dst_samples > max_samples) { piglit_report_result(PIGLIT_SKIP); } prog = piglit_build_simple_program(vs_text, fs_text); src_fbo = setup_fbo(src_format, src_samples); dst_fbo = setup_fbo(dst_format, dst_samples); if (dst_samples != 0) resolve_fbo = setup_fbo(dst_format, 0); else resolve_fbo = 0; }
void test_strip_smoothed(int fbo) { GLint width, height; GLfloat vVertices[] = { -0.7, 0.7, -0.7, -0.7, 0.2, -0.4, 0.0, 0.3, -0.5, -0.2, -0.3, 0.3, 0.5, -0.2, 0.4, 0.7, -0.7, 0.7 }; GLfloat vColors[] = { 0.1, 0.1, 0.1, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.9, 0.9, 0.9, 1.0}; EGLSurface surface; RD_START("strip-smoothed", "fbo=%d", fbo); display = get_display(); /* get an appropriate EGL frame buffer configuration */ ECHK(eglChooseConfig(display, config_attribute_list, &config, 1, &num_config)); DEBUG_MSG("num_config: %d", num_config); /* create an EGL rendering context */ ECHK(context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribute_list)); surface = make_window(display, config, 256, 256); ECHK(eglQuerySurface(display, surface, EGL_WIDTH, &width)); ECHK(eglQuerySurface(display, surface, EGL_HEIGHT, &height)); DEBUG_MSG("Buffer: %dx%d", width, height); /* connect the context to the surface */ ECHK(eglMakeCurrent(display, surface, surface, context)); program = get_program(vertex_shader_source, fragment_shader_source); GCHK(glBindAttribLocation(program, 0, "aPosition")); GCHK(glBindAttribLocation(program, 1, "aColor")); link_program(program); GCHK(glViewport(0, 0, width, height)); if (fbo) GCHK(setup_fbo(width, height)); /* clear the color buffer */ GCHK(glClearColor(0.3125, 0.3125, 0.3125, 1.0)); GCHK(glClear(GL_COLOR_BUFFER_BIT)); GCHK(glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices)); GCHK(glEnableVertexAttribArray(0)); GCHK(glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, vColors)); GCHK(glEnableVertexAttribArray(1)); GCHK(glDrawArrays(GL_TRIANGLE_STRIP, 0, 6)); ECHK(eglSwapBuffers(display, surface)); GCHK(glFlush()); if (fbo) GCHK(cleanup_fbo()); ECHK(eglDestroySurface(display, surface)); ECHK(eglTerminate(display)); RD_END(); }