/*
* Mesa 3-D graphics library
- * Version: 6.5
+ * Version: 6.5.1
*
- * Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2006 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"),
#define PROD(A,B) ( (GLuint)(A) * ((GLuint)(B)+1) )
#define S_PROD(A,B) ( (GLint)(A) * ((GLint)(B)+1) )
+#if CHAN_BITS == 32
+typedef GLfloat ChanTemp;
+#else
+typedef GLuint ChanTemp;
+#endif
/**
#if CHAN_TYPE == GL_FLOAT
const GLchan RGBmult = (GLfloat) (1 << RGBshift);
const GLchan Amult = (GLfloat) (1 << Ashift);
- static const GLchan one[4] = { 1.0, 1.0, 1.0, 1.0 };
- static const GLchan zero[4] = { 0.0, 0.0, 0.0, 0.0 };
#else
const GLint half = (CHAN_MAX + 1) / 2;
+#endif
static const GLchan one[4] = { CHAN_MAX, CHAN_MAX, CHAN_MAX, CHAN_MAX };
static const GLchan zero[4] = { 0, 0, 0, 0 };
-#endif
const GLuint numColorArgs = textureUnit->_CurrentCombine->_NumArgsRGB;
const GLuint numAlphaArgs = textureUnit->_CurrentCombine->_NumArgsA;
GLchan ccolor[3][MAX_WIDTH][4];
for (j = 0; j < numColorArgs; j++) {
const GLenum srcRGB = textureUnit->_CurrentCombine->SourceRGB[j];
-
switch (srcRGB) {
case GL_TEXTURE:
argRGB[j] = (const GLchan (*)[4])
{
GLint baseLevel;
GLuint i;
- GLint Rc, Gc, Bc, Ac;
+ GLchan Rc, Gc, Bc, Ac;
GLenum format;
(void) primary_rgba;
baseLevel = texUnit->_Current->BaseLevel;
ASSERT(texUnit->_Current->Image[0][baseLevel]);
- format = texUnit->_Current->Image[0][baseLevel]->Format;
+ format = texUnit->_Current->Image[0][baseLevel]->_BaseFormat;
if (format == GL_COLOR_INDEX || format == GL_YCBCR_MESA) {
format = GL_RGBA; /* a bit of a hack */
case GL_RGBA:
for (i=0;i<n;i++) {
/* Cv = Cf(1-At) + CtAt */
- GLint t = texel[i][ACOMP], s = CHAN_MAX - t;
+ GLchan t = texel[i][ACOMP], s = CHAN_MAX - t;
rgba[i][RCOMP] = CHAN_PRODUCT(rgba[i][RCOMP], s) + CHAN_PRODUCT(texel[i][RCOMP],t);
rgba[i][GCOMP] = CHAN_PRODUCT(rgba[i][GCOMP], s) + CHAN_PRODUCT(texel[i][GCOMP],t);
rgba[i][BCOMP] = CHAN_PRODUCT(rgba[i][BCOMP], s) + CHAN_PRODUCT(texel[i][BCOMP],t);
break;
case GL_BLEND:
- Rc = (GLint) (texUnit->EnvColor[0] * CHAN_MAXF);
- Gc = (GLint) (texUnit->EnvColor[1] * CHAN_MAXF);
- Bc = (GLint) (texUnit->EnvColor[2] * CHAN_MAXF);
- Ac = (GLint) (texUnit->EnvColor[3] * CHAN_MAXF);
+ UNCLAMPED_FLOAT_TO_CHAN(Rc, texUnit->EnvColor[0]);
+ UNCLAMPED_FLOAT_TO_CHAN(Gc, texUnit->EnvColor[1]);
+ UNCLAMPED_FLOAT_TO_CHAN(Bc, texUnit->EnvColor[2]);
+ UNCLAMPED_FLOAT_TO_CHAN(Ac, texUnit->EnvColor[3]);
switch (format) {
case GL_ALPHA:
for (i=0;i<n;i++) {
break;
case GL_LUMINANCE:
for (i=0;i<n;i++) {
- GLuint Lt = texel[i][RCOMP];
- GLuint r = rgba[i][RCOMP] + Lt;
- GLuint g = rgba[i][GCOMP] + Lt;
- GLuint b = rgba[i][BCOMP] + Lt;
+ ChanTemp Lt = texel[i][RCOMP];
+ ChanTemp r = rgba[i][RCOMP] + Lt;
+ ChanTemp g = rgba[i][GCOMP] + Lt;
+ ChanTemp b = rgba[i][BCOMP] + Lt;
rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
break;
case GL_LUMINANCE_ALPHA:
for (i=0;i<n;i++) {
- GLuint Lt = texel[i][RCOMP];
- GLuint r = rgba[i][RCOMP] + Lt;
- GLuint g = rgba[i][GCOMP] + Lt;
- GLuint b = rgba[i][BCOMP] + Lt;
+ ChanTemp Lt = texel[i][RCOMP];
+ ChanTemp r = rgba[i][RCOMP] + Lt;
+ ChanTemp g = rgba[i][GCOMP] + Lt;
+ ChanTemp b = rgba[i][BCOMP] + Lt;
rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
case GL_INTENSITY:
for (i=0;i<n;i++) {
GLchan It = texel[i][RCOMP];
- GLuint r = rgba[i][RCOMP] + It;
- GLuint g = rgba[i][GCOMP] + It;
- GLuint b = rgba[i][BCOMP] + It;
- GLuint a = rgba[i][ACOMP] + It;
+ ChanTemp r = rgba[i][RCOMP] + It;
+ ChanTemp g = rgba[i][GCOMP] + It;
+ ChanTemp b = rgba[i][BCOMP] + It;
+ ChanTemp a = rgba[i][ACOMP] + It;
rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
break;
case GL_RGB:
for (i=0;i<n;i++) {
- GLuint r = rgba[i][RCOMP] + texel[i][RCOMP];
- GLuint g = rgba[i][GCOMP] + texel[i][GCOMP];
- GLuint b = rgba[i][BCOMP] + texel[i][BCOMP];
+ ChanTemp r = rgba[i][RCOMP] + texel[i][RCOMP];
+ ChanTemp g = rgba[i][GCOMP] + texel[i][GCOMP];
+ ChanTemp b = rgba[i][BCOMP] + texel[i][BCOMP];
rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
break;
case GL_RGBA:
for (i=0;i<n;i++) {
- GLuint r = rgba[i][RCOMP] + texel[i][RCOMP];
- GLuint g = rgba[i][GCOMP] + texel[i][GCOMP];
- GLuint b = rgba[i][BCOMP] + texel[i][BCOMP];
+ ChanTemp r = rgba[i][RCOMP] + texel[i][RCOMP];
+ ChanTemp g = rgba[i][GCOMP] + texel[i][GCOMP];
+ ChanTemp b = rgba[i][BCOMP] + texel[i][BCOMP];
rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
rgba[i][BCOMP] = MIN2(b, CHAN_MAX);