added _mesa_clip_pixelrect()
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 22 Nov 1999 22:21:38 +0000 (22:21 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 22 Nov 1999 22:21:38 +0000 (22:21 +0000)
src/mesa/main/drawpix.c
src/mesa/main/drawpix.h

index 4166596ed659633cae688057eb4a7084d59e881f..a3f1354644121556e338609aaad5d7455c31f51b 100644 (file)
@@ -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
 
 
 
+/*
+ * 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
index 40da8dfb2c8aa762eba5a030840eebbb92a37e57..3a0fd57bc1734e9e76ba49be354c73d0b0b822f4 100644 (file)
@@ -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
 #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 );