- switch (texUnit->EnvMode) {
- case GL_REPLACE:
- switch (format) {
- case GL_ALPHA:
- for (i=0;i<n;i++) {
- /* Cv = Cf */
- /* Av = At */
- rgba[i][ACOMP] = texel[i][ACOMP];
- }
- break;
- case GL_LUMINANCE:
- for (i=0;i<n;i++) {
- /* Cv = Lt */
- GLfloat Lt = texel[i][RCOMP];
- rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = Lt;
- /* Av = Af */
- }
- break;
- case GL_LUMINANCE_ALPHA:
- for (i=0;i<n;i++) {
- GLfloat Lt = texel[i][RCOMP];
- /* Cv = Lt */
- rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = Lt;
- /* Av = At */
- rgba[i][ACOMP] = texel[i][ACOMP];
- }
- break;
- case GL_INTENSITY:
- for (i=0;i<n;i++) {
- /* Cv = It */
- GLfloat It = texel[i][RCOMP];
- rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = It;
- /* Av = It */
- rgba[i][ACOMP] = It;
- }
- break;
- case GL_RGB:
- for (i=0;i<n;i++) {
- /* Cv = Ct */
- rgba[i][RCOMP] = texel[i][RCOMP];
- rgba[i][GCOMP] = texel[i][GCOMP];
- rgba[i][BCOMP] = texel[i][BCOMP];
- /* Av = Af */
- }
- break;
- case GL_RGBA:
- for (i=0;i<n;i++) {
- /* Cv = Ct */
- rgba[i][RCOMP] = texel[i][RCOMP];
- rgba[i][GCOMP] = texel[i][GCOMP];
- rgba[i][BCOMP] = texel[i][BCOMP];
- /* Av = At */
- rgba[i][ACOMP] = texel[i][ACOMP];
- }
- break;
- default:
- _mesa_problem(ctx, "Bad format (GL_REPLACE) in texture_apply");
- return;
- }
- break;
-
- case GL_MODULATE:
- 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 = LtCf */
- GLfloat Lt = texel[i][RCOMP];
- rgba[i][RCOMP] = rgba[i][RCOMP] * Lt;
- rgba[i][GCOMP] = rgba[i][GCOMP] * Lt;
- rgba[i][BCOMP] = rgba[i][BCOMP] * Lt;
- /* Av = Af */
- }
- break;
- case GL_LUMINANCE_ALPHA:
- for (i=0;i<n;i++) {
- /* Cv = CfLt */
- GLfloat Lt = texel[i][RCOMP];
- rgba[i][RCOMP] = rgba[i][RCOMP] * Lt;
- rgba[i][GCOMP] = rgba[i][GCOMP] * Lt;
- rgba[i][BCOMP] = rgba[i][BCOMP] * Lt;
- /* Av = AfAt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- case GL_INTENSITY:
- for (i=0;i<n;i++) {
- /* Cv = CfIt */
- GLfloat It = texel[i][RCOMP];
- rgba[i][RCOMP] = rgba[i][RCOMP] * It;
- rgba[i][GCOMP] = rgba[i][GCOMP] * It;
- rgba[i][BCOMP] = rgba[i][BCOMP] * It;
- /* Av = AfIt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * It;
- }
- break;
- case GL_RGB:
- for (i=0;i<n;i++) {
- /* Cv = CfCt */
- rgba[i][RCOMP] = rgba[i][RCOMP] * texel[i][RCOMP];
- rgba[i][GCOMP] = rgba[i][GCOMP] * texel[i][GCOMP];
- rgba[i][BCOMP] = rgba[i][BCOMP] * texel[i][BCOMP];
- /* Av = Af */
- }
- break;
- case GL_RGBA:
- for (i=0;i<n;i++) {
- /* Cv = CfCt */
- rgba[i][RCOMP] = rgba[i][RCOMP] * texel[i][RCOMP];
- rgba[i][GCOMP] = rgba[i][GCOMP] * texel[i][GCOMP];
- rgba[i][BCOMP] = rgba[i][BCOMP] * texel[i][BCOMP];
- /* Av = AfAt */
- rgba[i][ACOMP] = rgba[i][ACOMP] * texel[i][ACOMP];
- }
- break;
- default:
- _mesa_problem(ctx, "Bad format (GL_MODULATE) in texture_apply");
- return;
- }
- break;
-
- case GL_DECAL:
- switch (format) {
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_INTENSITY:
- /* undefined */
- break;
- case GL_RGB:
- for (i=0;i<n;i++) {
- /* Cv = Ct */
- rgba[i][RCOMP] = texel[i][RCOMP];
- rgba[i][GCOMP] = texel[i][GCOMP];
- rgba[i][BCOMP] = texel[i][BCOMP];
- /* Av = Af */
- }
- break;
- case GL_RGBA:
- for (i=0;i<n;i++) {
- /* Cv = Cf(1-At) + CtAt */
- GLfloat t = texel[i][ACOMP], s = 1.0F - t;
- rgba[i][RCOMP] = rgba[i][RCOMP] * s + texel[i][RCOMP] * t;
- rgba[i][GCOMP] = rgba[i][GCOMP] * s + texel[i][GCOMP] * t;
- rgba[i][BCOMP] = rgba[i][BCOMP] * s + texel[i][BCOMP] * t;
- /* Av = Af */
- }
- break;
- default:
- _mesa_problem(ctx, "Bad format (GL_DECAL) in texture_apply");
- return;
- }
- break;
-
- 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;