void opengl_state::SetAlphaBlendMode(gr_alpha_blend ab) { switch (ab) { case ALPHA_BLEND_ALPHA_BLEND_ALPHA: GL_state.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; case ALPHA_BLEND_NONE: GL_state.BlendFunc(GL_ONE, GL_ZERO); break; case ALPHA_BLEND_ADDITIVE: GL_state.BlendFunc(GL_ONE, GL_ONE); break; case ALPHA_BLEND_ALPHA_ADDITIVE: GL_state.BlendFunc(GL_SRC_ALPHA, GL_ONE); break; case ALPHA_BLEND_ALPHA_BLEND_SRC_COLOR: GL_state.BlendFunc(/*GL_SRC_COLOR*/GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR); break; case ALPHA_BLEND_PREMULTIPLIED: GL_state.BlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); break; default: break; } GL_state.Blend( (ab == ALPHA_BLEND_NONE) ? GL_FALSE : GL_TRUE ); }
void opengl_state::SetAlphaBlendMode(gr_alpha_blend ab) { if (ab == Current_alpha_blend_mode) { return; } switch (ab) { case ALPHA_BLEND_ALPHA_BLEND_ALPHA: GL_state.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; case ALPHA_BLEND_NONE: GL_state.BlendFunc(GL_ONE, GL_ZERO); break; case ALPHA_BLEND_ADDITIVE: GL_state.BlendFunc(GL_ONE, GL_ONE); break; case ALPHA_BLEND_ALPHA_ADDITIVE: GL_state.BlendFunc(GL_SRC_ALPHA, GL_ONE); break; case ALPHA_BLEND_ALPHA_BLEND_SRC_COLOR: GL_state.BlendFunc(/*GL_SRC_COLOR*/GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR); break; default: break; } GL_state.Blend( (ab == ALPHA_BLEND_NONE) ? GL_FALSE : GL_TRUE ); Current_alpha_blend_mode = ab; }