Browse Source

Blend MIN/MAX modes are special: the src/dest terms are always one.

tags/mesa_20090313
Brian 18 years ago
parent
commit
111880798a
1 changed files with 20 additions and 4 deletions
  1. 20
    4
      src/mesa/state_tracker/st_atom_blend.c

+ 20
- 4
src/mesa/state_tracker/st_atom_blend.c View 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 */

Loading…
Cancel
Save