-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
glDebugMessageCallback not working #128
Comments
This is solved with this commit which changes the way glad is build (and now built only once. My bad!): See
|
Please please, when submitting issues, do include a minimal reproducible example. I had to do it for you in this case: #include "imgui.h"
#include "hello_imgui/hello_imgui.h"
#include "immapp/immapp.h"
#include "hello_imgui/hello_imgui_include_opengl.h"
void glDebugOutput(
std::uint32_t source, std::uint32_t type,
std::uint32_t id, std::uint32_t severity,
int length, const char *message,
const void *userparam);
void gui()
{
ImGui::Text("Hello, world!");
}
int main(int, char **)
{
ImmApp::AddOnsParams addonsParams;
HelloImGui::RunnerParams _runner_params;
_runner_params.fpsIdling.enableIdling = false; // disable idling so that the shader runs at full speed
_runner_params.appWindowParams.windowGeometry.size = {4000, 2000};
_runner_params.appWindowParams.windowTitle = "CGSGFOREVER";
// Do not create a default ImGui window, so that the shader occupies the whole display
_runner_params.imGuiWindowParams.defaultImGuiWindowType = HelloImGui::DefaultImGuiWindowType::NoDefaultWindow;
// PostInit is called after the ImGui context is created, and after OpenGL is initialized
_runner_params.callbacks.PostInit = [&]() {
glEnable(GL_SCISSOR_TEST);
glClearColor(1, 1, 1, 1);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(glDebugOutput, NULL);
};
_runner_params.callbacks.ShowGui = [&]() { gui(); }; // ShowGui is called every frame, and is used to display the ImGui widgets
addonsParams.withMarkdown = true;
ImmApp::Run(_runner_params, addonsParams);
}
// Disable sprintf warnings on MSVC, clang, and GCC
#pragma warning(disable : 4996)
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
void glDebugOutput(std::uint32_t source, std::uint32_t type,
std::uint32_t id, std::uint32_t severity,
int length, const char *message,
const void *userparam)
{
int len = 0;
static char Buf[10'000];
len += sprintf(Buf + len, "Debug message (%i) %s\n", id, message);
switch (source)
{
case GL_DEBUG_SOURCE_API:
len += sprintf(Buf + len, "Source: API\n");
break;
case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
len += sprintf(Buf + len, "Source: Window System\n");
break;
case GL_DEBUG_SOURCE_SHADER_COMPILER:
len += sprintf(Buf + len, "Source: Shader Compiler\n");
break;
case GL_DEBUG_SOURCE_THIRD_PARTY:
len += sprintf(Buf + len, "Source: Third Party\n");
break;
case GL_DEBUG_SOURCE_APPLICATION:
len += sprintf(Buf + len, "Source: Application");
break;
case GL_DEBUG_SOURCE_OTHER:
len += sprintf(Buf + len, "Source: Other");
break;
}
len += sprintf(Buf + len, "\n");
switch (type)
{
case GL_DEBUG_TYPE_ERROR:
len += sprintf(Buf + len, "Type: Error");
break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
len += sprintf(Buf + len, "Type: Deprecated Behaviour");
break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
len += sprintf(Buf + len, "Type: Undefined Behaviour");
break;
case GL_DEBUG_TYPE_PORTABILITY:
len += sprintf(Buf + len, "Type: Portability");
break;
case GL_DEBUG_TYPE_PERFORMANCE:
len += sprintf(Buf + len, "Type: Performance");
break;
case GL_DEBUG_TYPE_MARKER:
len += sprintf(Buf + len, "Type: Marker");
break;
case GL_DEBUG_TYPE_PUSH_GROUP:
len += sprintf(Buf + len, "Type: Push Group");
break;
case GL_DEBUG_TYPE_POP_GROUP:
len += sprintf(Buf + len, "Type: Pop Group");
break;
case GL_DEBUG_TYPE_OTHER:
len += sprintf(Buf + len, "Type: Other");
break;
}
len += sprintf(Buf + len, "\n");
switch (severity)
{
case GL_DEBUG_SEVERITY_HIGH:
len += sprintf(Buf + len, "Severity: high");
break;
case GL_DEBUG_SEVERITY_MEDIUM:
len += sprintf(Buf + len, "Severity: medium");
break;
case GL_DEBUG_SEVERITY_LOW:
len += sprintf(Buf + len, "Severity: low");
break;
case GL_DEBUG_SEVERITY_NOTIFICATION:
len += sprintf(Buf + len, "Severity: notification");
break;
}
len += sprintf(Buf + len, "\n\n");
std::cout << Buf;
} |
Concerning your issue where glDebugMessageCallback is not available, you may have to regenerate the glad bindings: .. and activate the required debug extension and place them in hello_imgui/external/OpenGL_Loaders/glad |
Hi there!
I've been implementing simple 2D graphics editor using OpenGL and encountered a problem when using
glDebugMessageCallback
.On linux calling
glDebugMessageCallback
causes linker errors since GLAD lib is located both in ImmVision and HelloImGui.On windows calling
glDebugMessageCallback
causes segfault sinceglDebugMessageCallback
is nullptr.It is called in
PostInit
callback.Everything else OpenGL-related works fine, only the
glDebugMessageCallback
causes troubles.Is there a convenient way of enabling it?
The code can be found here: https://github.com/2b1g1c/my-paint/blob/core/rnd/src/app/app.cpp
The text was updated successfully, but these errors were encountered: