Fixed bug 1722 - An attempt to release NULL Direct3d surface
Evgeny static void D3D_DestroyRenderer(SDL_Renderer * renderer) has a critical problem. It may try to release IDirect3DSurface9 surface pointed by NULL pointer. That leads to really wierd consequences on my system. It happens when the previous call to IDirect3D9_CreateDevice() fails leaving D3D_RenderData::defaultRenderTarget uninitialized.
This commit is contained in:
parent
8cd8501f09
commit
1a4596d798
1 changed files with 8 additions and 2 deletions
|
@ -362,7 +362,10 @@ D3D_Reset(SDL_Renderer * renderer)
|
||||||
HRESULT result;
|
HRESULT result;
|
||||||
|
|
||||||
/* Release the default render target before reset */
|
/* Release the default render target before reset */
|
||||||
IDirect3DSurface9_Release(data->defaultRenderTarget);
|
if (data->defaultRenderTarget) {
|
||||||
|
IDirect3DSurface9_Release(data->defaultRenderTarget);
|
||||||
|
data->defaultRenderTarget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
result = IDirect3DDevice9_Reset(data->device, &data->pparams);
|
result = IDirect3DDevice9_Reset(data->device, &data->pparams);
|
||||||
if (FAILED(result)) {
|
if (FAILED(result)) {
|
||||||
|
@ -1486,7 +1489,10 @@ D3D_DestroyRenderer(SDL_Renderer * renderer)
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
// Release the render target
|
// Release the render target
|
||||||
IDirect3DSurface9_Release(data->defaultRenderTarget);
|
if (data->defaultRenderTarget) {
|
||||||
|
IDirect3DSurface9_Release(data->defaultRenderTarget);
|
||||||
|
data->defaultRenderTarget = NULL;
|
||||||
|
}
|
||||||
if (data->currentRenderTarget != NULL) {
|
if (data->currentRenderTarget != NULL) {
|
||||||
IDirect3DSurface9_Release(data->currentRenderTarget);
|
IDirect3DSurface9_Release(data->currentRenderTarget);
|
||||||
data->currentRenderTarget = NULL;
|
data->currentRenderTarget = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue