d3d9: implement scissor test
This commit is contained in:
parent
1546ba05d4
commit
8b6676e17f
|
@ -457,6 +457,12 @@ static INLINE void d3d9_set_viewports(LPDIRECT3DDEVICE9 dev,
|
||||||
IDirect3DDevice9_SetViewport(dev, (D3DVIEWPORT9*)vp);
|
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(
|
static INLINE void d3d9_set_render_state(
|
||||||
LPDIRECT3DDEVICE9 dev, D3DRENDERSTATETYPE state, DWORD value)
|
LPDIRECT3DDEVICE9 dev, D3DRENDERSTATETYPE state, DWORD value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
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_CULLMODE, D3DCULL_NONE);
|
||||||
|
d3d9_set_render_state(d3d->dev, D3DRS_SCISSORTESTENABLE, TRUE);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -309,6 +309,40 @@ static bool menu_display_d3d9_font_init_first(
|
||||||
return true;
|
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_ctx_driver_t menu_display_ctx_d3d9 = {
|
||||||
menu_display_d3d9_draw,
|
menu_display_d3d9_draw,
|
||||||
menu_display_d3d9_draw_pipeline,
|
menu_display_d3d9_draw_pipeline,
|
||||||
|
@ -324,6 +358,6 @@ menu_display_ctx_driver_t menu_display_ctx_d3d9 = {
|
||||||
MENU_VIDEO_DRIVER_DIRECT3D9,
|
MENU_VIDEO_DRIVER_DIRECT3D9,
|
||||||
"d3d9",
|
"d3d9",
|
||||||
false,
|
false,
|
||||||
NULL,
|
menu_display_d3d9_scissor_begin,
|
||||||
NULL
|
menu_display_d3d9_scissor_end
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue