From 4e176ff358956b773ec486a220cc21971ed97495 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 22 Nov 1999 22:21:38 +0000 Subject: added _mesa_clip_pixelrect() --- src/mesa/main/drawpix.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- src/mesa/main/drawpix.h | 9 ++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c index 4166596ed6..a3f1354644 100644 --- a/src/mesa/main/drawpix.c +++ b/src/mesa/main/drawpix.c @@ -1,4 +1,4 @@ -/* $Id: drawpix.c,v 1.7 1999/11/18 15:44:37 brianp Exp $ */ +/* $Id: drawpix.c,v 1.8 1999/11/22 22:21:38 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -44,6 +44,50 @@ +/* + * Given the dest position, size and skipPixels and skipRows values + * for a glDrawPixels command, perform clipping of the image bounds + * so the result lies withing the context's buffer bounds. + * Return: GL_TRUE if image is ready for drawing + * GL_FALSE if image was completely clipped away (draw nothing) + */ +GLboolean +_mesa_clip_pixelrect(const GLcontext *ctx, + GLint *destX, GLint *destY, + GLsizei *width, GLsizei *height, + GLint *skipPixels, GLint *skipRows) +{ + /* left clipping */ + if (*destX < ctx->Buffer->Xmin) { + *skipPixels += (ctx->Buffer->Xmin - *destX); + *width -= (ctx->Buffer->Xmin - *destX); + *destX = ctx->Buffer->Xmin; + } + /* right clipping */ + if (*destX + *width > ctx->Buffer->Xmax) + *width -= (*destX + *width - ctx->Buffer->Xmax - 1); + + if (*width <= 0) + return GL_FALSE; + + /* bottom clipping */ + if (*destY < ctx->Buffer->Ymin) { + *skipRows += (ctx->Buffer->Ymin - *destY); + *height -= (ctx->Buffer->Ymin - *destY); + *destY = ctx->Buffer->Ymin; + } + /* top clipping */ + if (*destY + *height > ctx->Buffer->Ymax) + *height -= (*destY + *height - ctx->Buffer->Ymax - 1); + + if (*height <= 0) + return GL_TRUE; + + return GL_TRUE; +} + + + /* * Try to do a fast and simple RGB(a) glDrawPixels. * Return: GL_TRUE if success, GL_FALSE if slow path must be used instead diff --git a/src/mesa/main/drawpix.h b/src/mesa/main/drawpix.h index 40da8dfb2c..3a0fd57bc1 100644 --- a/src/mesa/main/drawpix.h +++ b/src/mesa/main/drawpix.h @@ -1,4 +1,4 @@ -/* $Id: drawpix.h,v 1.2 1999/11/11 01:22:26 brianp Exp $ */ +/* $Id: drawpix.h,v 1.3 1999/11/22 22:21:38 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -32,6 +32,13 @@ #include "types.h" +extern GLboolean +_mesa_clip_pixelrect(const GLcontext *ctx, + GLint *destX, GLint *destY, + GLsizei *width, GLsizei *height, + GLint *skipPixels, GLint *skipRows); + + extern void _mesa_DrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); -- cgit v1.2.3