Add Bloom debug window

This commit is contained in:
Luke Street
2026-04-16 00:34:17 -06:00
parent 98b0c8296e
commit 5c61c5ede8
7 changed files with 144 additions and 1 deletions
+2
View File
@@ -1358,6 +1358,8 @@ set(DUSK_FILES
src/dusk/imgui/ImGuiEngine.hpp
src/dusk/imgui/ImGuiMenuGame.cpp
src/dusk/imgui/ImGuiMenuGame.hpp
src/dusk/imgui/ImGuiBloomWindow.cpp
src/dusk/imgui/ImGuiBloomWindow.hpp
src/dusk/imgui/ImGuiMenuTools.cpp
src/dusk/imgui/ImGuiMenuTools.hpp
src/dusk/imgui/ImGuiMenuEnhancements.cpp
+5
View File
@@ -33,6 +33,7 @@
#include <cstdlib>
#include <cstring>
#if TARGET_PC
#include "dusk/imgui/ImGuiBloomWindow.hpp"
#include "dusk/settings.h"
#endif
@@ -2578,6 +2579,10 @@ void dScnKy_env_light_c::setLight() {
mDoGph_gInf_c::getBloom()->setMode(mode);
}
#if TARGET_PC
dusk::ApplyBloomOverride();
#endif
f32 var_f30;
if (dKy_Outdoor_check() == true) {
static f32 now_shadow_alpha[] = {0.25f, 0.35f, 0.6f, 0.6f, 0.25f, 0.35f};
+126
View File
@@ -0,0 +1,126 @@
#include <algorithm>
#include "imgui.h"
#include "ImGuiBloomWindow.hpp"
#include "ImGuiMenuTools.hpp"
#include "m_Do/m_Do_graphic.h"
namespace dusk {
namespace {
struct BloomOverride {
bool enabled = false;
bool bloomEnabled = true;
int mode = 0;
int point = 128;
int blureSize = 64;
int blureRatio = 128;
GXColor blendColor = {255, 255, 255, 255};
GXColor monoColor = {0, 0, 0, 0};
};
BloomOverride s_bloomOverride;
void SyncFromCurrentBloom() {
mDoGph_gInf_c::bloom_c* bloom = mDoGph_gInf_c::getBloom();
s_bloomOverride.bloomEnabled = bloom->getEnable() != 0;
s_bloomOverride.mode = bloom->mMode;
s_bloomOverride.point = bloom->getPoint();
s_bloomOverride.blureSize = bloom->getBlureSize();
s_bloomOverride.blureRatio = bloom->getBlureRatio();
s_bloomOverride.blendColor = *bloom->getBlendColor();
s_bloomOverride.monoColor = *bloom->getMonoColor();
}
u8 ClampToByte(int value) {
return static_cast<u8>(std::clamp(value, 0, 255));
}
void DrawColorEdit(const char* label, GXColor& color) {
float colorValue[4] = {
color.r / 255.0f,
color.g / 255.0f,
color.b / 255.0f,
color.a / 255.0f,
};
if (ImGui::ColorEdit4(label, colorValue, ImGuiColorEditFlags_Uint8)) {
color.r = ClampToByte(static_cast<int>(colorValue[0] * 255.0f + 0.5f));
color.g = ClampToByte(static_cast<int>(colorValue[1] * 255.0f + 0.5f));
color.b = ClampToByte(static_cast<int>(colorValue[2] * 255.0f + 0.5f));
color.a = ClampToByte(static_cast<int>(colorValue[3] * 255.0f + 0.5f));
}
}
} // namespace
void ApplyBloomOverride() {
if (!s_bloomOverride.enabled) {
return;
}
mDoGph_gInf_c::bloom_c* bloom = mDoGph_gInf_c::getBloom();
bloom->setEnable(s_bloomOverride.bloomEnabled ? 1 : 0);
bloom->setMode(static_cast<u8>(std::clamp(s_bloomOverride.mode, 0, 1)));
bloom->setPoint(ClampToByte(s_bloomOverride.point));
bloom->setBlureSize(ClampToByte(s_bloomOverride.blureSize));
bloom->setBlureRatio(ClampToByte(s_bloomOverride.blureRatio));
bloom->setBlendColor(s_bloomOverride.blendColor);
bloom->setMonoColor(s_bloomOverride.monoColor);
}
void DrawBloomWindow(bool& open) {
if (!open) {
return;
}
if (!ImGui::Begin("Bloom", &open)) {
ImGui::End();
return;
}
bool copyCurrent = false;
if (ImGui::Checkbox("Override", &s_bloomOverride.enabled) && s_bloomOverride.enabled) {
copyCurrent = true;
}
ImGui::SameLine();
if (ImGui::Button("Sync with current")) {
copyCurrent = true;
}
if (copyCurrent) {
SyncFromCurrentBloom();
}
ImGui::SeparatorText("Values");
ImGui::Checkbox("Enabled", &s_bloomOverride.bloomEnabled);
ImGui::SliderInt("Mode", &s_bloomOverride.mode, 0, 1);
ImGui::SliderInt("Threshold", &s_bloomOverride.point, 0, 255);
ImGui::SliderInt("Blur Size", &s_bloomOverride.blureSize, 0, 255);
ImGui::SliderInt("Blur Ratio", &s_bloomOverride.blureRatio, 0, 255);
DrawColorEdit("Blend Color", s_bloomOverride.blendColor);
DrawColorEdit("Mono Color", s_bloomOverride.monoColor);
ApplyBloomOverride();
ImGui::SeparatorText("Current");
mDoGph_gInf_c::bloom_c* bloom = mDoGph_gInf_c::getBloom();
GXColor blendColor = *bloom->getBlendColor();
GXColor monoColor = *bloom->getMonoColor();
ImGui::Text("Enabled: %d", bloom->getEnable());
ImGui::Text("Mode: %d", bloom->mMode);
ImGui::Text("Threshold: %u", static_cast<unsigned>(bloom->getPoint()));
ImGui::Text("Blur Size: %u", static_cast<unsigned>(bloom->getBlureSize()));
ImGui::Text("Blur Ratio: %u", static_cast<unsigned>(bloom->getBlureRatio()));
ImGui::Text("Blend RGBA: %u, %u, %u, %u", static_cast<unsigned>(blendColor.r),
static_cast<unsigned>(blendColor.g), static_cast<unsigned>(blendColor.b),
static_cast<unsigned>(blendColor.a));
ImGui::Text("Mono RGBA: %u, %u, %u, %u", static_cast<unsigned>(monoColor.r),
static_cast<unsigned>(monoColor.g), static_cast<unsigned>(monoColor.b),
static_cast<unsigned>(monoColor.a));
ImGui::End();
}
void ImGuiMenuTools::ShowBloomWindow() {
DrawBloomWindow(m_showBloomWindow);
}
} // namespace dusk
+6
View File
@@ -0,0 +1,6 @@
#pragma once
namespace dusk {
void DrawBloomWindow(bool& open);
void ApplyBloomOverride();
} // namespace dusk
+1
View File
@@ -271,6 +271,7 @@ namespace dusk {
m_menuTools.ShowHeapOverlay();
m_menuTools.ShowStubLog();
m_menuTools.ShowMapLoader();
m_menuTools.ShowBloomWindow();
m_menuTools.ShowPlayerInfo();
m_menuTools.ShowAudioDebug();
m_menuTools.ShowSaveEditor();
+1 -1
View File
@@ -54,7 +54,7 @@ namespace dusk {
ImGui::MenuItem("State Share", hotkeys::SHOW_STATE_SHARE, &m_showStateShare);
ImGui::MenuItem("Debug Camera", hotkeys::SHOW_DEBUG_CAMERA, &m_showCameraOverlay);
ImGui::MenuItem("Audio Debug", hotkeys::SHOW_AUDIO_DEBUG, &m_showAudioDebug);
ImGui::MenuItem("Bloom", nullptr, &m_showBloomWindow);
ImGui::MenuItem("Stub Log", nullptr, &m_showStubLog);
if (!dusk::IsGameLaunched) {
+3
View File
@@ -21,6 +21,7 @@ namespace dusk {
void ShowHeapOverlay();
void ShowStubLog();
void ShowMapLoader();
void ShowBloomWindow();
void ShowPlayerInfo();
void ShowAudioDebug();
void ShowSaveEditor();
@@ -41,6 +42,8 @@ namespace dusk {
bool m_showMapLoader = false;
bool m_showBloomWindow = false;
bool m_showAudioDebug = false;
struct {
int mapIdx = -1;