我最近发现,在调用wglGetProcAddress(...)
和glBegin(...)
之间调用glEnd()
会产生GL_INVALID_OPERATION
。显然,(来自the most technical source I could find):
MS opengl32.dll库显然从中调用了glFlush wglGetProcAddress()。如果我们在glBegin / End()里面,glFlush 将调度到_mesa_generic_nop(),我们将生成一个 GL_INVALID_OPERATION错误。
生成的函数指针为空,但是再次使用GetProcAddress(...)
生成一个有效的函数指针,程序似乎继续愉快。
我的问题:忽略错误(即glGetError()
)好吗?
编辑:我为什么要这样做?加载OpenGL函数是开销,并且懒惰地执行它是对较慢硬件的性能问题(这种方法例如在glbinding中使用)。如果您有多个上下文并且您只希望在每个上下文中使用某个功能的子集,或者您经常创建/删除上下文,那么这是一个大问题。我的代码通过动态支持的存储来实现每个API函数,因此卸载的函数也节省了空间,这对于较小的系统很重要,并且在许多上下文中变得很重要。
答案 0 :(得分:1)
我无法判断您是否发现了未定义的行为或仅仅是错误实现的规范。在任何一种情况下,这些东西都可能很容易破坏未来版本的库,我认为你应该找到另一种获取OpenGL函数指针的方法,而不是绘制图形的过程。