如果程序中使用了GLEW库来创建OpenGL程序,即使只是简单地清除窗口程序,用Nsight调试也会报错API错误;
这是因为GLEW有一个历史悠久的bug,调用glewInit()会设置一个GL_INVALID_ENUM的错误标记,所以第一次调用glGetError永远会猝不及防地给你返回一个错误代码,导致Nsight调试时出现API错误;
解决方案:
在调用glewInit()后,仅仅调用glGetError(),而不要使用_Assert(glGetError());这是因为glGetError一旦被调用,它会清除所有的错误标记(在分布式系统上只会清除一个)。通过这样将会清除掉glewInit()函数调用产生的Bug;
如果没有使用Glad加载OpenGL函数,需要在调用glewInit之后立即调用glGetError消除这个标记:
如果程序中使用了GLAD加载了函数指针地址,需要在调用之后立即使用glGetError消除错误;
修改后Nsight调试如下: