diff options
| author | Silent <zdanio95@gmail.com> | 2019-11-10 22:33:33 +0100 |
|---|---|---|
| committer | Silent <zdanio95@gmail.com> | 2022-06-10 17:19:59 +0200 |
| commit | 7faf5ea170f23de3b4a7b9362926490c5b7a97bc (patch) | |
| tree | c31ef30060302430c71ad5a6a6d7a4c955927712 /Source/Core/VideoCommon/ShaderCache.cpp | |
| parent | dcad3ec892f02a703eb732c5679125291e7f0033 (diff) | |
Clear the UI after async shader compilation
Diffstat (limited to 'Source/Core/VideoCommon/ShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/ShaderCache.cpp | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp index b5d848238a..35ce392be2 100644 --- a/Source/Core/VideoCommon/ShaderCache.cpp +++ b/Source/Core/VideoCommon/ShaderCache.cpp @@ -159,35 +159,42 @@ void ShaderCache::WaitForAsyncCompiler() { bool running = true; + constexpr auto update_ui_progress = [](size_t completed, size_t total) { + g_renderer->BeginUIFrame(); + + const float center_x = ImGui::GetIO().DisplaySize.x * 0.5f; + const float center_y = ImGui::GetIO().DisplaySize.y * 0.5f; + const float scale = ImGui::GetIO().DisplayFramebufferScale.x; + + ImGui::SetNextWindowSize(ImVec2(400.0f * scale, 50.0f * scale), ImGuiCond_Always); + ImGui::SetNextWindowPos(ImVec2(center_x, center_y), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); + if (ImGui::Begin(Common::GetStringT("Compiling Shaders").c_str(), nullptr, + ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs | + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav | + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) + { + ImGui::Text("Compiling shaders: %zu/%zu", completed, total); + ImGui::ProgressBar(static_cast<float>(completed) / + static_cast<float>(std::max(total, static_cast<size_t>(1))), + ImVec2(-1.0f, 0.0f), ""); + } + ImGui::End(); + + g_renderer->EndUIFrame(); + }; + while (running && (m_async_shader_compiler->HasPendingWork() || m_async_shader_compiler->HasCompletedWork())) { - running = m_async_shader_compiler->WaitUntilCompletion([](size_t completed, size_t total) { - g_renderer->BeginUIFrame(); - - const float center_x = ImGui::GetIO().DisplaySize.x * 0.5f; - const float center_y = ImGui::GetIO().DisplaySize.y * 0.5f; - const float scale = ImGui::GetIO().DisplayFramebufferScale.x; - - ImGui::SetNextWindowSize(ImVec2(400.0f * scale, 50.0f * scale), ImGuiCond_Always); - ImGui::SetNextWindowPos(ImVec2(center_x, center_y), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); - if (ImGui::Begin(Common::GetStringT("Compiling Shaders").c_str(), nullptr, - ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs | - ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | - ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav | - ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) - { - ImGui::Text("Compiling shaders: %zu/%zu", completed, total); - ImGui::ProgressBar(static_cast<float>(completed) / - static_cast<float>(std::max(total, static_cast<size_t>(1))), - ImVec2(-1.0f, 0.0f), ""); - } - ImGui::End(); + running = m_async_shader_compiler->WaitUntilCompletion(update_ui_progress); - g_renderer->EndUIFrame(); - }); m_async_shader_compiler->RetrieveWorkItems(); } + + // Just render nothing to clear the screen + g_renderer->BeginUIFrame(); + g_renderer->EndUIFrame(); } template <typename SerializedUidType, typename UidType> |
