Route render debug callback through platform services

This commit is contained in:
2026-06-03 05:30:54 +02:00
parent 87b1851d59
commit 8b12ae35d4
10 changed files with 117 additions and 82 deletions

View File

@@ -1,9 +1,11 @@
#include "pch.h"
#include "platform_windows/windows_platform_services.h"
#include "log.h"
#include "renderer_gl/opengl_capabilities.h"
#include <deque>
#include <map>
extern HWND hWnd;
extern std::deque<std::packaged_task<void()>> main_tasklist;
@@ -20,6 +22,73 @@ void win32_update_stylus(float dt);
namespace {
static CONSOLE_SCREEN_BUFFER_INFO render_debug_console_info;
[[nodiscard]] GLenum debug_severity_notification() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_severity_notification());
}
[[nodiscard]] GLenum debug_severity_low() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_severity_low());
}
[[nodiscard]] GLenum debug_severity_medium() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_severity_medium());
}
[[nodiscard]] GLenum debug_severity_high() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_severity_high());
}
[[nodiscard]] GLenum debug_output_state() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_output_state());
}
[[nodiscard]] GLenum debug_output_synchronous_state() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::debug_output_synchronous_state());
}
void handle_gl_callback(
GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
const void* userParam)
{
(void)source;
(void)type;
(void)id;
(void)userParam;
static std::map<GLenum, WORD> colors = {
{ debug_severity_notification(), static_cast<WORD>(8) },
{ debug_severity_low(), static_cast<WORD>(8) },
{ debug_severity_medium(), static_cast<WORD>(FOREGROUND_GREEN | FOREGROUND_INTENSITY) },
{ debug_severity_high(), static_cast<WORD>(FOREGROUND_RED | FOREGROUND_INTENSITY) },
};
if (severity == debug_severity_high()
|| severity == debug_severity_medium()
|| severity == debug_severity_low())
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors[severity]);
LOG("OPENGL: %.*s", length, message);
FlushConsoleInputBuffer(GetStdHandle(STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), render_debug_console_info.wAttributes);
#ifdef _DEBUG
if (severity == debug_severity_high())
__debugbreak();
#endif
}
}
void show_cursor(bool visible)
{
std::lock_guard<std::mutex> lock(main_task_mutex);
@@ -268,6 +337,18 @@ public:
glEnable(static_cast<GLenum>(pp::renderer::gl::line_smooth_state()));
}
void install_render_debug_callback() override
{
if (!glDebugMessageCallback)
return;
// colors: http://stackoverflow.com/questions/4053837/colorizing-text-in-the-console-with-c
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &render_debug_console_info);
glDebugMessageCallback(handle_gl_callback, nullptr);
glEnable(debug_output_state());
glEnable(debug_output_synchronous_state());
}
void begin_render_capture_frame() override
{
win32_renderdoc_frame_start();