Create d3d_device_get_render_target

This commit is contained in:
twinaphex 2017-10-01 22:38:30 +02:00
parent 563024502f
commit 30af756969
3 changed files with 23 additions and 2 deletions

View File

@ -391,6 +391,24 @@ void d3d_clear(LPDIRECT3DDEVICE dev,
#endif
}
bool d3d_device_get_render_target(LPDIRECT3DDEVICE dev,
unsigned idx, void **data)
{
#if defined(HAVE_D3D9) && !defined(__cplusplus)
if (FAILED(IDirect3DDevice9_GetRenderTarget(dev, idx,
(LPDIRECT3DSURFACE*)data)))
#elif defined(HAVE_D3D8) && !defined(__cplusplus)
if (FAILED(IDirect3DDevice8_GetRenderTarget(dev,
(LPDIRECT3DSURFACE*)data)))
#else
if (FAILED(dev->GetRenderTarget(idx,
(LPDIRECT3DSURFACE*)data)))
#endif
return false;
return true;
}
bool d3d_lock_rectangle(LPDIRECT3DTEXTURE tex,
unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect,
unsigned rectangle_height, unsigned flags)

View File

@ -110,6 +110,9 @@ void d3d_frame_postprocess(void *data);
void d3d_surface_free(void *data);
bool d3d_device_get_render_target(LPDIRECT3DDEVICE dev,
unsigned idx, void **data);
void d3d_set_render_state(void *data, D3DRENDERSTATETYPE state, DWORD value);
bool d3d_reset(LPDIRECT3DDEVICE dev, D3DPRESENT_PARAMETERS *d3dpp);

View File

@ -1414,7 +1414,7 @@ static bool d3d9_cg_renderchain_render(
frame_data, width, height, pitch);
/* Grab back buffer. */
d3dr->GetRenderTarget(0, &back_buffer);
d3d_device_get_render_target(d3dr, 0, (void**)&back_buffer);
/* In-between render target passes. */
for (i = 0; i < chain->passes.size() - 1; i++)
@ -1549,7 +1549,7 @@ static bool d3d9_cg_renderchain_read_viewport(
(void)data;
(void)buffer;
if (FAILED(d3d->d3d_err = d3dr->GetRenderTarget(0, &target)))
if (!d3d_device_get_render_target(d3dr, 0, (void**)&target))
{
ret = false;
goto end;