diff --git a/gfx/common/d3d_common.cpp b/gfx/common/d3d_common.cpp index 1fd2e8e1ae..68933c2eb3 100644 --- a/gfx/common/d3d_common.cpp +++ b/gfx/common/d3d_common.cpp @@ -411,6 +411,42 @@ void d3d_set_sampler_magfilter(LPDIRECT3DDEVICE dev, #endif } +bool d3d_begin_scene(LPDIRECT3DDEVICE dev) +{ +#if defined(HAVE_D3D9) && !defined(__cplusplus) + if (SUCCEEDED(IDirect3DDevice9_BeginScene(dev))) +#elif defined(HAVE_D3D8) && !defined(__cplusplus) + if (SUCCEEDED(IDirect3DDevice8_BeginScene(dev))) +#else + if (SUCCEEDED(dev->BeginScene())) +#endif + return true; + return false; +} + +void d3d_end_scene(LPDIRECT3DDEVICE dev) +{ +#if defined(HAVE_D3D9) && !defined(__cplusplus) + IDirect3DDevice9_EndScene(dev); +#elif defined(HAVE_D3D8) && !defined(__cplusplus) + IDirect3DDevice8_EndScene(dev); +#else + dev->EndScene(); +#endif +} + +static void d3d_draw_primitive_internal(LPDIRECT3DDEVICE dev, + D3DPRIMITIVETYPE type, unsigned start, unsigned count) +{ +#if defined(HAVE_D3D9) && !defined(__cplusplus) + IDirect3DDevice9_DrawPrimitive(dev, type, start, count); +#elif defined(HAVE_D3D8) && !defined(__cplusplus) + IDirect3DDevice8_DrawPrimitive(dev, type, start, count); +#else + dev->DrawPrimitive(type, start, count); +#endif +} + void d3d_draw_primitive(LPDIRECT3DDEVICE dev, D3DPRIMITIVETYPE type, unsigned start, unsigned count) { @@ -418,19 +454,11 @@ void d3d_draw_primitive(LPDIRECT3DDEVICE dev, D3DDevice_DrawVertices(type, start, D3DVERTEXCOUNT(type, count)); #elif defined(_XBOX360) D3DDevice_DrawVertices(dev, type, start, D3DVERTEXCOUNT(type, count)); -#elif defined(HAVE_D3D9) && !defined(__cplusplus) - IDirect3DDevice9_BeginScene(dev); - IDirect3DDevice9_DrawPrimitive(dev, type, start, count); - IDirect3DDevice9_EndScene(dev); -#elif defined(HAVE_D3D8) && !defined(__cplusplus) - IDirect3DDevice8_BeginScene(dev); - IDirect3DDevice8_DrawPrimitive(dev, type, start, count); - IDirect3DDevice8_EndScene(dev); #else - if (SUCCEEDED(dev->BeginScene())) + if (d3d_begin_scene(dev)) { - dev->DrawPrimitive(type, start, count); - dev->EndScene(); + d3d_draw_primitive_internal(dev, type, start, count); + d3d_end_scene(dev); } #endif } diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index 81a8f16fae..e727705f87 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -63,6 +63,10 @@ void d3d_set_sampler_minfilter(LPDIRECT3DDEVICE dev, void d3d_set_sampler_magfilter(LPDIRECT3DDEVICE dev, unsigned sampler, unsigned value); +bool d3d_begin_scene(LPDIRECT3DDEVICE dev); + +void d3d_end_scene(LPDIRECT3DDEVICE dev); + void d3d_draw_primitive(LPDIRECT3DDEVICE dev, D3DPRIMITIVETYPE type, unsigned start, unsigned count); diff --git a/gfx/drivers_font/d3d_w32_font.cpp b/gfx/drivers_font/d3d_w32_font.cpp index df381dc267..a7ddb2627f 100644 --- a/gfx/drivers_font/d3d_w32_font.cpp +++ b/gfx/drivers_font/d3d_w32_font.cpp @@ -105,7 +105,7 @@ static void d3dfonts_w32_render_msg(video_frame_info_t *video_info, void *data, if (!msg) return; d3d_set_viewports(d3dfonts->d3d->dev, &d3dfonts->d3d->final_viewport); - if (!(SUCCEEDED(d3dfonts->d3d->dev->BeginScene()))) + if (!d3d_begin_scene(d3dfonts->d3d->dev)) return; d3dfonts->font->DrawTextA(NULL, @@ -122,7 +122,7 @@ static void d3dfonts_w32_render_msg(video_frame_info_t *video_info, void *data, DT_LEFT, d3dfonts->color | 0xff000000); - d3dfonts->d3d->dev->EndScene(); + d3d_end_scene(d3dfonts->d3d->dev); } font_renderer_t d3d_win32_font = {