diff --git a/gfx/common/d3d_common.cpp b/gfx/common/d3d_common.cpp index 642224e950..4ae2c3b94d 100644 --- a/gfx/common/d3d_common.cpp +++ b/gfx/common/d3d_common.cpp @@ -391,6 +391,21 @@ void d3d_clear(LPDIRECT3DDEVICE dev, #endif } +bool d3d_device_get_render_target_data(LPDIRECT3DDEVICE dev, + void *_src, void *_dst) +{ + LPDIRECT3DSURFACE src = (LPDIRECT3DSURFACE)_src; + LPDIRECT3DSURFACE dst = (LPDIRECT3DSURFACE)_dst; +#if defined(HAVE_D3D9) && !defined(__cplusplus) + if (SUCCEEDED(IDirect3DDevice9_GetRenderTargetData(dev, src, dst))) + return true; +#else + if (SUCCEEDED(dev->GetRenderTargetData(src, dst))) + return true; +#endif + return false; +} + bool d3d_device_get_render_target(LPDIRECT3DDEVICE dev, unsigned idx, void **data) { diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index 18abb577e8..5bd43c00d7 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -110,6 +110,9 @@ void d3d_frame_postprocess(void *data); void d3d_surface_free(void *data); +bool d3d_device_get_render_target_data(LPDIRECT3DDEVICE dev, + void *_src, void *_dst); + bool d3d_device_get_render_target(LPDIRECT3DDEVICE dev, unsigned idx, void **data); diff --git a/gfx/drivers_renderchain/d3d9_cg_renderchain.cpp b/gfx/drivers_renderchain/d3d9_cg_renderchain.cpp index 60c7098147..dba544dae7 100644 --- a/gfx/drivers_renderchain/d3d9_cg_renderchain.cpp +++ b/gfx/drivers_renderchain/d3d9_cg_renderchain.cpp @@ -1564,7 +1564,7 @@ static bool d3d9_cg_renderchain_read_viewport( goto end; } - if (FAILED(d3d->d3d_err = d3dr->GetRenderTargetData(target, dest))) + if (!d3d_device_get_render_target_data(d3dr, (void*)target, (void*)dest)) { ret = false; goto end;