【发布时间】:2016-08-19 16:23:21
【问题描述】:
如果我加载 3.1 或更低版本的 GL 上下文,而不是 3.2 或更高版本(我正试图达到 4.4),OpenGL 渲染(Windows 操作系统)正在发生,我遇到了一个难以调试的问题,OpenGL 抛出glDrawArraysEXT 上的一个不起眼的 INVALID_OPERATION 错误。
我认为问题可能在于调用的一个或多个函数是“旧”版本,使用 GL 1.0/1.1 函数而不是可能需要的等效 3.0+ 扩展方法。例如,我将 glDrawArrays 替换为 glDrawArraysEXT 修复了早期的错误,但也许还有更多类似的功能需要更新版本?
所以我的问题是,我怎么知道我是否打算对我的任何其他功能使用“替换”扩展方法?例如我的假设是 glViewport 没有扩展方法(因为我试图加载它并且找不到它),所以使用核心版本就可以了。但是如何在不使用扩展方法的情况下检查我正在调用的所有函数呢?
如果有帮助,这里是我当前调用的 OpenGL 1.0/1.1 函数列表:
- gl清除
- glClearColor
- gl 视口
- glGetError
- glEnable/glDisable
- glBlendFunc
- glBindTexture
- glGenTextures
- glGetTexImage
- glTexParameteri
- glTexImage2D
- glGetString
这些是否有我应该使用的扩展方法,我应该如何自己找到它?
【问题讨论】:
-
除了
glGenTextures,都是GL 1.0。直到 GL 1.1 才添加纹理对象。但是与它们相关的状态是存在的,这就是为什么glTexParameteri是 GL 1.0。另外,您的意思是API; ABI 与较低级别的事情有关,例如如何将变量传递给 CPU 上的函数。 -
是的,1.1 是一个错字,但已更正。我从这里拿了 ABI:stackoverflow.com/questions/27873784/…
-
我认为 GL 函数甚至不是这里的根本原因。您很可能在绘图调用时收到
GL_INVALID_OPERATION错误,因为您的 opengl 代码与 OpenGL 核心配置文件不兼容,即在绘图调用时您没有 VAO 或没有绑定着色器。 -
@derhass 实际上,我缺少上下文标志上的核心配置文件位,以及配置文件掩码上的前向兼容位。
标签: opengl