【发布时间】:2020-06-14 14:21:01
【问题描述】:
我在 C++ 程序中使用 GLFW 和 GLEW 来处理 OpenGL。我希望能够将 OpenGL 错误输出到控制台。为了测试这一点,我做了一个小程序:
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
// Test error function
void GLAPIENTRY MessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) {
std::cout << "ERROR";
}
// Main function
int main(void)
{
// Just some initialization
GLFWwindow* window;
if (!glfwInit()) {
return -1;
}
window = glfwCreateWindow(640, 480, "Debugtest", NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glewInit();
// Output the opengl version
std::cout << glGetString(GL_VERSION) << std::endl;
// Enable debug output
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(MessageCallback, 0);
unsigned int buffer;
glGenBuffers(-1, &buffer); // -1 throws an error according to http://docs.gl/gl4/glGenBuffers
// Loop until the user closes the window
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
};
glfwTerminate();
return 0;
}
回调代码来自the khronos documentation。 glGenBuffers 应该根据the docs 抛出错误。但是,OpenGL 窗口保持白色,终端只显示 OpenGL 版本(4.5.13474 Copatibility Profile Context 22.19.162.4)。
处理错误的最佳方法是什么?如何修复我的代码?
【问题讨论】:
-
您是否请求 OpenGL 调试上下文?否则永远不会调用错误回调。
-
在调用
glCreateWindow()之前,您是否使用glfwWindowHint (GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);进行验证
标签: c++ debugging opengl error-handling