Route render debug callback through platform services
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user