diff --git a/examples/common/example-glue.cpp b/examples/common/example-glue.cpp index 948085324..88cf75d37 100644 --- a/examples/common/example-glue.cpp +++ b/examples/common/example-glue.cpp @@ -99,7 +99,7 @@ void showExampleDialog(entry::AppI* _app) if (ImGui::Combo("Renderer", ¤t, items, num) ) { - restart = true; + cmdExec("app restart"); } } #endif // 0 diff --git a/src/debug_renderdoc.cpp b/src/debug_renderdoc.cpp index d444cc0f4..0b36f7b84 100644 --- a/src/debug_renderdoc.cpp +++ b/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); } }