Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
direct3d: Be more aggressive about resetting state when textures go a…
…way.

Fixes Bugzilla #4768.
  • Loading branch information
icculus committed Sep 2, 2019
1 parent a3804ba commit 847bd8d
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion src/render/direct3d/SDL_render_d3d.c
Expand Up @@ -234,6 +234,10 @@ D3D_InitRenderState(D3D_RenderData *data)
D3DMATRIX matrix;

IDirect3DDevice9 *device = data->device;
IDirect3DDevice9_SetPixelShader(device, NULL);
IDirect3DDevice9_SetTexture(device, 0, NULL);
IDirect3DDevice9_SetTexture(device, 1, NULL);
IDirect3DDevice9_SetTexture(device, 2, NULL);
IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
IDirect3DDevice9_SetVertexShader(device, NULL);
IDirect3DDevice9_SetRenderState(device, D3DRS_ZENABLE, D3DZB_FALSE);
Expand Down Expand Up @@ -708,8 +712,14 @@ D3D_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture)
texturedata->texture.dirty = SDL_TRUE;
if (data->drawstate.texture == texture) {
data->drawstate.texture = NULL;
IDirect3DDevice9_SetPixelShader(data->device, NULL);
IDirect3DDevice9_SetTexture(data->device, 0, NULL);
if (texturedata->yuv) {
IDirect3DDevice9_SetTexture(data->device, 1, NULL);
IDirect3DDevice9_SetTexture(data->device, 2, NULL);
}
}
}
}
}

static int
Expand Down Expand Up @@ -1513,6 +1523,12 @@ D3D_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)

if (renderdata->drawstate.texture == texture) {
renderdata->drawstate.texture = NULL;
IDirect3DDevice9_SetPixelShader(renderdata->device, NULL);
IDirect3DDevice9_SetTexture(renderdata->device, 0, NULL);
if (data->yuv) {
IDirect3DDevice9_SetTexture(renderdata->device, 1, NULL);
IDirect3DDevice9_SetTexture(renderdata->device, 2, NULL);
}
}

if (!data) {
Expand Down

0 comments on commit 847bd8d

Please sign in to comment.