240 lines
No EOL
9.1 KiB
C++
240 lines
No EOL
9.1 KiB
C++
#include "DebugTools.hpp"
|
|
|
|
#include <ostd/Signals.hpp>
|
|
#include <ogfx/RenderCore.hpp>
|
|
#include <ogfx/GraphicsApplication.hpp>
|
|
|
|
namespace ogfx
|
|
{
|
|
void DebugInfoWidget::init(ogfx::oxgui::Widget& parent)
|
|
{
|
|
if (parent.isInvalid())
|
|
{
|
|
invalidate();
|
|
}
|
|
setPosition({ 0, 0 });
|
|
setSize(parent.getContentSize());
|
|
|
|
connectSignals();
|
|
connectSignal(DebugTools::OnProfileDataRecieved);
|
|
setTypeName("ogfx::DebugInfoWidget");
|
|
validate();
|
|
enable();
|
|
parent.addWidget(*this);
|
|
}
|
|
|
|
void DebugInfoWidget::renderContent(ogfx::RenderCore& gfx)
|
|
{
|
|
if (m_dataList == nullptr) return;
|
|
|
|
Renderer2D::tTextInfo textInfo;
|
|
textInfo.characterHeight = 24;
|
|
textInfo.characterSpacing = 6;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
ogfx::Renderer2D::Text::characterHeight = textInfo.characterHeight;
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
|
|
auto stateGradientPixels = ogfx::ResourceManager::getTexture(ogfx::ResourceManager::getStateGradientTexture()).getPixelData();
|
|
|
|
ostd::Vec2 pos = getPosition() + ostd::Vec2 { 10, 20 };
|
|
|
|
bool line = true;
|
|
|
|
float max_avg = 0;
|
|
for (auto& data : m_dataList->data)
|
|
{
|
|
if (ostd::StringEditor(data.second.name).startsWith("Total Frame Time"))
|
|
continue;
|
|
float avg = data.second.getAvgTime();
|
|
if (avg > max_avg)
|
|
max_avg = avg;
|
|
}
|
|
|
|
for (auto& data : m_dataList->data)
|
|
{
|
|
if (!line)
|
|
gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 30, 255 }, false);
|
|
line = !line;
|
|
|
|
float avg_val = data.second.getAvgTime();
|
|
uint32_t mapped = std::round(ostd::Utils::map_value(avg_val, 0.0f, max_avg, 1.0f, 198.0f)) * 4;
|
|
|
|
textInfo.characterSpacing = 6;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
textInfo.color = { stateGradientPixels[mapped], stateGradientPixels[mapped + 1], stateGradientPixels[mapped + 2] };
|
|
if (ostd::StringEditor(data.second.name).startsWith("Total Frame Time"))
|
|
textInfo.color = { 200, 200, 200 };
|
|
ostd::StringEditor str(data.second.name);
|
|
str.add(": ");
|
|
gfx.drawText(str.str(), pos, textInfo);
|
|
|
|
|
|
str.clr().addf(avg_val).add(" ms");
|
|
textInfo.characterSpacing = -10;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
float w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - w + 35, pos.y }, textInfo);
|
|
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
}
|
|
|
|
textInfo.characterHeight = 24;
|
|
textInfo.characterSpacing = 6;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.color = { 30, 150, 200 };
|
|
ogfx::Renderer2D::Text::characterHeight = textInfo.characterHeight;
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
|
|
ostd::StringEditor str;
|
|
|
|
gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false);
|
|
gfx.drawText("FPS: ", pos, textInfo);
|
|
str.addi(DebugTools::m_fps);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
float w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
// std::cout << str << "\n";
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawText("UPS: ", pos, textInfo);
|
|
str.addi(DebugTools::m_ups);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false);
|
|
gfx.drawText("Uniform Updates: ", pos, textInfo);
|
|
str.addi(DebugTools::m_uniformUpdates);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawText("Render Queue: ", pos, textInfo);
|
|
str.addi(DebugTools::m_renderCmdCount);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false);
|
|
gfx.drawText("Draw Calls: ", pos, textInfo);
|
|
str.addi(ogfx::Renderer2D::getRenderStats().drawCalls);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawText("Quad Count: ", pos, textInfo);
|
|
str.addi(ogfx::Renderer2D::getRenderStats().quadCount);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false);
|
|
gfx.drawText("RenderBuffer Binds: ", pos, textInfo);
|
|
str.addi(ogfx::Renderer2D::getRenderStats().renderBufferBinds);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
|
|
gfx.drawText("Shader Binds: ", pos, textInfo);
|
|
str.addi(ogfx::Renderer2D::getRenderStats().shaderBinds);
|
|
textInfo.characterSpacing = -5;
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono();
|
|
textInfo.color = { 190, 0, 190 };
|
|
ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing;
|
|
ogfx::Renderer2D::Text::font = textInfo.font;
|
|
w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x;
|
|
gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo);
|
|
textInfo.color = { 30, 150, 200 };
|
|
textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont();
|
|
textInfo.characterSpacing = 6;
|
|
str.clr();
|
|
pos += ostd::Vec2 { 0, 20 };
|
|
}
|
|
|
|
void DebugInfoWidget::onSignal(ostd::tSignal& signal)
|
|
{
|
|
if (signal.ID == DebugTools::OnProfileDataRecieved && m_dataList == nullptr)
|
|
{
|
|
m_dataList = (DebugTimesList*)(&signal.userData);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void DebugTools::showDebugWindow(GraphicsApplication2D* parent_app, bool show)
|
|
{
|
|
if (parent_app == nullptr) return;
|
|
if (!m_debugWindowEnabled) return;
|
|
parent_app->m_debugToolsWindow.enable(show);
|
|
m_debugWindowTabPanel.selectTab((show ? 0 : 1));
|
|
}
|
|
|
|
} |