From 751e10fc0106e929a54d055de7427b3d87a6ffa6 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 25 Oct 2010 19:07:33 -0600 Subject: mesa: additional glReadPixels error checks for GL_EXT_texture_integer --- src/mesa/main/readpix.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c index e2ce264cf0..ad27d1192e 100644 --- a/src/mesa/main/readpix.c +++ b/src/mesa/main/readpix.c @@ -28,6 +28,7 @@ #include "context.h" #include "readpix.h" #include "framebuffer.h" +#include "formats.h" #include "image.h" #include "state.h" @@ -185,6 +186,20 @@ _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, return; } + /* Check that the destination format and source buffer are both + * integer-valued or both non-integer-valued. + */ + if (ctx->Extensions.EXT_texture_integer && _mesa_is_color_format(format)) { + const struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer; + const GLboolean srcInteger = _mesa_is_format_integer(rb->Format); + const GLboolean dstInteger = _mesa_is_integer_format(format); + if (dstInteger != srcInteger) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(integer / non-integer format mismatch"); + return; + } + } + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "glReadPixels(incomplete framebuffer)" ); -- cgit v1.2.3