Module: wine Branch: master Commit: db5211d36fd4a8807ece523deb666e6bd2a0c2b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=db5211d36fd4a8807ece523deb...
Author: Józef Kucia jkucia@codeweavers.com Date: Mon Aug 8 16:52:28 2016 +0200
wined3d: Introduce gl_blend_from_d3d() helper function.
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/state.c | 83 +++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 46 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 54ce2ee..630a745 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -412,12 +412,35 @@ static GLenum gl_blend_factor(enum wined3d_blend factor, const struct wined3d_fo } }
+static void gl_blend_from_d3d(GLenum *src_blend, GLenum *dst_blend, + enum wined3d_blend d3d_src_blend, enum wined3d_blend d3d_dst_blend, + const struct wined3d_format *rt_format) +{ + /* WINED3D_BLEND_BOTHSRCALPHA and WINED3D_BLEND_BOTHINVSRCALPHA are legacy + * source blending values which are still valid up to d3d9. They should + * not occur as dest blend values. */ + if (d3d_src_blend == WINED3D_BLEND_BOTHSRCALPHA) + { + *src_blend = GL_SRC_ALPHA; + *dst_blend = GL_ONE_MINUS_SRC_ALPHA; + } + else if (d3d_src_blend == WINED3D_BLEND_BOTHINVSRCALPHA) + { + *src_blend = GL_ONE_MINUS_SRC_ALPHA; + *dst_blend = GL_SRC_ALPHA; + } + else + { + *src_blend = gl_blend_factor(d3d_src_blend, rt_format); + *dst_blend = gl_blend_factor(d3d_dst_blend, rt_format); + } +} + static void state_blend(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_format *rt_format; - enum wined3d_blend d3d_blend; - GLenum srcBlend, dstBlend; + GLenum src_blend, dst_blend; unsigned int rt_fmt_flags;
if (!state->fb->render_targets[0]) @@ -458,34 +481,18 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st return; };
- /* WINED3D_BLEND_BOTHSRCALPHA and WINED3D_BLEND_BOTHINVSRCALPHA are legacy - * source blending values which are still valid up to d3d9. They should - * not occur as dest blend values. */ - d3d_blend = state->render_states[WINED3D_RS_SRCBLEND]; - if (d3d_blend == WINED3D_BLEND_BOTHSRCALPHA) - { - srcBlend = GL_SRC_ALPHA; - dstBlend = GL_ONE_MINUS_SRC_ALPHA; - } - else if (d3d_blend == WINED3D_BLEND_BOTHINVSRCALPHA) - { - srcBlend = GL_ONE_MINUS_SRC_ALPHA; - dstBlend = GL_SRC_ALPHA; - } - else - { - srcBlend = gl_blend_factor(d3d_blend, rt_format); - dstBlend = gl_blend_factor(state->render_states[WINED3D_RS_DESTBLEND], rt_format); - } + gl_blend_from_d3d(&src_blend, &dst_blend, + state->render_states[WINED3D_RS_SRCBLEND], + state->render_states[WINED3D_RS_DESTBLEND], rt_format);
if (state->render_states[WINED3D_RS_EDGEANTIALIAS] || state->render_states[WINED3D_RS_ANTIALIASEDLINEENABLE]) { gl_info->gl_ops.gl.p_glEnable(GL_LINE_SMOOTH); checkGLcall("glEnable(GL_LINE_SMOOTH)"); - if (srcBlend != GL_SRC_ALPHA) + if (src_blend != GL_SRC_ALPHA) WARN("WINED3D_RS_EDGEANTIALIAS enabled, but unexpected src blending param.\n"); - if (dstBlend != GL_ONE_MINUS_SRC_ALPHA && dstBlend != GL_ONE) + if (dst_blend != GL_ONE_MINUS_SRC_ALPHA && dst_blend != GL_ONE) WARN("WINED3D_RS_EDGEANTIALIAS enabled, but unexpected dst blending param.\n"); } else @@ -500,7 +507,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
if (state->render_states[WINED3D_RS_SEPARATEALPHABLENDENABLE]) { - GLenum srcBlendAlpha, dstBlendAlpha; + GLenum src_blend_alpha, dst_blend_alpha;
/* Separate alpha blending requires GL_EXT_blend_function_separate, so make sure it is around */ if (!context->gl_info->supported[EXT_BLEND_FUNC_SEPARATE]) @@ -509,33 +516,17 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st return; }
- /* WINED3D_BLEND_BOTHSRCALPHA and WINED3D_BLEND_BOTHINVSRCALPHA are legacy - * source blending values which are still valid up to d3d9. They should - * not occur as dest blend values. */ - d3d_blend = state->render_states[WINED3D_RS_SRCBLENDALPHA]; - if (d3d_blend == WINED3D_BLEND_BOTHSRCALPHA) - { - srcBlendAlpha = GL_SRC_ALPHA; - dstBlendAlpha = GL_ONE_MINUS_SRC_ALPHA; - } - else if (d3d_blend == WINED3D_BLEND_BOTHINVSRCALPHA) - { - srcBlendAlpha = GL_ONE_MINUS_SRC_ALPHA; - dstBlendAlpha = GL_SRC_ALPHA; - } - else - { - srcBlendAlpha = gl_blend_factor(d3d_blend, rt_format); - dstBlendAlpha = gl_blend_factor(state->render_states[WINED3D_RS_DESTBLENDALPHA], rt_format); - } + gl_blend_from_d3d(&src_blend_alpha, &dst_blend_alpha, + state->render_states[WINED3D_RS_SRCBLENDALPHA], + state->render_states[WINED3D_RS_DESTBLENDALPHA], rt_format);
- GL_EXTCALL(glBlendFuncSeparate(srcBlend, dstBlend, srcBlendAlpha, dstBlendAlpha)); + GL_EXTCALL(glBlendFuncSeparate(src_blend, dst_blend, src_blend_alpha, dst_blend_alpha)); checkGLcall("glBlendFuncSeparate"); } else { - TRACE("glBlendFunc src=%x, dst=%x\n", srcBlend, dstBlend); - gl_info->gl_ops.gl.p_glBlendFunc(srcBlend, dstBlend); + TRACE("glBlendFunc src=%x, dst=%x.\n", src_blend, dst_blend); + gl_info->gl_ops.gl.p_glBlendFunc(src_blend, dst_blend); checkGLcall("glBlendFunc"); }