OpenGL debug messages and contexts;

The new t.graphics.debug flag controls the following:

- If enabled, a debug context is created
- If disabled, a no-error context is created
- If enabled, GL debug messages are forwarded to lovr.log
This commit is contained in:
bjorn 2020-07-28 16:12:30 -06:00
parent e3aa4c7d5d
commit f0a5a8838b
2 changed files with 18 additions and 0 deletions

View File

@ -122,6 +122,8 @@ bool lovrPlatformCreateWindow(WindowFlags* flags) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, flags->debug);
glfwWindowHint(GLFW_CONTEXT_NO_ERROR, !flags->debug);
glfwWindowHint(GLFW_SAMPLES, flags->msaa);
glfwWindowHint(GLFW_RESIZABLE, flags->resizable);
glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE);

View File

@ -1226,6 +1226,17 @@ static void lovrGpuSetViewports(float* viewport, uint32_t count) {
// GPU
static void onMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userdata) {
int level;
switch (severity) {
case GL_DEBUG_SEVERITY_HIGH: level = LOG_ERROR; break;
case GL_DEBUG_SEVERITY_MEDIUM: level = LOG_WARN; break;
case GL_DEBUG_SEVERITY_LOW: level = LOG_INFO; break;
default: level = LOG_DEBUG; break;
}
lovrLog(level, "GL", message);
}
void lovrGpuInit(void* (*getProcAddress)(const char*), bool debug) {
#ifdef LOVR_GL
gladLoadGLLoader((GLADloadproc) getProcAddress);
@ -1233,6 +1244,11 @@ void lovrGpuInit(void* (*getProcAddress)(const char*), bool debug) {
gladLoadGLES2Loader((GLADloadproc) getProcAddress);
#endif
if (debug && GLAD_GL_KHR_debug) {
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(onMessage, NULL);
}
#ifndef LOVR_WEBGL
state.features.astc = GLAD_GL_ES_VERSION_3_2;
state.features.compute = GLAD_GL_ES_VERSION_3_1 || GLAD_GL_ARB_compute_shader;