Module: wine Branch: master Commit: 28bd66dabb1c01545919d614b4e2bd536e34ab08 URL: http://source.winehq.org/git/wine.git/?a=commit;h=28bd66dabb1c01545919d614b4...
Author: Matteo Bruni mbruni@codeweavers.com Date: Sun Apr 9 21:03:37 2017 +0200
wined3d: Split line antialiasing to a separate state handler.
Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/state.c | 58 ++++++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 34 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index e138936..2c47ce6 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -448,22 +448,9 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st { const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_format *rt_format; - BOOL enable_blend, enable_line_smooth; GLenum src_blend, dst_blend; unsigned int rt_fmt_flags; - - enable_line_smooth = state->render_states[WINED3D_RS_EDGEANTIALIAS] - || state->render_states[WINED3D_RS_ANTIALIASEDLINEENABLE]; - if (enable_line_smooth) - { - gl_info->gl_ops.gl.p_glEnable(GL_LINE_SMOOTH); - checkGLcall("glEnable(GL_LINE_SMOOTH)"); - } - else - { - gl_info->gl_ops.gl.p_glDisable(GL_LINE_SMOOTH); - checkGLcall("glDisable(GL_LINE_SMOOTH)"); - } + BOOL enable_blend;
enable_blend = state->fb->render_targets[0] && state->render_states[WINED3D_RS_ALPHABLENDENABLE]; if (enable_blend) @@ -478,34 +465,20 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st enable_blend = FALSE; }
- if (enable_blend) - { - gl_info->gl_ops.gl.p_glEnable(GL_BLEND); - checkGLcall("glEnable(GL_BLEND)"); - } - else + if (!enable_blend) { gl_info->gl_ops.gl.p_glDisable(GL_BLEND); checkGLcall("glDisable(GL_BLEND)"); - if (enable_line_smooth) - WARN("LINE/EDGEANTIALIAS enabled with disabled blending.\n"); return; }
+ gl_info->gl_ops.gl.p_glEnable(GL_BLEND); + checkGLcall("glEnable(GL_BLEND)"); + gl_blend_from_d3d(&src_blend, &dst_blend, state->render_states[WINED3D_RS_SRCBLEND], state->render_states[WINED3D_RS_DESTBLEND], rt_format);
- /* According to the red book, GL_LINE_SMOOTH needs GL_BLEND with specific - * blending parameters to work. */ - if (enable_line_smooth) - { - if (src_blend != GL_SRC_ALPHA) - WARN("LINE/EDGEANTIALIAS enabled, but unexpected src blending param.\n"); - if (dst_blend != GL_ONE_MINUS_SRC_ALPHA && dst_blend != GL_ONE) - WARN("LINE/EDGEANTIALIAS enabled, but unexpected dst blending param.\n"); - } - /* Re-apply BLENDOP(ALPHA) because of a possible SEPARATEALPHABLENDENABLE change */ if (!isStateDirty(context, STATE_RENDER(WINED3D_RS_BLENDOP))) state_blendop(context, state, STATE_RENDER(WINED3D_RS_BLENDOPALPHA)); @@ -1667,6 +1640,23 @@ static void state_msaa(struct wined3d_context *context, const struct wined3d_sta } }
+static void state_line_antialias(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + + 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)"); + } + else + { + gl_info->gl_ops.gl.p_glDisable(GL_LINE_SMOOTH); + checkGLcall("glDisable(GL_LINE_SMOOTH)"); + } +} + static void state_scissor(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -5031,8 +5021,8 @@ const struct StateEntryTemplate misc_state_template[] = { STATE_RENDER(WINED3D_RS_SRCBLEND), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_DESTBLEND), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), state_blend }, WINED3D_GL_EXT_NONE }, - { STATE_RENDER(WINED3D_RS_EDGEANTIALIAS), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, - { STATE_RENDER(WINED3D_RS_ANTIALIASEDLINEENABLE), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, + { STATE_RENDER(WINED3D_RS_EDGEANTIALIAS), { STATE_RENDER(WINED3D_RS_EDGEANTIALIAS), state_line_antialias}, WINED3D_GL_EXT_NONE }, + { STATE_RENDER(WINED3D_RS_ANTIALIASEDLINEENABLE), { STATE_RENDER(WINED3D_RS_ANTIALIASEDLINEENABLE), state_line_antialias}, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_SEPARATEALPHABLENDENABLE), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_SRCBLENDALPHA), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_DESTBLENDALPHA), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE },