Module: Mesa Branch: 7.11 Commit: cd114ba5038a6704476fdcbfac112441674d582f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cd114ba5038a6704476fdcbfac112441674d582f
Author: Yuanhan Liu <[email protected]> Date: Sat Oct 15 22:44:18 2011 +0800 mesa: handle the pbo case for save_Bitmap Wrap _mesa_unpack_bitmap to handle the case that data is stored in pixel buffer object. This would make calling Bitmap with data stored in PBO by display list work. Signed-off-by: Yuanhan Liu <[email protected]> Reviewed-by: Brian Paul <[email protected]> (cherry picked from commit 02b801c1edec6400a4192e3e5b0595b13b771b18) --- src/mesa/main/dlist.c | 22 +++++++++++++++------- 1 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index a751fd2..36b4220 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -874,7 +874,7 @@ translate_id(GLsizei n, GLenum type, const GLvoid * list) /**********************************************************************/ /** - * Wrapper for _mesa_unpack_image() that handles pixel buffer objects. + * Wrapper for _mesa_unpack_image/bitmap() that handles pixel buffer objects. * If width < 0 or height < 0 or format or type are invalid we'll just * return NULL. We will not generate an error since OpenGL command * arguments aren't error-checked until the command is actually executed @@ -898,8 +898,13 @@ unpack_image(struct gl_context *ctx, GLuint dimensions, if (!_mesa_is_bufferobj(unpack->BufferObj)) { /* no PBO */ - GLvoid *image = _mesa_unpack_image(dimensions, width, height, depth, - format, type, pixels, unpack); + GLvoid *image; + + if (type == GL_BITMAP) + image = _mesa_unpack_bitmap(width, height, pixels, unpack); + else + image = _mesa_unpack_image(dimensions, width, height, depth, + format, type, pixels, unpack); if (pixels && !image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "display list construction"); } @@ -920,8 +925,11 @@ unpack_image(struct gl_context *ctx, GLuint dimensions, } src = ADD_POINTERS(map, pixels); - image = _mesa_unpack_image(dimensions, width, height, depth, - format, type, src, unpack); + if (type == GL_BITMAP) + image = _mesa_unpack_bitmap(width, height, src, unpack); + else + image = _mesa_unpack_image(dimensions, width, height, depth, + format, type, src, unpack); ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT, unpack->BufferObj); @@ -935,7 +943,6 @@ unpack_image(struct gl_context *ctx, GLuint dimensions, return NULL; } - /** * Allocate space for a display list instruction (opcode + payload space). * \param opcode the instruction opcode (OPCODE_* value) @@ -1121,7 +1128,8 @@ save_Bitmap(GLsizei width, GLsizei height, n[4].f = yorig; n[5].f = xmove; n[6].f = ymove; - n[7].data = _mesa_unpack_bitmap(width, height, pixels, &ctx->Unpack); + n[7].data = unpack_image(ctx, 2, width, height, 1, GL_COLOR_INDEX, + GL_BITMAP, pixels, &ctx->Unpack); } if (ctx->ExecuteFlag) { CALL_Bitmap(ctx->Exec, (width, height, _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
