1

OpenGL 3.0 规范说:

E.1 OpenGL 3.0 的配置文件和不推荐使用的功能

...

客户端顶点数组 - 所有顶点数组属性指针必须引用缓冲区对象(第 2.9.2 节)。默认的顶点数组对象(名称为零)也已弃用。在未绑定缓冲区对象或未绑定顶点数组对象时调用VertexAttribPointer会产生 INVALID_OPERATION错误,当未绑定顶点数组对象时调用任何数组绘制命令也会产生错误。

glEnableVertexAttribArray参考页面说:

GL_INVALID_OPERATION如果没有绑定顶点数组对象,则由glEnableVertexAttribArrayglDisableVertexAttribArray生成。

我听到的消息是,在 OpenGL 2.x 和 OpenGL 3.x/3.2+ 之间完全可移植的综合顶点数组代码是不可能的,因为 2.x 不能使用 VAO(API 表面可以严格执行——感谢 GLAD!),并且 3.x 必须使用 VAO(这...某些驱动程序可能会强制执行?)

在我看来,健壮的代码必须在某些时候在专用的 2.x 和 3.x 代码路径(在运行时检测到)之间分支。这是真的?

4

1 回答 1

1

当您使用兼容性配置文件OpenGL Context时,您可以运行所有先前 OpenGL 版本的代码。顶点数组对象 0 是有效的,您可以使用固定函数属性、立即模式(glBegin/glEnd序列)甚至将它们混合在一起。
比较OpenGL 4.6 API Core Profile SpecificationOpenGL 4.6 API Compatibility Profile Specification

所有 OpenGL 版本的规范都可以在Khronos OpenGL 注册表中找到。

于 2020-07-01T20:43:41.153 回答