[Mesa-dev] [PATCH 02/13] mesa: use integers in glReadPixels for GL_RGBA with integer types

Brian Paul brianp at vmware.com
Tue Jun 26 14:34:32 PDT 2012


On 06/25/2012 06:34 PM, Jordan Justen wrote:
> Previously if a format of GL_RGBA was used, then float data would
> be returned, even if the type was an integer type.
>
> Signed-off-by: Jordan Justen<jordan.l.justen at intel.com>
> ---
>   src/mesa/main/readpix.c |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
> index 4058019..e3c4611 100644
> --- a/src/mesa/main/readpix.c
> +++ b/src/mesa/main/readpix.c
> @@ -337,7 +337,7 @@ slow_read_rgba_pixels( struct gl_context *ctx,
>         goto done;
>
>      for (j = 0; j<  height; j++) {
> -      if (_mesa_is_enum_format_integer(format)) {
> +      if (_mesa_is_integer_format_or_type(format, type)) {
>   	 _mesa_unpack_uint_rgba_row(rbFormat, width, map, (GLuint (*)[4]) rgba);
>            _mesa_rebase_rgba_uint(width, (GLuint (*)[4]) rgba,
>                                   rb->_BaseFormat);

I'm not quite sure I follow this.

If we call glReadPixels(format=GL_RGBA, type=GL_UNSIGNED_BYTE) it 
looks like _mesa_is_integer_format_or_type(format, type) will evaluate 
to true and we'll errantly take the integer path, rather than the 
float path.

If one wants to read integer-valued colors, you need to pass 
format=GL_RGBA_INTEGER.

-Brian


More information about the mesa-dev mailing list