OpenGL:在CPU上模拟GPU活动[已关闭]

jmo0nnb3  于 2022-12-12  发布在  其他
关注(0)|答案(1)|浏览(224)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

我们不允许问题寻求书籍、工具、软件库等的建议。您可以编辑问题,以便使用事实和引文来回答。
23小时前关门了。
Improve this question
OpenGL是不错的,但是它的大部分操作都是在GPU上进行的,像gdb这样的调试器无法访问它,所以如果我的OpenGL调用发生了意外,就很难追踪到bug。
我可以看到两种可能的解决方法:
1.也许有一个调试器可以访问GPU。
1.也许有人已经编写了代码来模拟CPU上的GPU活动,这将更容易调试。
有没有人有知识可以帮助这里?

dbf7pr2w

dbf7pr2w1#

当你不正确地使用OpenGL时,它会产生一个或多个用户错误标志。我们可以使用一个名为glGetError的函数来查询这些错误标志,该函数检查错误标志的设置,如果OpenGL使用不当,则返回一个错误值。

GLenum glGetError();

例如,可以使用其它类型的设备。

glGenTextures(-1, textures);  
 glGetError();   // returns 1281 (invalid value)

请记住,如果调用了glGetError,它会清除所有错误标志。这意味着如果在每一帧结束时调用glGetError一次,并且它返回一个错误,您不能断定这是唯一的错误。
使用glGetError(),您可以快速捕捉OpenGL错误开始出现的第一个位置。
对于OpenGL 4.3版及更高版本,我们可以使用称为调试输出的OpenGL扩展。OpenGL将向用户发送错误或警告消息,与glCheckError相比,消息中包含更多详细信息。每当发生错误时。
为此,我们必须首先请求调试上下文,这是在GLFW上完成的方式。

glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, true);  
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);

我们向OpenGL传递一个错误日志函数回调(类似于GLFW的输入回调),在回调函数中,我们可以自由地处理我们认为合适的OpenGL错误数据。

void APIENTRY glDebugOutput(GLenum source, GLenum type, unsigned int id, GLenum severity, 
                        GLsizei length, const char *message, const void *userParam);

相关问题