Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wined3d/stateblock.c | 16 ++++++++++++++++ dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ 3 files changed, 19 insertions(+)
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 41c97b5020..98986c735b 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1521,6 +1521,22 @@ void CDECL wined3d_stateblock_set_transform(struct wined3d_stateblock *statebloc stateblock->changed.transform[d3dts >> 5] |= 1u << (d3dts & 0x1f); }
+HRESULT CDECL wined3d_stateblock_set_clip_plane(struct wined3d_stateblock *stateblock, + UINT plane_idx, const struct wined3d_vec4 *plane) +{ + TRACE("stateblock %p, plane_idx %u, plane %p.\n", stateblock, plane_idx, plane); + + if (plane_idx >= stateblock->device->adapter->d3d_info.limits.max_clip_distances) + { + TRACE("Application has requested clipplane this device doesn't support.\n"); + return WINED3DERR_INVALIDCALL; + } + + stateblock->stateblock_state.clip_planes[plane_idx] = *plane; + stateblock->changed.clipplane |= 1u << plane_idx; + return S_OK; +} + static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info) { union diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 297d3a0410..2b5b6c7667 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -260,6 +260,7 @@ @ cdecl wined3d_stateblock_incref(ptr) @ cdecl wined3d_stateblock_reset(ptr) @ cdecl wined3d_stateblock_set_blend_factor(ptr ptr) +@ cdecl wined3d_stateblock_set_clip_plane(ptr long ptr) @ cdecl wined3d_stateblock_set_pixel_shader(ptr ptr) @ cdecl wined3d_stateblock_set_ps_consts_b(ptr long long ptr) @ cdecl wined3d_stateblock_set_ps_consts_f(ptr long long ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 298cb3b270..cedbb09eba 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2663,6 +2663,8 @@ ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock); void __cdecl wined3d_stateblock_reset(struct wined3d_stateblock *stateblock); void __cdecl wined3d_stateblock_set_blend_factor(struct wined3d_stateblock *stateblock, const struct wined3d_color *blend_factor); +HRESULT __cdecl wined3d_stateblock_set_clip_plane(struct wined3d_stateblock *stateblock, + UINT plane_idx, const struct wined3d_vec4 *plane); void __cdecl wined3d_stateblock_set_pixel_shader(struct wined3d_stateblock *stateblock, struct wined3d_shader *shader); HRESULT __cdecl wined3d_stateblock_set_ps_consts_b(struct wined3d_stateblock *stateblock, unsigned int start_idx, unsigned int count, const BOOL *constants);