From 847bd8d98375ad9917edae89f0c840bfab7c4d91 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 2 Sep 2019 00:11:58 -0400 Subject: [PATCH] direct3d: Be more aggressive about resetting state when textures go away. Fixes Bugzilla #4768. --- src/render/direct3d/SDL_render_d3d.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/render/direct3d/SDL_render_d3d.c b/src/render/direct3d/SDL_render_d3d.c index 9fb009f7c..63df321b2 100644 --- a/src/render/direct3d/SDL_render_d3d.c +++ b/src/render/direct3d/SDL_render_d3d.c @@ -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); @@ -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 @@ -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) {