【发布时间】:2017-12-29 18:09:45
【问题描述】:
我安装了 OpenGL 4.4 版、相应的 4.4 核心 GLAD 版本和 GLFW 3.2 版(在 Visual Studio 2015 中编辑)。我正在使用https://learnopengl.com/#!In-Practice/Debugging 中详述的回调函数:
void APIENTRY glDebugOutput(GLenum source, GLenum type, GLuint id, GLenum severity,
GLsizei length, const GLchar *message, const void *userParam);
我有以下功能:
GLFWwindow* init(int width, int height, const char* header) {
GLFWwindow* window;
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
window = glfwCreateWindow(width, height, header, NULL, NULL);
if (window == NULL) {
glfwTerminate();
throw std::runtime_error("Failed to create GLFW window.");
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, resizeCallback);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
glfwTerminate();
throw std::runtime_error("Failed to initialize GLAD");
}
GLint flags; glGetIntegerv(GL_CONTEXT_FLAGS, &flags);
if (flags & GL_CONTEXT_FLAG_DEBUG_BIT)
{
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(glDebugOutput, nullptr); // segfault on this line
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
}
return window;
}
我尝试重新安装 GLAD 并将 APIENTRY 更改为 CALLBACK,但无济于事。我完全迷路了,有什么建议吗?
【问题讨论】:
-
如果您使用的是 GL 4.4,为什么只加载 GL 3.3?
-
您的
glDebugOutput回调中有什么内容? -
@NicolBolas 在所有的事情中......很好,非常感谢!
标签: c++ opengl visual-c++ glfw