enum piglit_result piglit_display(void) { int dim; GLboolean pass = GL_TRUE; int level, min_lod, max_lod, x_offset, y_offset; GLuint tex; piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); /* Clear background to gray */ glClearColor(0.5, 0.5, 0.5, 1.0); glClear(GL_COLOR_BUFFER_BIT); /* Create the texture. */ glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); /* Fill in each level */ for (level = 0, dim = MAX_SIZE; dim > 0; level++, dim /= 2) { set_level_color(level, dim, level); } /* Draw all the levels with varying clamp ranges. */ glEnable(GL_TEXTURE_2D); y_offset = 10; for (min_lod = 0; min_lod <= MAX_LOD; min_lod++) { x_offset = 10; for (max_lod = MAX_LOD; max_lod >= min_lod; max_lod--) { pass = draw_and_test(x_offset, y_offset, min_lod, max_lod) && pass; x_offset += MAX_SIZE + PAD; } y_offset += (MAX_SIZE * 2 + PAD * 7); } glDeleteTextures(1, &tex); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
enum piglit_result piglit_display(void) { int dim; GLboolean pass = GL_TRUE; int level, x, y; GLuint tex; piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); /* Clear background to gray */ glClearColor(0.5, 0.5, 0.5, 1.0); glClear(GL_COLOR_BUFFER_BIT); /* Create the texture. */ glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); /* Fill in each level */ for (level = 0, dim = MAX_SIZE; dim > 0; level++, dim /= 2) { set_level_color(level, dim, level); } glEnable(GL_TEXTURE_2D); /* Draw areas of the base level size with clamping to mip lods * between each texture level. */ x = 10; y = 10; for (level = 0, dim = MAX_SIZE; dim > 1; level++, dim /= 2) { float clamp = (float)level + 0.5; glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, clamp); piglit_draw_rect_tex(x, y, 1, 1, 0.0, 0.0, 1.0, 1.0); y += 1 + PAD; } /* Verify that the resulting images are blended between the levels. */ y = 10; for (level = 0, dim = MAX_SIZE; dim > 1; level++, dim /= 2) { float expected[3]; int i; for (i = 0; i < 3; i++) { expected[i] = (colors[level ][i] + colors[level + 1][i]) / 2.0; } pass = piglit_probe_pixel_rgb(x, y, expected) && pass; y += 1 + PAD; } glDeleteTextures(1, &tex); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }