X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=test_util.cpp;h=a5cd44cf251ed514697c79d567b15f037b620aa7;hp=ec9cbf947a5bcbd7b518677f44f279c7972df301;hb=3a36e34bd2b4e374bc501606ec28111eb3822334;hpb=144496bf79000c3971090195fbfedcb2cb22a0be diff --git a/test_util.cpp b/test_util.cpp index ec9cbf9..a5cd44c 100644 --- a/test_util.cpp +++ b/test_util.cpp @@ -59,7 +59,7 @@ EffectChainTester::EffectChainTester(const float *data, unsigned width, unsigned check_error(); glBindTexture(GL_TEXTURE_2D, texnum); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, framebuffer_format, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, framebuffer_format, width, height, 0, GL_RGBA, GL_FLOAT, NULL); check_error(); glGenFramebuffers(1, &fbo); @@ -132,7 +132,20 @@ void EffectChainTester::run(float *out_data, GLenum format, Colorspace color_spa chain.render_to_fbo(fbo, width, height); glBindFramebuffer(GL_FRAMEBUFFER, fbo); - glReadPixels(0, 0, width, height, format, GL_FLOAT, out_data); + check_error(); + if (!epoxy_is_desktop_gl() && format == GL_RED) { + // GLES will only read GL_RGBA. + float *temp = new float[width * height * 4]; + glReadPixels(0, 0, width, height, GL_RGBA, GL_FLOAT, temp); + check_error(); + for (int i = 0; i < width * height; ++i) { + out_data[i] = temp[i * 4]; + } + delete[] temp; + } else { + glReadPixels(0, 0, width, height, format, GL_FLOAT, out_data); + check_error(); + } if (format == GL_RGBA) { width *= 4; @@ -150,7 +163,20 @@ void EffectChainTester::run(unsigned char *out_data, GLenum format, Colorspace c chain.render_to_fbo(fbo, width, height); glBindFramebuffer(GL_FRAMEBUFFER, fbo); - glReadPixels(0, 0, width, height, format, GL_UNSIGNED_BYTE, out_data); + check_error(); + if (!epoxy_is_desktop_gl() && format == GL_RED) { + // GLES will only read GL_RGBA. + unsigned char *temp = new unsigned char[width * height * 4]; + glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, temp); + check_error(); + for (int i = 0; i < width * height; ++i) { + out_data[i] = temp[i * 4]; + } + delete[] temp; + } else { + glReadPixels(0, 0, width, height, format, GL_UNSIGNED_BYTE, out_data); + check_error(); + } if (format == GL_RGBA) { width *= 4;