summaryrefslogtreecommitdiff
path: root/src/mesa/main
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>1999-11-22 22:21:38 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>1999-11-22 22:21:38 +0000
commit4e176ff358956b773ec486a220cc21971ed97495 (patch)
tree02c41e423f33c7e8592ce5aa3df50bec8f9b76cd /src/mesa/main
parent78fc78e0f68a20ae90f3d4aaf361751a9185a0b9 (diff)
added _mesa_clip_pixelrect()
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/drawpix.c46
-rw-r--r--src/mesa/main/drawpix.h9
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
@@ -45,6 +45,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 );