[Piglit] [PATCH v2] fix read_pixels_float() on GLES2 when format is not GL_RGBA
Brian Paul
brianp at vmware.com
Wed Mar 28 15:05:46 UTC 2018
On 03/28/2018 05:37 AM, Rhys Perry wrote:
> GLES2 requires GL_RGBA to be used with GL_UNSIGNED_BYTE in glReadPixels
> ---
> tests/util/piglit-util-gl.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
> index df39c1c87..0504be063 100644
> --- a/tests/util/piglit-util-gl.c
> +++ b/tests/util/piglit-util-gl.c
> @@ -1029,10 +1029,10 @@ read_pixels_float(GLint x, GLint y, GLsizei width, GLsizei height,
> return pixels;
> }
>
> - pixels_b = malloc(ncomponents * sizeof(GLubyte));
> - glReadPixels(x, y, width, height, format, GL_UNSIGNED_BYTE, pixels_b);
> + pixels_b = malloc(width * height * 4 * sizeof(GLubyte));
> + glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels_b);
> for (i = 0; i < ncomponents; i++)
> - pixels[i] = pixels_b[i] / 255.0;
> + pixels[i] = pixels_b[i/ncomponents*4+i%ncomponents] / 255.0;
That looks a bit inefficient to me with all the divides and mods, and a
little hard to follow at first glance.
How about something like this:
int comps = piglit_num_components(format);
int k = 0;
for (i = 0; i < width * height; i++) {
for (j = 0; j < comps; j++) {
pixels[k++] = pixels_b[i * 4 + j] / 255.0f;
}
}
-Brian
> free(pixels_b);
> return pixels;
> }
>
More information about the Piglit
mailing list