Blend MIN/MAX modes are special: the src/dest terms are always one.
authorBrian <brian.paul@tungstengraphics.com>
Tue, 3 Jul 2007 23:13:04 +0000 (17:13 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 3 Jul 2007 23:13:04 +0000 (17:13 -0600)
src/mesa/state_tracker/st_atom_blend.c

index 03fbd290e0e748c95f5a610608d6c4de9e8a3b85..e0215c9eefe1029e008531ada9f831e886a1cb85 100644 (file)
@@ -169,12 +169,28 @@ update_blend( struct st_context *st )
       blend.blend_enable = 1;
 
       blend.rgb_func = gl_blend_to_sp(st->ctx->Color.BlendEquationRGB);
-      blend.rgb_src_factor = gl_blend_to_sp(st->ctx->Color.BlendSrcRGB);
-      blend.rgb_dst_factor = gl_blend_to_sp(st->ctx->Color.BlendDstRGB);
+      if (st->ctx->Color.BlendEquationRGB == GL_MIN ||
+          st->ctx->Color.BlendEquationRGB == GL_MAX) {
+         /* Min/max are special */
+         blend.rgb_src_factor = PIPE_BLENDFACTOR_ONE;
+         blend.rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
+      }
+      else {
+         blend.rgb_src_factor = gl_blend_to_sp(st->ctx->Color.BlendSrcRGB);
+         blend.rgb_dst_factor = gl_blend_to_sp(st->ctx->Color.BlendDstRGB);
+      }
 
       blend.alpha_func = gl_blend_to_sp(st->ctx->Color.BlendEquationA);
-      blend.alpha_src_factor = gl_blend_to_sp(st->ctx->Color.BlendSrcA);
-      blend.alpha_dst_factor = gl_blend_to_sp(st->ctx->Color.BlendDstA);
+      if (st->ctx->Color.BlendEquationA == GL_MIN ||
+          st->ctx->Color.BlendEquationA == GL_MAX) {
+         /* Min/max are special */
+         blend.alpha_src_factor = PIPE_BLENDFACTOR_ONE;
+         blend.alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
+      }
+      else {
+         blend.alpha_src_factor = gl_blend_to_sp(st->ctx->Color.BlendSrcA);
+         blend.alpha_dst_factor = gl_blend_to_sp(st->ctx->Color.BlendDstA);
+      }
    }
    else {
       /* no blending / logicop */