Browse Source

Fixed issue #1192.

Branimir Karadžić 8 years ago
parent
commit
94f01a34bf
2 changed files with 20 additions and 10 deletions
  1. 1 1
      examples/common/example-glue.cpp
  2. 19 9
      src/debug_renderdoc.cpp

+ 1 - 1
examples/common/example-glue.cpp

@@ -99,7 +99,7 @@ void showExampleDialog(entry::AppI* _app)
 
 		if (ImGui::Combo("Renderer", &current, items, num) )
 		{
-			restart = true;
+			cmdExec("app restart");
 		}
 	}
 #endif // 0

+ 19 - 9
src/debug_renderdoc.cpp

@@ -56,21 +56,27 @@ namespace bgfx
 	}
 
 	pRENDERDOC_GetAPI RENDERDOC_GetAPI;
-	static RENDERDOC_API_1_1_0* s_renderDoc;
+	static RENDERDOC_API_1_1_0* s_renderDoc = NULL;
+	static void* s_RenderDocDll = NULL;
 
 	void* loadRenderDoc()
 	{
+		if (NULL != s_renderDoc)
+		{
+			return s_RenderDocDll;
+		}
+
 		// Skip loading RenderDoc when IntelGPA is present to avoid RenderDoc crash.
 		if (findModule(BX_ARCH_32BIT ? "shimloader32.dll" : "shimloader64.dll") )
 		{
 			return NULL;
 		}
 
-		void* renderdocdll = bx::dlopen("renderdoc.dll");
+		void* renderDocDll = bx::dlopen("renderdoc.dll");
 
-		if (NULL != renderdocdll)
+		if (NULL != renderDocDll)
 		{
-			RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderdocdll, "RENDERDOC_GetAPI");
+			RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderDocDll, "RENDERDOC_GetAPI");
 			if (NULL != RENDERDOC_GetAPI
 			&&  1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_0, (void**)&s_renderDoc) )
 			{
@@ -88,20 +94,24 @@ namespace bgfx
 			}
 			else
 			{
-				bx::dlclose(renderdocdll);
-				renderdocdll = NULL;
+				bx::dlclose(renderDocDll);
+				renderDocDll = NULL;
 			}
 		}
 
-		return renderdocdll;
+		return renderDocDll;
 	}
 
 	void unloadRenderDoc(void* _renderdocdll)
 	{
 		if (NULL != _renderdocdll)
 		{
-			s_renderDoc->Shutdown();
-			bx::dlclose(_renderdocdll);
+			// BK - Once RenderDoc is loaded there shouldn't be calls
+			// to Shutdown or unload RenderDoc DLL.
+			// https://github.com/bkaradzic/bgfx/issues/1192
+			//
+			// s_renderDoc->Shutdown();
+			// bx::dlclose(_renderdocdll);
 		}
 	}