some more imgui refactoring

This commit is contained in:
TakaRikka
2026-03-14 04:07:30 -07:00
parent 7da7cefe30
commit 8837df94bb
13 changed files with 294 additions and 139 deletions
+4
View File
@@ -1336,6 +1336,10 @@ set(DUSK_FILES
#src/dusk/m_Do_ext_dusk.cpp
src/dusk/imgui/ImGuiConsole.hpp
src/dusk/imgui/ImGuiConsole.cpp
src/dusk/imgui/ImGuiMenuGame.cpp
src/dusk/imgui/ImGuiMenuGame.hpp
src/dusk/imgui/ImGuiMenuTools.cpp
src/dusk/imgui/ImGuiMenuTools.hpp
src/dusk/imgui/ImGuiProcessOverlay.cpp
src/dusk/imgui/ImGuiCameraOverlay.cpp
src/dusk/imgui/ImGuiHeapOverlay.cpp
+3 -2
View File
@@ -3,10 +3,11 @@
#include "imgui.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
namespace dusk {
void ImGuiConsole::ShowCameraOverlay() {
if (!CheckMenuViewToggle(ImGuiKey_F6, m_showCameraOverlay)) {
void ImGuiMenuTools::ShowCameraOverlay() {
if (!ImGuiConsole::CheckMenuViewToggle(ImGuiKey_F6, m_showCameraOverlay)) {
return;
}
+2 -91
View File
@@ -92,102 +92,13 @@ namespace dusk {
}
if (ImGui::BeginMainMenuBar()) {
if (ImGui::BeginMenu("View")) {
ImGui::MenuItem("Hide UI", "F1", &m_isHidden);
ImGui::MenuItem("Process Management", "F2", &m_showProcessManagement);
ImGui::MenuItem("Debug Overlay", "F3", &m_showDebugOverlay);
ImGui::MenuItem("Heaps", "F4", &m_showHeapOverlay);
ImGui::MenuItem("Stub Log", "F5", &m_showStubLog);
ImGui::MenuItem("Camera", "F6", &m_showCameraOverlay);
ImGui::MenuItem("Input Viewer", nullptr, &m_showInputViewer);
ImGui::MenuItem("Map Loader", nullptr, &m_showMapLoader);
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Game")) {
if (ImGui::Selectable("Reset")) {
JUTGamePad::C3ButtonReset::sResetSwitchPushing = true;
}
ImGui::EndMenu();
}
ShowDebugOverlay();
ShowCameraOverlay();
ShowProcessManager();
ShowHeapOverlay();
ShowInputViewer();
ShowStubLog();
ShowMapLoader();
DuskDebugPad(); // temporary, remove later
m_menuGame.draw();
m_menuTools.draw();
ImGui::EndMainMenuBar();
}
}
void ImGuiConsole::ShowDebugOverlay() {
if (!CheckMenuViewToggle(ImGuiKey_F3, m_showDebugOverlay)) {
return;
}
ImGuiIO& io = ImGui::GetIO();
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDecoration |
ImGuiWindowFlags_AlwaysAutoResize |
ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_NoNav;
if (m_debugOverlayCorner != -1) {
SetOverlayWindowLocation(m_debugOverlayCorner);
windowFlags |= ImGuiWindowFlags_NoMove;
}
ImGui::SetNextWindowBgAlpha(0.65f);
if (ImGui::Begin("Debug Overlay", nullptr, windowFlags)) {
bool hasPrevious = false;
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
ImGuiStringViewText(fmt::format(FMT_STRING("FPS: {:.2f}\n"), io.Framerate));
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
ImGuiStringViewText(fmt::format(FMT_STRING("Backend: {}\n"), backend_name(aurora_get_backend())));
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
AuroraStats const* stats = aurora_get_stats();
ImGuiStringViewText(
fmt::format(FMT_STRING("Queued pipelines: {}\n"), stats->queuedPipelines));
ImGuiStringViewText(
fmt::format(FMT_STRING("Done pipelines: {}\n"), stats->createdPipelines));
ImGuiStringViewText(
fmt::format(FMT_STRING("Draw call count: {}\n"), stats->drawCallCount));
ImGuiStringViewText(fmt::format(FMT_STRING("Merged draw calls: {}\n"),
stats->mergedDrawCallCount));
ImGuiStringViewText(fmt::format(FMT_STRING("Vertex size: {}\n"),
BytesToString(stats->lastVertSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Uniform size: {}\n"),
BytesToString(stats->lastUniformSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Index size: {}\n"),
BytesToString(stats->lastIndexSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Storage size: {}\n"),
BytesToString(stats->lastStorageSize)));
ImGuiStringViewText(fmt::format(
FMT_STRING("Total: {}\n"),
BytesToString(stats->lastVertSize + stats->lastUniformSize +
stats->lastIndexSize + stats->lastStorageSize)));
}
ImGui::End();
}
bool ImGuiConsole::CheckMenuViewToggle(ImGuiKey key, bool& active) {
if (ImGui::IsKeyPressed(key)) {
active = !active;
+6 -38
View File
@@ -5,55 +5,22 @@
#include <string>
#include "imgui.h"
#include "ImGuiMenuGame.hpp"
#include "ImGuiMenuTools.hpp"
namespace dusk {
class ImGuiConsole {
public:
ImGuiConsole();
void draw();
void ShowDebugOverlay();
void ShowCameraOverlay();
void ShowProcessManager();
void ShowHeapOverlay();
void ShowInputViewer();
void ShowStubLog();
void ShowMapLoader();
bool CheckMenuViewToggle(ImGuiKey key, bool& active);
static bool CheckMenuViewToggle(ImGuiKey key, bool& active);
private:
bool m_isHidden = false;
bool m_showDebugOverlay = false;
int m_debugOverlayCorner = 0; // top-left
bool m_showCameraOverlay = false;
int m_cameraOverlayCorner = 3;
bool m_showProcessManagement = false;
bool m_showHeapOverlay = false;
bool m_showStubLog = false;
bool m_showInputViewer = false;
int m_inputOverlayCorner = 3;
std::string m_controllerName;
bool m_showMapLoader = false;
struct {
int mapIdx = -1;
int regionIdx = -1;
int roomNoIdx = 0;
int pointNoIdx = 0;
int roomNo = -1;
int pointNo = -1;
int spawnId = 0;
int layer = -1;
bool showInternalNames = false;
} m_mapLoaderInfo;
ImGuiMenuGame m_menuGame;
ImGuiMenuTools m_menuTools;
};
extern ImGuiConsole g_imguiConsole;
@@ -62,6 +29,7 @@ namespace dusk {
std::string BytesToString(size_t bytes);
void SetOverlayWindowLocation(int corner);
bool ShowCornerContextMenu(int& corner, int avoidCorner);
void ImGuiStringViewText(std::string_view text);
}
void DuskDebugPad();
+2 -1
View File
@@ -3,6 +3,7 @@
#include "imgui.h"
#include <imgui_internal.h>
#include "ImGuiConsole.hpp"
#include "ImGuiMenuGame.hpp"
namespace dusk {
void TextCenter(const std::string& text) {
@@ -14,7 +15,7 @@ namespace dusk {
static inline float GetScale() { return ImGui::GetCurrentContext()->CurrentDpiScale; }
void ImGuiConsole::ShowInputViewer() {
void ImGuiMenuGame::windowInputViewer() {
if (!m_showInputViewer) {
return;
}
+3 -2
View File
@@ -4,12 +4,13 @@
#include "JSystem/JKernel/JKRHeap.h"
#include "imgui.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
namespace dusk {
static void DrawTableCore();
void ImGuiConsole::ShowHeapOverlay() {
if (!CheckMenuViewToggle(ImGuiKey_F4, m_showHeapOverlay)) {
void ImGuiMenuTools::ShowHeapOverlay() {
if (!ImGuiConsole::CheckMenuViewToggle(ImGuiKey_F4, m_showHeapOverlay)) {
return;
}
+2 -1
View File
@@ -3,10 +3,11 @@
#include "imgui.h"
#include <imgui_internal.h>
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
#include "dusk/map_loader_definitions.h"
namespace dusk {
void ImGuiConsole::ShowMapLoader() {
void ImGuiMenuTools::ShowMapLoader() {
if (!m_showMapLoader) {
return;
}
+87
View File
@@ -0,0 +1,87 @@
#include "fmt/format.h"
#include "imgui.h"
#include "aurora/gfx.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuGame.hpp"
#include "JSystem/JUtility/JUTGamePad.h"
#include "m_Do/m_Do_audio.h"
namespace dusk {
ImGuiMenuGame::ImGuiMenuGame() {}
void ImGuiMenuGame::draw() {
if (ImGui::BeginMenu("Game")) {
if (ImGui::MenuItem("Reset", "Ctrl+R")) {
JUTGamePad::C3ButtonReset::sResetSwitchPushing = true;
}
ImGui::Separator();
if (ImGui::BeginMenu("Graphics")) {
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Audio")) {
ImGui::Text("Master Volume");
ImGui::SliderFloat("##m_masterVolume", &m_audioSettings.m_masterVolume, 0.0f, 1.0f, "");
ImGui::Text("Main Music Volume");
ImGui::SliderFloat("##m_mainMusicVolume", &m_audioSettings.m_mainMusicVolume, 0.0f, 1.0f, "");
ImGui::Text("Sub Music Volume");
ImGui::SliderFloat("##m_subMusicVolume", &m_audioSettings.m_subMusicVolume, 0.0f, 1.0f, "");
ImGui::Text("Sound Effects Volume");
ImGui::SliderFloat("##m_soundEffectsVolume", &m_audioSettings.m_soundEffectsVolume, 0.0f, 1.0f, "");
ImGui::Text("Fanfare Volume");
ImGui::SliderFloat("##m_fanfareVolume", &m_audioSettings.m_fanfareVolume, 0.0f, 1.0f, "");
Z2AudioMgr* audioMgr = Z2AudioMgr::getInterface();
if (audioMgr != nullptr) {
// TODO: actually apply volume settings
}
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Controller")) {
ImGui::MenuItem("Configure Controller", nullptr, &m_showControllerConfig);
ImGui::Checkbox("Show Input Viewer", &m_showInputViewer);
ImGui::EndMenu();
}
ImGui::EndMenu();
}
windowInputViewer();
windowControllerConfig();
if ((ImGui::IsKeyDown(ImGuiKey_LeftCtrl) || ImGui::IsKeyDown(ImGuiKey_RightCtrl)) && ImGui::IsKeyPressed(ImGuiKey_R)) {
JUTGamePad::C3ButtonReset::sResetSwitchPushing = true;
}
}
void ImGuiMenuGame::windowControllerConfig() {
if (!m_showControllerConfig) {
return;
}
ImGuiWindowFlags windowFlags =
ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_AlwaysAutoResize;
ImGui::SetNextWindowBgAlpha(0.65f);
ImGui::SetNextWindowSizeConstraints(ImVec2(500, 200), ImVec2(1000, 200));
if (!ImGui::Begin("Controller Config", nullptr, windowFlags)) {
ImGui::End();
return;
}
ImGui::End();
}
}
+35
View File
@@ -0,0 +1,35 @@
#ifndef DUSK_IMGUI_MENUGAME_HPP
#define DUSK_IMGUI_MENUGAME_HPP
#include <aurora/aurora.h>
#include <string>
#include "imgui.h"
namespace dusk {
class ImGuiMenuGame {
public:
ImGuiMenuGame();
void draw();
void windowInputViewer();
void windowControllerConfig();
private:
struct {
float m_masterVolume = 1.0f;
float m_mainMusicVolume = 1.0f;
float m_subMusicVolume = 1.0f;
float m_soundEffectsVolume = 1.0f;
float m_fanfareVolume = 1.0f;
} m_audioSettings;
bool m_showControllerConfig = false;
bool m_showInputViewer = false;
int m_inputOverlayCorner = 3;
std::string m_controllerName;
};
}
#endif // DUSK_IMGUI_MENUGAME_HPP
+94
View File
@@ -0,0 +1,94 @@
#include "fmt/format.h"
#include "imgui.h"
#include "aurora/gfx.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
namespace dusk {
ImGuiMenuTools::ImGuiMenuTools() {}
void ImGuiMenuTools::draw() {
if (ImGui::BeginMenu("Tools")) {
ImGui::MenuItem("Process Management", "F2", &m_showProcessManagement);
ImGui::MenuItem("Debug Overlay", "F3", &m_showDebugOverlay);
ImGui::MenuItem("Heaps", "F4", &m_showHeapOverlay);
ImGui::MenuItem("Stub Log", "F5", &m_showStubLog);
ImGui::MenuItem("Camera", "F6", &m_showCameraOverlay);
ImGui::MenuItem("Map Loader", nullptr, &m_showMapLoader);
ImGui::EndMenu();
}
ShowDebugOverlay();
ShowCameraOverlay();
ShowProcessManager();
ShowHeapOverlay();
ShowStubLog();
ShowMapLoader();
DuskDebugPad(); // temporary, remove later
}
void ImGuiMenuTools::ShowDebugOverlay() {
if (!ImGuiConsole::CheckMenuViewToggle(ImGuiKey_F3, m_showDebugOverlay)) {
return;
}
ImGuiIO& io = ImGui::GetIO();
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDecoration |
ImGuiWindowFlags_AlwaysAutoResize |
ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_NoNav;
if (m_debugOverlayCorner != -1) {
SetOverlayWindowLocation(m_debugOverlayCorner);
windowFlags |= ImGuiWindowFlags_NoMove;
}
ImGui::SetNextWindowBgAlpha(0.65f);
if (ImGui::Begin("Debug Overlay", nullptr, windowFlags)) {
bool hasPrevious = false;
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
ImGuiStringViewText(fmt::format(FMT_STRING("FPS: {:.2f}\n"), io.Framerate));
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
ImGuiStringViewText(fmt::format(FMT_STRING("Backend: {}\n"), backend_name(aurora_get_backend())));
if (hasPrevious) {
ImGui::Separator();
}
hasPrevious = true;
AuroraStats const* stats = aurora_get_stats();
ImGuiStringViewText(
fmt::format(FMT_STRING("Queued pipelines: {}\n"), stats->queuedPipelines));
ImGuiStringViewText(
fmt::format(FMT_STRING("Done pipelines: {}\n"), stats->createdPipelines));
ImGuiStringViewText(
fmt::format(FMT_STRING("Draw call count: {}\n"), stats->drawCallCount));
ImGuiStringViewText(fmt::format(FMT_STRING("Merged draw calls: {}\n"),
stats->mergedDrawCallCount));
ImGuiStringViewText(fmt::format(FMT_STRING("Vertex size: {}\n"),
BytesToString(stats->lastVertSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Uniform size: {}\n"),
BytesToString(stats->lastUniformSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Index size: {}\n"),
BytesToString(stats->lastIndexSize)));
ImGuiStringViewText(fmt::format(FMT_STRING("Storage size: {}\n"),
BytesToString(stats->lastStorageSize)));
ImGuiStringViewText(fmt::format(
FMT_STRING("Total: {}\n"),
BytesToString(stats->lastVertSize + stats->lastUniformSize +
stats->lastIndexSize + stats->lastStorageSize)));
}
ImGui::End();
}
}
+50
View File
@@ -0,0 +1,50 @@
#ifndef DUSK_IMGUI_MENUTOOLS_HPP
#define DUSK_IMGUI_MENUTOOLS_HPP
#include <aurora/aurora.h>
#include <string>
#include "imgui.h"
namespace dusk {
class ImGuiMenuTools {
public:
ImGuiMenuTools();
void draw();
void ShowDebugOverlay();
void ShowCameraOverlay();
void ShowProcessManager();
void ShowHeapOverlay();
void ShowStubLog();
void ShowMapLoader();
private:
bool m_showDebugOverlay = false;
int m_debugOverlayCorner = 0; // top-left
bool m_showCameraOverlay = false;
int m_cameraOverlayCorner = 3;
bool m_showProcessManagement = false;
bool m_showHeapOverlay = false;
bool m_showStubLog = false;
bool m_showMapLoader = false;
struct {
int mapIdx = -1;
int regionIdx = -1;
int roomNoIdx = 0;
int pointNoIdx = 0;
int roomNo = -1;
int pointNo = -1;
int spawnId = 0;
int layer = -1;
bool showInternalNames = false;
} m_mapLoaderInfo;
};
}
#endif // DUSK_IMGUI_MENUTOOLS_HPP
+3 -2
View File
@@ -11,6 +11,7 @@
#include "f_pc/f_pc_node.h"
#include "imgui.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
#include "imgui_internal.h"
namespace dusk {
@@ -68,8 +69,8 @@ namespace dusk {
return 1;
}
void ImGuiConsole::ShowProcessManager() {
if (!CheckMenuViewToggle(ImGuiKey_F2, m_showProcessManagement)) {
void ImGuiMenuTools::ShowProcessManager() {
if (!ImGuiConsole::CheckMenuViewToggle(ImGuiKey_F2, m_showProcessManagement)) {
return;
}
+3 -2
View File
@@ -3,6 +3,7 @@
#include "dusk/logging.h"
#include "imgui.h"
#include "ImGuiConsole.hpp"
#include "ImGuiMenuTools.hpp"
namespace dusk {
static ImGuiTextBuffer StubLogBuffer;
@@ -38,8 +39,8 @@ namespace dusk {
static void ClearPastFrame();
void ImGuiConsole::ShowStubLog() {
if (!CheckMenuViewToggle(ImGuiKey_F5, m_showStubLog)) {
void ImGuiMenuTools::ShowStubLog() {
if (!ImGuiConsole::CheckMenuViewToggle(ImGuiKey_F5, m_showStubLog)) {
ClearPastFrame();
return;
}