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

@@ -25,36 +25,6 @@ std::condition_variable App::render_cv;
namespace {
[[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());
}
[[nodiscard]] GLenum version_string_name() noexcept
{
return static_cast<GLenum>(pp::renderer::gl::version_string_name());
@@ -421,54 +391,13 @@ void App::upload(std::string filename, std::string name, std::function<void(floa
#endif //CURL
}
#ifdef _WIN32
static CONSOLE_SCREEN_BUFFER_INFO info;
void handle_gl_callback(GLenum source, GLenum type, GLuint id,
GLenum severity, GLsizei length, const GLchar* message, const void* userParam)
{
static std::map<GLenum, int> colors = {
{ debug_severity_notification(), 8 },
{ debug_severity_low(), 8 },
{ debug_severity_medium(), FOREGROUND_GREEN | FOREGROUND_INTENSITY },
{ debug_severity_high(), 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), info.wAttributes);
#ifdef _DEBUG
if (severity == debug_severity_high())
__debugbreak();
#endif
}
}
#endif
void App::init()
{
#ifdef _WIN32
if (glDebugMessageCallback)
{
// colors: http://stackoverflow.com/questions/4053837/colorizing-text-in-the-console-with-c
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
render_task([]
{
glDebugMessageCallback(handle_gl_callback, nullptr);
glEnable(debug_output_state());
glEnable(debug_output_synchronous_state());
});
}
#endif
LOG("Screen Resolution: %dx%d", (int)width, (int)height);
render_task([]
{
App::I->install_render_debug_callback();
LOG("GL version: %s", glGetString(version_string_name()));
LOG("GL vendor: %s", glGetString(vendor_string_name()));
LOG("GL renderer: %s", glGetString(renderer_string_name()));