diff --git a/game/graphics/opengl_renderer/BucketRenderer.cpp b/game/graphics/opengl_renderer/BucketRenderer.cpp index b6f92a3075..db4a2c0d44 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.cpp +++ b/game/graphics/opengl_renderer/BucketRenderer.cpp @@ -3,6 +3,10 @@ #include "fmt/core.h" #include "third-party/imgui/imgui.h" +std::string BucketRenderer::name() const { + return m_name; +} + std::string BucketRenderer::name_and_id() const { return fmt::format("[{:2d}] {}", (int)m_my_id, m_name); } diff --git a/game/graphics/opengl_renderer/BucketRenderer.h b/game/graphics/opengl_renderer/BucketRenderer.h index 05ec7cf726..df8e3947c4 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.h +++ b/game/graphics/opengl_renderer/BucketRenderer.h @@ -98,6 +98,7 @@ class BucketRenderer { virtual void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) = 0; + std::string name() const; std::string name_and_id() const; virtual ~BucketRenderer() = default; bool& enabled() { return m_enabled; } @@ -158,4 +159,4 @@ class PrintRenderer : public BucketRenderer { void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override; bool empty() const override { return true; } void draw_debug_window() override {} -}; \ No newline at end of file +}; diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 51b477b714..4449e709c9 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -28,6 +28,7 @@ #include "game/graphics/pipelines/opengl.h" #include "third-party/imgui/imgui.h" +#include "third-party/imgui/imgui_stdlib.h" // for the vif callback #include "game/kernel/common/kmachine.h" @@ -36,6 +37,7 @@ #ifdef _WIN32 #include #endif +#include "common/util/string_util.h" namespace { std::string g_current_renderer; @@ -1082,8 +1084,13 @@ void OpenGLRenderer::draw_renderer_selection_window() { ImGui::TreePop(); } + ImGui::InputText("Renderer Filter", &m_renderer_filter); + for (size_t i = 0; i < m_bucket_renderers.size(); i++) { auto renderer = m_bucket_renderers[i].get(); + if (!m_renderer_filter.empty() && !str_util::contains(renderer->name(), m_renderer_filter)) { + continue; + } if (renderer && !renderer->empty()) { ImGui::PushID(i); if (ImGui::TreeNode(renderer->name_and_id().c_str())) { diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.h b/game/graphics/opengl_renderer/OpenGLRenderer.h index bf2e165db4..9f0faad591 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.h +++ b/game/graphics/opengl_renderer/OpenGLRenderer.h @@ -123,6 +123,7 @@ class OpenGLRenderer { float m_last_pmode_alp = 1.; bool m_enable_fast_blackout_loads = true; + std::string m_renderer_filter = ""; struct FboState { struct {