X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=init.cpp;h=c5e81135dccb1de327883715f735a8e9506be41b;hp=3c781e125bb45a366da2d04229da3cfe7f99bbb6;hb=a5f32397f9c23fa8644fe195865d6c36685cf866;hpb=cf3b8245a92407da567cf8843335911dd1a0da23 diff --git a/init.cpp b/init.cpp index 3c781e1..c5e8113 100644 --- a/init.cpp +++ b/init.cpp @@ -38,7 +38,7 @@ void measure_texel_subpixel_precision() check_error(); glBindTexture(GL_TEXTURE_2D, dst_texnum); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, width, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, 1, 0, GL_RGBA, GL_FLOAT, NULL); check_error(); glGenFramebuffers(1, &fbo); @@ -122,14 +122,14 @@ void measure_texel_subpixel_precision() // Now read the data back and see what the card did. // (We only look at the red channel; the others will surely be the same.) // We assume a linear ramp; anything else will give sort of odd results here. - float out_data[width]; - glReadPixels(0, 0, width, 1, GL_RED, GL_FLOAT, out_data); + float out_data[width * 4]; + glReadPixels(0, 0, width, 1, GL_RGBA, GL_FLOAT, out_data); check_error(); float biggest_jump = 0.0f; for (unsigned i = 1; i < width; ++i) { - assert(out_data[i] >= out_data[i - 1]); - biggest_jump = max(biggest_jump, out_data[i] - out_data[i - 1]); + assert(out_data[i * 4] >= out_data[(i - 1) * 4]); + biggest_jump = max(biggest_jump, out_data[i * 4] - out_data[(i - 1) * 4]); } assert(biggest_jump > 0.0); @@ -221,12 +221,6 @@ void measure_roundoff_problems() 1.0f, 1.0f, 1.0f, 0.0f }; - float texcoords[] = { - 0.25f, 0.0f, - 0.25f, 0.0f, - 0.75f, 0.0f, - 0.75f, 0.0f - }; GLuint vao; glGenVertexArrays(1, &vao); @@ -235,7 +229,7 @@ void measure_roundoff_problems() check_error(); GLuint position_vbo = fill_vertex_attribute(glsl_program_num, "position", 2, GL_FLOAT, sizeof(vertices), vertices); - GLuint texcoord_vbo = fill_vertex_attribute(glsl_program_num, "texcoord", 2, GL_FLOAT, sizeof(texcoords), texcoords); + GLuint texcoord_vbo = fill_vertex_attribute(glsl_program_num, "texcoord", 2, GL_FLOAT, sizeof(vertices), vertices); // Same data. glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); check_error(); @@ -248,16 +242,16 @@ void measure_roundoff_problems() // Now read the data back and see what the card did. (Ignore the last value.) // (We only look at the red channel; the others will surely be the same.) - unsigned char out_data[512]; - glReadPixels(0, 0, 512, 1, GL_RED, GL_UNSIGNED_BYTE, out_data); + unsigned char out_data[512 * 4]; + glReadPixels(0, 0, 512, 1, GL_RGBA, GL_UNSIGNED_BYTE, out_data); check_error(); int wrongly_rounded = 0; for (unsigned i = 0; i < 255; ++i) { - if (out_data[i * 2 + 0] != i) { + if (out_data[(i * 2 + 0) * 4] != i) { ++wrongly_rounded; } - if (out_data[i * 2 + 1] != i + 1) { + if (out_data[(i * 2 + 1) * 4] != i + 1) { ++wrongly_rounded; } }