diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 094fab69e2..ef64aaf97b 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -939,6 +939,45 @@ bool d3d_reset(LPDIRECT3DDEVICE dev, D3DPRESENT_PARAMETERS *d3dpp) return false; } +bool d3d_device_get_backbuffer(LPDIRECT3DDEVICE dev, + unsigned idx, unsigned swapchain_idx, + unsigned backbuffer_type, void **data) +{ + if (!dev) + return false; + +#if defined(HAVE_D3D9) && !defined(__cplusplus) +#ifdef __cplusplus + if (SUCCEEDED(dev->GetBackBuffer( + swapchain_idx, idx, + (D3DBACKBUFFER_TYPE)backbuffer_type, + (LPDIRECT3DSURFACE*)data))) + return true; +#else + if (SUCCEEDED(IDirect3DDevice9_GetBackBuffer(dev, + swapchain_idx, idx, + (D3DBACKBUFFER_TYPE)backbuffer_type, + (LPDIRECT3DSURFACE*)data))) + return true; +#endif +#elif defined(HAVE_D3D8) +#ifdef __cplusplus + if (SUCCEEDED(dev->GetBackBuffer(idx, + (D3DBACKBUFFER_TYPE)backbuffer_type, + (LPDIRECT3DSURFACE*)data))) + return true; +#else + if (SUCCEEDED(IDirect3DDevice8_GetBackBuffer(dev, idx, + (D3DBACKBUFFER_TYPE)backbuffer_type, + (LPDIRECT3DSURFACE*)data))) + return true; +#endif +#endif + + return false; +} + + void d3d_device_free(LPDIRECT3DDEVICE dev, LPDIRECT3D pd3d) { if (dev) diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index fa88fb2e55..87fa7c03ed 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -167,6 +167,10 @@ bool d3d_create_device(LPDIRECT3DDEVICE *dev, bool d3d_reset(LPDIRECT3DDEVICE dev, D3DPRESENT_PARAMETERS *d3dpp); +bool d3d_device_get_backbuffer(LPDIRECT3DDEVICE dev, + unsigned idx, unsigned swapchain_idx, + unsigned backbuffer_type, void **data); + void d3d_device_free(LPDIRECT3DDEVICE dev, LPDIRECT3D pd3d); D3DTEXTUREFILTERTYPE d3d_translate_filter(unsigned type);