added _mesa_adjust_image_for_convolution()
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 6 Feb 2001 17:22:16 +0000 (17:22 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 6 Feb 2001 17:22:16 +0000 (17:22 +0000)
src/mesa/main/convolve.c
src/mesa/main/convolve.h

index 1a32acb41e265a060675dbce57e048e2d6dd43fd..891e0aa5a6f4106d9727b0a4663a006c94ceb9dd 100644 (file)
@@ -1,10 +1,10 @@
-/* $Id: convolve.c,v 1.18 2001/01/05 02:26:48 keithw Exp $ */
+/* $Id: convolve.c,v 1.19 2001/02/06 17:22:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
  * Version:  3.5
  *
- * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -1420,3 +1420,34 @@ _mesa_convolve_sep_image(const GLcontext *ctx,
          ;
    }
 }
+
+
+
+/*
+ * This function computes an image's size after convolution.
+ * If the convolution border mode is GL_REDUCE, the post-convolution
+ * image will be smaller than the original.
+ */
+void
+_mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
+                                   GLsizei *width, GLsizei *height)
+{
+   if (ctx->Pixel.Convolution1DEnabled
+       && dimensions == 1
+       && ctx->Pixel.ConvolutionBorderMode[0] == GL_REDUCE) {
+      *width = *width - (MAX2(ctx->Convolution1D.Width, 1) - 1);
+   }
+   else if (ctx->Pixel.Convolution2DEnabled
+            && dimensions > 1
+            && ctx->Pixel.ConvolutionBorderMode[1] == GL_REDUCE) {
+      *width = *width - (MAX2(ctx->Convolution2D.Width, 1) - 1);
+      *height = *height - (MAX2(ctx->Convolution2D.Height, 1) - 1);
+   }
+   else if (ctx->Pixel.Separable2DEnabled
+            && dimensions > 1
+            && ctx->Pixel.ConvolutionBorderMode[2] == GL_REDUCE) {
+      *width = *width - (MAX2(ctx->Separable2D.Width, 1) - 1);
+      *height = *height - (MAX2(ctx->Separable2D.Height, 1) - 1);
+   }
+}
+
index 7d8acc3d58a61212ada083b62f5adca2b106e8ba..72a5d6f63271a2ed7454805d4dc3a13a4a67bc51 100644 (file)
@@ -1,10 +1,10 @@
-/* $Id: convolve.h,v 1.3 2000/11/22 07:32:16 joukj Exp $ */
+/* $Id: convolve.h,v 1.4 2001/02/06 17:22:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
  * Version:  3.5
  *
- * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -100,4 +100,9 @@ _mesa_convolve_sep_image(const GLcontext *ctx,
                          const GLfloat *srcImage, GLfloat *dstImage);
 
 
+extern void
+_mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
+                                   GLsizei *width, GLsizei *height);
+
+
 #endif