Use the _mesa_scale_and_bias_rgba() function in the convolution functions.

Minor clean-ups.
This commit is contained in:
Brian Paul
2004-10-31 18:40:55 +00:00
parent 331cc1dcba
commit 450e917c9d
4 changed files with 49 additions and 89 deletions

View File

@@ -38,6 +38,7 @@
#include "context.h" #include "context.h"
#include "image.h" #include "image.h"
#include "mtypes.h" #include "mtypes.h"
#include "pixel.h"
#include "state.h" #include "state.h"
@@ -177,26 +178,16 @@ _mesa_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, G
ctx->Unpack.BufferObj); ctx->Unpack.BufferObj);
} }
/* apply scale and bias */ _mesa_scale_and_bias_rgba(width,
{ (GLfloat (*)[4]) ctx->Convolution1D.Filter,
const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[0]; ctx->Pixel.ConvolutionFilterScale[0][0],
const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[0]; ctx->Pixel.ConvolutionFilterScale[0][1],
GLint i; ctx->Pixel.ConvolutionFilterScale[0][2],
for (i = 0; i < width; i++) { ctx->Pixel.ConvolutionFilterScale[0][3],
GLfloat r = ctx->Convolution1D.Filter[i * 4 + 0]; ctx->Pixel.ConvolutionFilterBias[0][0],
GLfloat g = ctx->Convolution1D.Filter[i * 4 + 1]; ctx->Pixel.ConvolutionFilterBias[0][1],
GLfloat b = ctx->Convolution1D.Filter[i * 4 + 2]; ctx->Pixel.ConvolutionFilterBias[0][2],
GLfloat a = ctx->Convolution1D.Filter[i * 4 + 3]; ctx->Pixel.ConvolutionFilterBias[0][3]);
r = r * scale[0] + bias[0];
g = g * scale[1] + bias[1];
b = b * scale[2] + bias[2];
a = a * scale[3] + bias[3];
ctx->Convolution1D.Filter[i * 4 + 0] = r;
ctx->Convolution1D.Filter[i * 4 + 1] = g;
ctx->Convolution1D.Filter[i * 4 + 2] = b;
ctx->Convolution1D.Filter[i * 4 + 3] = a;
}
}
ctx->NewState |= _NEW_PIXEL; ctx->NewState |= _NEW_PIXEL;
} }
@@ -290,25 +281,16 @@ _mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, G
ctx->Unpack.BufferObj); ctx->Unpack.BufferObj);
} }
/* apply scale and bias */ _mesa_scale_and_bias_rgba(width * height,
{ (GLfloat (*)[4]) ctx->Convolution2D.Filter,
const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[1]; ctx->Pixel.ConvolutionFilterScale[1][0],
const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[1]; ctx->Pixel.ConvolutionFilterScale[1][1],
for (i = 0; i < width * height; i++) { ctx->Pixel.ConvolutionFilterScale[1][2],
GLfloat r = ctx->Convolution2D.Filter[i * 4 + 0]; ctx->Pixel.ConvolutionFilterScale[1][3],
GLfloat g = ctx->Convolution2D.Filter[i * 4 + 1]; ctx->Pixel.ConvolutionFilterBias[1][0],
GLfloat b = ctx->Convolution2D.Filter[i * 4 + 2]; ctx->Pixel.ConvolutionFilterBias[1][1],
GLfloat a = ctx->Convolution2D.Filter[i * 4 + 3]; ctx->Pixel.ConvolutionFilterBias[1][2],
r = r * scale[0] + bias[0]; ctx->Pixel.ConvolutionFilterBias[1][3]);
g = g * scale[1] + bias[1];
b = b * scale[2] + bias[2];
a = a * scale[3] + bias[3];
ctx->Convolution2D.Filter[i * 4 + 0] = r;
ctx->Convolution2D.Filter[i * 4 + 1] = g;
ctx->Convolution2D.Filter[i * 4 + 2] = b;
ctx->Convolution2D.Filter[i * 4 + 3] = a;
}
}
ctx->NewState |= _NEW_PIXEL; ctx->NewState |= _NEW_PIXEL;
} }
@@ -958,26 +940,16 @@ _mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLs
format, type, row, &ctx->Unpack, format, type, row, &ctx->Unpack,
0); /* transferOps */ 0); /* transferOps */
/* apply scale and bias */ _mesa_scale_and_bias_rgba(width,
{ (GLfloat (*)[4]) ctx->Separable2D.Filter,
const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[2]; ctx->Pixel.ConvolutionFilterScale[2][0],
const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[2]; ctx->Pixel.ConvolutionFilterScale[2][1],
GLint i; ctx->Pixel.ConvolutionFilterScale[2][2],
for (i = 0; i < width; i++) { ctx->Pixel.ConvolutionFilterScale[2][3],
GLfloat r = ctx->Separable2D.Filter[i * 4 + 0]; ctx->Pixel.ConvolutionFilterBias[2][0],
GLfloat g = ctx->Separable2D.Filter[i * 4 + 1]; ctx->Pixel.ConvolutionFilterBias[2][1],
GLfloat b = ctx->Separable2D.Filter[i * 4 + 2]; ctx->Pixel.ConvolutionFilterBias[2][2],
GLfloat a = ctx->Separable2D.Filter[i * 4 + 3]; ctx->Pixel.ConvolutionFilterBias[2][3]);
r = r * scale[0] + bias[0];
g = g * scale[1] + bias[1];
b = b * scale[2] + bias[2];
a = a * scale[3] + bias[3];
ctx->Separable2D.Filter[i * 4 + 0] = r;
ctx->Separable2D.Filter[i * 4 + 1] = g;
ctx->Separable2D.Filter[i * 4 + 2] = b;
ctx->Separable2D.Filter[i * 4 + 3] = a;
}
}
} }
/* unpack column filter */ /* unpack column filter */
@@ -987,26 +959,16 @@ _mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLs
format, type, column, &ctx->Unpack, format, type, column, &ctx->Unpack,
0); /* transferOps */ 0); /* transferOps */
/* apply scale and bias */ _mesa_scale_and_bias_rgba(height,
{ (GLfloat (*)[4]) (ctx->Separable2D.Filter + colStart),
const GLfloat *scale = ctx->Pixel.ConvolutionFilterScale[2]; ctx->Pixel.ConvolutionFilterScale[2][0],
const GLfloat *bias = ctx->Pixel.ConvolutionFilterBias[2]; ctx->Pixel.ConvolutionFilterScale[2][1],
GLint i; ctx->Pixel.ConvolutionFilterScale[2][2],
for (i = 0; i < height; i++) { ctx->Pixel.ConvolutionFilterScale[2][3],
GLfloat r = ctx->Separable2D.Filter[i * 4 + 0 + colStart]; ctx->Pixel.ConvolutionFilterBias[2][0],
GLfloat g = ctx->Separable2D.Filter[i * 4 + 1 + colStart]; ctx->Pixel.ConvolutionFilterBias[2][1],
GLfloat b = ctx->Separable2D.Filter[i * 4 + 2 + colStart]; ctx->Pixel.ConvolutionFilterBias[2][2],
GLfloat a = ctx->Separable2D.Filter[i * 4 + 3 + colStart]; ctx->Pixel.ConvolutionFilterBias[2][3]);
r = r * scale[0] + bias[0];
g = g * scale[1] + bias[1];
b = b * scale[2] + bias[2];
a = a * scale[3] + bias[3];
ctx->Separable2D.Filter[i * 4 + 0 + colStart] = r;
ctx->Separable2D.Filter[i * 4 + 1 + colStart] = g;
ctx->Separable2D.Filter[i * 4 + 2 + colStart] = b;
ctx->Separable2D.Filter[i * 4 + 3 + colStart] = a;
}
}
} }
if (ctx->Unpack.BufferObj->Name) { if (ctx->Unpack.BufferObj->Name) {

View File

@@ -518,7 +518,7 @@ _mesa_image_address( const struct gl_pixelstore_attrib *packing,
/* Compute number of components per pixel */ /* Compute number of components per pixel */
comp_per_pixel = _mesa_components_in_format( format ); comp_per_pixel = _mesa_components_in_format( format );
if (comp_per_pixel<0 && type != GL_BITMAP) { if (comp_per_pixel < 0) {
return NULL; return NULL;
} }
@@ -922,7 +922,7 @@ _mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLuint transferOps,
{ {
/* scale & bias */ /* scale & bias */
if (transferOps & IMAGE_SCALE_BIAS_BIT) { if (transferOps & IMAGE_SCALE_BIAS_BIT) {
_mesa_scale_and_bias_rgba(ctx, n, rgba, _mesa_scale_and_bias_rgba(n, rgba,
ctx->Pixel.RedScale, ctx->Pixel.GreenScale, ctx->Pixel.RedScale, ctx->Pixel.GreenScale,
ctx->Pixel.BlueScale, ctx->Pixel.AlphaScale, ctx->Pixel.BlueScale, ctx->Pixel.AlphaScale,
ctx->Pixel.RedBias, ctx->Pixel.GreenBias, ctx->Pixel.RedBias, ctx->Pixel.GreenBias,
@@ -943,7 +943,7 @@ _mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLuint transferOps,
} }
/* GL_POST_CONVOLUTION_RED/GREEN/BLUE/ALPHA_SCALE/BIAS */ /* GL_POST_CONVOLUTION_RED/GREEN/BLUE/ALPHA_SCALE/BIAS */
if (transferOps & IMAGE_POST_CONVOLUTION_SCALE_BIAS) { if (transferOps & IMAGE_POST_CONVOLUTION_SCALE_BIAS) {
_mesa_scale_and_bias_rgba(ctx, n, rgba, _mesa_scale_and_bias_rgba(n, rgba,
ctx->Pixel.PostConvolutionScale[RCOMP], ctx->Pixel.PostConvolutionScale[RCOMP],
ctx->Pixel.PostConvolutionScale[GCOMP], ctx->Pixel.PostConvolutionScale[GCOMP],
ctx->Pixel.PostConvolutionScale[BCOMP], ctx->Pixel.PostConvolutionScale[BCOMP],

View File

@@ -1074,14 +1074,12 @@ _mesa_PixelTransferi( GLenum pname, GLint param )
* Apply scale and bias factors to an array of RGBA pixels. * Apply scale and bias factors to an array of RGBA pixels.
*/ */
void void
_mesa_scale_and_bias_rgba(GLcontext *ctx, GLuint n, GLfloat rgba[][4], _mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
GLfloat rScale, GLfloat gScale, GLfloat rScale, GLfloat gScale,
GLfloat bScale, GLfloat aScale, GLfloat bScale, GLfloat aScale,
GLfloat rBias, GLfloat gBias, GLfloat rBias, GLfloat gBias,
GLfloat bBias, GLfloat aBias) GLfloat bBias, GLfloat aBias)
{ {
(void) ctx;
if (rScale != 1.0 || rBias != 0.0) { if (rScale != 1.0 || rBias != 0.0) {
GLuint i; GLuint i;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {

View File

@@ -5,7 +5,7 @@
/* /*
* Mesa 3-D graphics library * Mesa 3-D graphics library
* Version: 6.1 * Version: 6.3
* *
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
* *
@@ -79,7 +79,7 @@ _mesa_PixelZoom( GLfloat xfactor, GLfloat yfactor );
/*@{*/ /*@{*/
extern void extern void
_mesa_scale_and_bias_rgba(const GLcontext *ctx, GLuint n, GLfloat rgba[][4], _mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],
GLfloat rScale, GLfloat gScale, GLfloat rScale, GLfloat gScale,
GLfloat bScale, GLfloat aScale, GLfloat bScale, GLfloat aScale,
GLfloat rBias, GLfloat gBias, GLfloat rBias, GLfloat gBias,