Matteo Bruni : wined3d: Split line antialiasing to a separate state handler.
Alexandre Julliard
julliard at winehq.org
Mon Apr 10 15:37:17 CDT 2017
Module: wine
Branch: master
Commit: 28bd66dabb1c01545919d614b4e2bd536e34ab08
URL: http://source.winehq.org/git/wine.git/?a=commit;h=28bd66dabb1c01545919d614b4e2bd536e34ab08
Author: Matteo Bruni <mbruni at 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 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 | 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 },
More information about the wine-cvs
mailing list