diff --git a/gfx/common/d3d9_common.h b/gfx/common/d3d9_common.h index 0707e688a3..d99201132e 100644 --- a/gfx/common/d3d9_common.h +++ b/gfx/common/d3d9_common.h @@ -457,6 +457,12 @@ static INLINE void d3d9_set_viewports(LPDIRECT3DDEVICE9 dev, IDirect3DDevice9_SetViewport(dev, (D3DVIEWPORT9*)vp); } +static INLINE void d3d9_set_scissor_rect( + LPDIRECT3DDEVICE9 dev, RECT *rect) +{ + IDirect3DDevice9_SetScissorRect(dev, rect); +} + static INLINE void d3d9_set_render_state( LPDIRECT3DDEVICE9 dev, D3DRENDERSTATETYPE state, DWORD value) { diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 2d5af2a9d1..891937c482 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -1033,6 +1033,7 @@ static bool d3d9_initialize(d3d9_video_t *d3d, const video_info_t *info) d3d_matrix_transpose(&d3d->mvp, &d3d->mvp_transposed); d3d9_set_render_state(d3d->dev, D3DRS_CULLMODE, D3DCULL_NONE); + d3d9_set_render_state(d3d->dev, D3DRS_SCISSORTESTENABLE, TRUE); return true; } diff --git a/menu/drivers_display/menu_display_d3d9.c b/menu/drivers_display/menu_display_d3d9.c index 37faaa120a..fa7b2a2a01 100644 --- a/menu/drivers_display/menu_display_d3d9.c +++ b/menu/drivers_display/menu_display_d3d9.c @@ -309,6 +309,40 @@ static bool menu_display_d3d9_font_init_first( return true; } +void menu_display_d3d9_scissor_begin(video_frame_info_t *video_info, int x, int y, unsigned width, unsigned height) +{ + RECT rect = {0}; + d3d9_video_t *d3d9 = video_info ? + (d3d9_video_t*)video_info->userdata : NULL; + + rect.left = x; + rect.top = y; + rect.right = width + x; + rect.bottom = height + y; + + if (!d3d9 || !width || !height) + return; + + d3d9_set_scissor_rect(d3d9->dev, &rect); +} + +void menu_display_d3d9_scissor_end(video_frame_info_t *video_info) +{ + RECT rect = {0}; + d3d9_video_t *d3d9 = video_info ? + (d3d9_video_t*)video_info->userdata : NULL; + + if (!d3d9) + return; + + rect.left = d3d9->vp.x; + rect.top = d3d9->vp.y; + rect.right = d3d9->vp.width; + rect.bottom = d3d9->vp.height; + + d3d9_set_scissor_rect(d3d9->dev, &rect); +} + menu_display_ctx_driver_t menu_display_ctx_d3d9 = { menu_display_d3d9_draw, menu_display_d3d9_draw_pipeline, @@ -324,6 +358,6 @@ menu_display_ctx_driver_t menu_display_ctx_d3d9 = { MENU_VIDEO_DRIVER_DIRECT3D9, "d3d9", false, - NULL, - NULL + menu_display_d3d9_scissor_begin, + menu_display_d3d9_scissor_end };