mesa/image: Make _mesa_clip_readpixels() work with renderbuffers
v2: Use gl_renderbuffer::{Width,Height} (Jason) Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org> Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
d03e5d5255
commit
55d56d34e0
|
@ -670,7 +670,7 @@ _mesa_clip_drawpixels(const struct gl_context *ctx,
|
|||
* so that the image region is entirely within the window bounds.
|
||||
* Note: this is different from _mesa_clip_drawpixels() in that the
|
||||
* scissor box is ignored, and we use the bounds of the current readbuffer
|
||||
* surface.
|
||||
* surface or the attached image.
|
||||
*
|
||||
* \return GL_TRUE if region to read is in bounds
|
||||
* GL_FALSE if region is completely out of bounds (nothing to read)
|
||||
|
@ -682,6 +682,18 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
|
|||
struct gl_pixelstore_attrib *pack)
|
||||
{
|
||||
const struct gl_framebuffer *buffer = ctx->ReadBuffer;
|
||||
struct gl_renderbuffer *rb = buffer->_ColorReadBuffer;
|
||||
GLsizei clip_width;
|
||||
GLsizei clip_height;
|
||||
|
||||
if (rb) {
|
||||
clip_width = rb->Width;
|
||||
clip_height = rb->Height;
|
||||
} else {
|
||||
clip_width = buffer->Width;
|
||||
clip_height = buffer->Height;
|
||||
}
|
||||
|
||||
|
||||
if (pack->RowLength == 0) {
|
||||
pack->RowLength = *width;
|
||||
|
@ -694,8 +706,8 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
|
|||
*srcX = 0;
|
||||
}
|
||||
/* right clipping */
|
||||
if (*srcX + *width > (GLsizei) buffer->Width)
|
||||
*width -= (*srcX + *width - buffer->Width);
|
||||
if (*srcX + *width > clip_width)
|
||||
*width -= (*srcX + *width - clip_width);
|
||||
|
||||
if (*width <= 0)
|
||||
return GL_FALSE;
|
||||
|
@ -707,8 +719,8 @@ _mesa_clip_readpixels(const struct gl_context *ctx,
|
|||
*srcY = 0;
|
||||
}
|
||||
/* top clipping */
|
||||
if (*srcY + *height > (GLsizei) buffer->Height)
|
||||
*height -= (*srcY + *height - buffer->Height);
|
||||
if (*srcY + *height > clip_height)
|
||||
*height -= (*srcY + *height - clip_height);
|
||||
|
||||
if (*height <= 0)
|
||||
return GL_FALSE;
|
||||
|
|
Loading…
Reference in New Issue