Matteo Bruni : wined3d: Cleanup state_clipping() a bit.
Alexandre Julliard
julliard at winehq.org
Thu Jun 2 10:50:00 CDT 2016
Module: wine
Branch: master
Commit: 1755be42f56197bad20a32b1b09e1ae2f5ae3955
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1755be42f56197bad20a32b1b09e1ae2f5ae3955
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Wed Jun 1 23:16:55 2016 +0200
wined3d: Cleanup state_clipping() a bit.
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 | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index adb0cde..bc55263 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -574,8 +574,8 @@ void state_alpha_test(struct wined3d_context *context, const struct wined3d_stat
void state_clipping(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
{
const struct wined3d_gl_info *gl_info = context->gl_info;
- DWORD enable = 0xffffffff;
- DWORD disable = 0x00000000;
+ unsigned int clipplane_count = gl_info->limits.clipplanes;
+ unsigned int i, enable_mask, disable_mask;
if (use_vs(state) && !context->d3d_info->vs_clipping)
{
@@ -607,29 +607,29 @@ void state_clipping(struct wined3d_context *context, const struct wined3d_state
*/
if (state->render_states[WINED3D_RS_CLIPPING])
{
- enable = state->render_states[WINED3D_RS_CLIPPLANEENABLE];
- disable = ~state->render_states[WINED3D_RS_CLIPPLANEENABLE];
+ enable_mask = state->render_states[WINED3D_RS_CLIPPLANEENABLE];
+ disable_mask = ~state->render_states[WINED3D_RS_CLIPPLANEENABLE];
}
else
{
- disable = 0xffffffff;
- enable = 0x00;
+ enable_mask = 0;
+ disable_mask = ~0u;
}
- if (enable & WINED3DCLIPPLANE0) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE0);
- if (enable & WINED3DCLIPPLANE1) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE1);
- if (enable & WINED3DCLIPPLANE2) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE2);
- if (enable & WINED3DCLIPPLANE3) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE3);
- if (enable & WINED3DCLIPPLANE4) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE4);
- if (enable & WINED3DCLIPPLANE5) gl_info->gl_ops.gl.p_glEnable(GL_CLIP_PLANE5);
+ if (clipplane_count < 32)
+ {
+ enable_mask &= (1u << clipplane_count) - 1;
+ disable_mask &= (1u << clipplane_count) - 1;
+ }
+
+ for (i = 0; enable_mask && i < clipplane_count; enable_mask >>= 1, ++i)
+ if (enable_mask & 1)
+ gl_info->gl_ops.gl.p_glEnable(GL_CLIP_DISTANCE0 + i);
checkGLcall("clip plane enable");
- if (disable & WINED3DCLIPPLANE0) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE0);
- if (disable & WINED3DCLIPPLANE1) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE1);
- if (disable & WINED3DCLIPPLANE2) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE2);
- if (disable & WINED3DCLIPPLANE3) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE3);
- if (disable & WINED3DCLIPPLANE4) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE4);
- if (disable & WINED3DCLIPPLANE5) gl_info->gl_ops.gl.p_glDisable(GL_CLIP_PLANE5);
+ for (i = 0; disable_mask && i < clipplane_count; disable_mask >>= 1, ++i)
+ if (disable_mask & 1)
+ gl_info->gl_ops.gl.p_glDisable(GL_CLIP_DISTANCE0 + i);
checkGLcall("clip plane disable");
}
More information about the wine-cvs
mailing list