- case GL_BLEND:
- Rc = texUnit->EnvColor[0];
- Gc = texUnit->EnvColor[1];
- Bc = texUnit->EnvColor[2];
- Ac = texUnit->EnvColor[3];
- switch (format) {
- case GL_ALPHA:
- for (i=0;i<n;i++) {
- /* Cv = Cf */
- /* Av = AfAt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- case GL_LUMINANCE:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-Lt) + CcLt */
- GLfloat Lt = texel[i][RCOMP], s = 1.0F - Lt;
- rgba[i][RCOMP] = rgba[i][RCOMP] * s + Rc * Lt;
- rgba[i][GCOMP] = rgba[i][GCOMP] * s + Gc * Lt;
- rgba[i][BCOMP] = rgba[i][BCOMP] * s + Bc * Lt;
- /* Av = Af */
- }
- break;
- case GL_LUMINANCE_ALPHA:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-Lt) + CcLt */
- GLfloat Lt = texel[i][RCOMP], s = 1.0F - Lt;
- rgba[i][RCOMP] = rgba[i][RCOMP] * s + Rc * Lt;
- rgba[i][GCOMP] = rgba[i][GCOMP] * s + Gc * Lt;
- rgba[i][BCOMP] = rgba[i][BCOMP] * s + Bc * Lt;
- /* Av = AfAt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- case GL_INTENSITY:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-It) + CcIt */
- GLfloat It = texel[i][RCOMP], s = 1.0F - It;
- rgba[i][RCOMP] = rgba[i][RCOMP] * s + Rc * It;
- rgba[i][GCOMP] = rgba[i][GCOMP] * s + Gc * It;
- rgba[i][BCOMP] = rgba[i][BCOMP] * s + Bc * It;
- /* Av = Af(1-It) + Ac*It */
- rgba[i][ACOMP] = rgba[i][ACOMP] * s + Ac * It;
- }
- break;
- case GL_RGB:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-Ct) + CcCt */
- rgba[i][RCOMP] = rgba[i][RCOMP] * (1.0F - texel[i][RCOMP])
- + Rc * texel[i][RCOMP];
- rgba[i][GCOMP] = rgba[i][GCOMP] * (1.0F - texel[i][GCOMP])
- + Gc * texel[i][GCOMP];
- rgba[i][BCOMP] = rgba[i][BCOMP] * (1.0F - texel[i][BCOMP])
- + Bc * texel[i][BCOMP];
- /* Av = Af */
- }
- break;
- case GL_RGBA:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-Ct) + CcCt */
- rgba[i][RCOMP] = rgba[i][RCOMP] * (1.0F - texel[i][RCOMP])
- + Rc * texel[i][RCOMP];
- rgba[i][GCOMP] = rgba[i][GCOMP] * (1.0F - texel[i][GCOMP])
- + Gc * texel[i][GCOMP];
- rgba[i][BCOMP] = rgba[i][BCOMP] * (1.0F - texel[i][BCOMP])
- + Bc * texel[i][BCOMP];
- /* Av = AfAt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- default:
- _mesa_problem(ctx, "Bad format (GL_BLEND) in texture_apply");
- return;
- }
- break;
-
- case GL_ADD: /* GL_EXT_texture_add_env */
- switch (format) {
- case GL_ALPHA:
- for (i=0;i<n;i++) {
- /* Rv = Rf */
- /* Gv = Gf */
- /* Bv = Bf */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- case GL_LUMINANCE:
- for (i=0;i<n;i++) {
- GLfloat Lt = texel[i][RCOMP];
- GLfloat r = rgba[i][RCOMP] + Lt;
- GLfloat g = rgba[i][GCOMP] + Lt;
- GLfloat b = rgba[i][BCOMP] + Lt;
- rgba[i][RCOMP] = MIN2(r, 1.0F);
- rgba[i][GCOMP] = MIN2(g, 1.0F);
- rgba[i][BCOMP] = MIN2(b, 1.0F);
- /* Av = Af */
- }
- break;
- case GL_LUMINANCE_ALPHA:
- for (i=0;i<n;i++) {
- GLfloat Lt = texel[i][RCOMP];
- GLfloat r = rgba[i][RCOMP] + Lt;
- GLfloat g = rgba[i][GCOMP] + Lt;
- GLfloat b = rgba[i][BCOMP] + Lt;
- rgba[i][RCOMP] = MIN2(r, 1.0F);
- rgba[i][GCOMP] = MIN2(g, 1.0F);
- rgba[i][BCOMP] = MIN2(b, 1.0F);
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- case GL_INTENSITY:
- for (i=0;i<n;i++) {
- GLfloat It = texel[i][RCOMP];
- GLfloat r = rgba[i][RCOMP] + It;
- GLfloat g = rgba[i][GCOMP] + It;
- GLfloat b = rgba[i][BCOMP] + It;
- GLfloat a = rgba[i][ACOMP] + It;
- rgba[i][RCOMP] = MIN2(r, 1.0F);
- rgba[i][GCOMP] = MIN2(g, 1.0F);
- rgba[i][BCOMP] = MIN2(b, 1.0F);
- rgba[i][ACOMP] = MIN2(a, 1.0F);
- }
- break;
- case GL_RGB:
- for (i=0;i<n;i++) {
- GLfloat r = rgba[i][RCOMP] + texel[i][RCOMP];
- GLfloat g = rgba[i][GCOMP] + texel[i][GCOMP];
- GLfloat b = rgba[i][BCOMP] + texel[i][BCOMP];
- rgba[i][RCOMP] = MIN2(r, 1.0F);
- rgba[i][GCOMP] = MIN2(g, 1.0F);
- rgba[i][BCOMP] = MIN2(b, 1.0F);
- /* Av = Af */
- }
- break;
- case GL_RGBA:
- for (i=0;i<n;i++) {
- GLfloat r = rgba[i][RCOMP] + texel[i][RCOMP];
- GLfloat g = rgba[i][GCOMP] + texel[i][GCOMP];
- GLfloat b = rgba[i][BCOMP] + texel[i][BCOMP];
- rgba[i][RCOMP] = MIN2(r, 1.0F);
- rgba[i][GCOMP] = MIN2(g, 1.0F);
- rgba[i][BCOMP] = MIN2(b, 1.0F);
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- default:
- _mesa_problem(ctx, "Bad format (GL_ADD) in texture_apply");
- return;
- }
- break;
-
- default:
- _mesa_problem(ctx, "Bad env mode in texture_apply");
- return;