Skip to content

Commit

Permalink
Call AddRef() on the device so it doesn't accidentally get released f…
Browse files Browse the repository at this point in the history
…rom underneath the caller.
  • Loading branch information
slouken committed Sep 28, 2013
1 parent 25f607a commit 202528a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
4 changes: 3 additions & 1 deletion include/SDL_system.h
Expand Up @@ -49,7 +49,9 @@ extern "C" {
*/
extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex );

/* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. */
/* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer.
Once you are done using the device, you should release it to avoid a resource leak.
*/
typedef struct IDirect3DDevice9 IDirect3DDevice9;
extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer);

Expand Down
8 changes: 7 additions & 1 deletion src/render/direct3d/SDL_render_d3d.c
Expand Up @@ -1887,13 +1887,19 @@ IDirect3DDevice9 *
SDL_RenderGetD3D9Device(SDL_Renderer * renderer)
{
D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
IDirect3DDevice9 *device;

// Make sure that this is a D3D renderer
if (renderer->DestroyRenderer != D3D_DestroyRenderer) {
SDL_SetError("Renderer is not a D3D renderer");
return NULL;
}
return data->device;

device = data->device;
if (device) {
IDirect3DDevice9_AddRef( device );
}
return device;
}

#endif /* SDL_VIDEO_RENDER_D3D && !SDL_RENDER_DISABLED */
Expand Down

0 comments on commit 202528a

Please sign in to comment.