From abb88f456d1baa01ef82e125e3569fdc5fc0640f Mon Sep 17 00:00:00 2001
From: FunkyFr3sh <cc.red.alert.1@googlemail.com>
Date: Sun, 30 Sep 2018 03:06:45 +0200
Subject: [PATCH] direct3d auto renderer tweaks

---
 src/render_d3d9.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/render_d3d9.c b/src/render_d3d9.c
index 858e534..45121bc 100644
--- a/src/render_d3d9.c
+++ b/src/render_d3d9.c
@@ -80,7 +80,7 @@ static void InitDirect3D(BOOL reset)
         D3ddev, sizeof(vertices), 0, D3DFVF_XYZRHW | D3DFVF_TEX1, D3DPOOL_MANAGED, &D3dvb, NULL);
 
     void *data;
-    if (SUCCEEDED(D3dvb->lpVtbl->Lock(D3dvb, 0, 0, (void**)&data, 0)))
+    if (D3dvb && SUCCEEDED(D3dvb->lpVtbl->Lock(D3dvb, 0, 0, (void**)&data, 0)))
     {
         memcpy(data, vertices, sizeof(vertices));
         D3dvb->lpVtbl->Unlock(D3dvb);
@@ -113,6 +113,13 @@ DWORD WINAPI render_d3d9_main(void)
 {
     Sleep(500);
 
+    D3d = NULL;
+    D3ddev = NULL;
+    SurfaceTex = NULL;
+    PaletteTex = NULL;
+    D3dvb = NULL;
+    PixelShader = NULL;
+
     DWORD tick_start = 0;
     DWORD tick_end = 0;
     DWORD frame_len = 0;
@@ -162,7 +169,9 @@ DWORD WINAPI render_d3d9_main(void)
         }
     }
 
-    while (D3ddev && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
+    BOOL useDirect3D = D3d && D3ddev && SurfaceTex && PaletteTex && D3dvb && PixelShader;
+
+    while (useDirect3D && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
     {
 #if _DEBUG
         static DWORD tick_fps = 0;
@@ -284,14 +293,12 @@ DWORD WINAPI render_d3d9_main(void)
     if (hD3D9)
         FreeLibrary(hD3D9);
 
-    if (!D3ddev)
+    if (!useDirect3D)
     {
         ShowDriverWarning = TRUE;
         ddraw->renderer = render_soft_main;
         render_soft_main();
     }
 
-    D3ddev = NULL;
-
     return 0;
 }