summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2003-02-27 18:15:18 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2003-02-27 18:15:18 +0000
commit6a98bef96189fbacc326ad9e407c1d4423aa8572 (patch)
treec4ba5d11f04730a7f2e8a27bd356430208f8aa17
parent759c8f92e9640128ea476fef6761f14e1319f87d (diff)
fix float color interpolation (bug 694461)
-rw-r--r--src/mesa/swrast/s_span.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 4e00c645fa..e65d19c9d3 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -1,10 +1,10 @@
-/* $Id: s_span.c,v 1.54 2003/01/14 04:55:46 brianp Exp $ */
+/* $Id: s_span.c,v 1.55 2003/02/27 18:15:18 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 5.0.1
*
- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2003 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"),
@@ -141,14 +141,6 @@ _mesa_span_default_texcoords( GLcontext *ctx, struct sw_span *span )
static void
interpolate_colors(GLcontext *ctx, struct sw_span *span)
{
- GLfixed r = span->red;
- GLfixed g = span->green;
- GLfixed b = span->blue;
- GLfixed a = span->alpha;
- const GLint dr = span->redStep;
- const GLint dg = span->greenStep;
- const GLint db = span->blueStep;
- const GLint da = span->alphaStep;
const GLuint n = span->end;
GLchan (*rgba)[4] = span->array->rgba;
GLuint i;
@@ -159,16 +151,35 @@ interpolate_colors(GLcontext *ctx, struct sw_span *span)
if (span->interpMask & SPAN_FLAT) {
/* constant color */
GLchan color[4];
- color[RCOMP] = FixedToChan(r);
- color[GCOMP] = FixedToChan(g);
- color[BCOMP] = FixedToChan(b);
- color[ACOMP] = FixedToChan(a);
+ color[RCOMP] = FixedToChan(span->red);
+ color[GCOMP] = FixedToChan(span->green);
+ color[BCOMP] = FixedToChan(span->blue);
+ color[ACOMP] = FixedToChan(span->alpha);
for (i = 0; i < n; i++) {
COPY_CHAN4(span->array->rgba[i], color);
}
}
else {
/* interpolate */
+#if CHAN_TYPE == GL_FLOAT
+ GLfloat r = span->red;
+ GLfloat g = span->green;
+ GLfloat b = span->blue;
+ GLfloat a = span->alpha;
+ const GLfloat dr = span->redStep;
+ const GLfloat dg = span->greenStep;
+ const GLfloat db = span->blueStep;
+ const GLfloat da = span->alphaStep;
+#else
+ GLfixed r = span->red;
+ GLfixed g = span->green;
+ GLfixed b = span->blue;
+ GLfixed a = span->alpha;
+ const GLint dr = span->redStep;
+ const GLint dg = span->greenStep;
+ const GLint db = span->blueStep;
+ const GLint da = span->alphaStep;
+#endif
for (i = 0; i < n; i++) {
rgba[i][RCOMP] = FixedToChan(r);
rgba[i][GCOMP] = FixedToChan(g);