GLES2 requires GL_RGBA to be used with GL_UNSIGNED_BYTE in glReadPixels
---
 tests/util/piglit-util-gl.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
index df39c1c87..3a41a5eb0 100644
--- a/tests/util/piglit-util-gl.c
+++ b/tests/util/piglit-util-gl.c
@@ -1018,21 +1018,25 @@ read_pixels_float(GLint x, GLint y, GLsizei width, 
GLsizei height,
                  GLenum format, GLfloat *pixels)
 {
        GLubyte *pixels_b;
-       unsigned i, ncomponents;
+       unsigned i, j, k;
+       int comps = piglit_num_components(format);
 
-       ncomponents = width * height * piglit_num_components(format);
        if (!pixels)
-               pixels = malloc(ncomponents * sizeof(GLfloat));
+               pixels = malloc(width * height * comps * sizeof(GLfloat));
 
        if (!piglit_is_gles()) {
                glReadPixels(x, y, width, height, format, GL_FLOAT, pixels);
                return pixels;
        }
 
-       pixels_b = malloc(ncomponents * sizeof(GLubyte));
-       glReadPixels(x, y, width, height, format, GL_UNSIGNED_BYTE, pixels_b);
-       for (i = 0; i < ncomponents; i++)
-               pixels[i] = pixels_b[i] / 255.0;
+       pixels_b = malloc(width * height * 4 * sizeof(GLubyte));
+       glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels_b);
+       k = 0;
+       for (i = 0; i < width * height; i++) {
+               for (j = 0; j < comps; j++) {
+                       pixels[k++] = pixels_b[i*4+j] / 255.0f;
+               }
+       }
        free(pixels_b);
        return pixels;
 }
-- 
2.14.3

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to