=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Introduce gl_blend_from_d3d() helper function.

Alexandre Julliard julliard at winehq.org
Tue Aug 9 11:11:05 CDT 2016


Module: wine
Branch: master
Commit: db5211d36fd4a8807ece523deb666e6bd2a0c2b0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=db5211d36fd4a8807ece523deb666e6bd2a0c2b0

Author: Józef Kucia <jkucia at 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 at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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");
     }
 




More information about the wine-cvs mailing list