gpt4 book ai didi

c++ - 尽管有错误,glDebugMessageCallback 不会被调用

转载 作者:行者123 更新时间:2023-12-02 09:55:29 24 4
gpt4 key购买 nike

我在 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)。

处理错误的最佳方法是什么?如何修复我的代码?

最佳答案

感谢@OutOfBound,我找到了答案。在glfwCreateWindow之前,您需要调用glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE)

类似于他的回答,你可以做这样的事情来在发生错误时中断(至少使用 MSVC 编译器):

#define call(x) x;\
if (error) __debugbreak();

bool error = false;

void GLAPIENTRY MessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) {
error = true;
std::cout << "[OpenGL Error](" << type << ") " << message << std::endl;
}

关于c++ - 尽管有错误,glDebugMessageCallback 不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60486285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com