OpenGL顶点数组所需版本

4
我已经成功地使用VBO高效地编写了我的程序,但是我得知除了一个人之外,我认识的所有人的电脑都不支持OpenGL 3.0。当他们运行我制作的程序时,他们只能得到没有深度的平面纹理,因为他们的显卡不支持VBO和我正在使用的Shader语言。
现在,我正在为旧计算机(OpenGL 3.0之前的支持)编写支持代码。我不想在完全没有必要的情况下编写立即模式的绘图,所以我正在恢复顶点数组。
需要哪个版本的OpenGL才能支持顶点数组?
我似乎无法找到这个信息。
扩展注册表: http://www.opengl.org/registry/ 仅澄清一下,我说的是客户端顶点数组,不要与服务器端顶点数组对象(VAO)或顶点缓冲区对象(VBO)混淆。

1
如果它们不支持缓冲区对象(即使是英特尔糟糕的1.4版本也支持),很可能它们的OpenGL实现也存在高度的漏洞。因此,如果您无法在硬件上进行实际测试,则支持这些卡的难度很大。 - Nicol Bolas
非常正确。这就是为什么只有在不支持VBO时才会使用此回退方法。 - CoderWalker
2个回答

8

我将在这里进行比较全面的介绍。

自OpenGL 1.1以来,基本顶点数组API已经成为核心功能。

OpenGL 1.1引入了:

  • glDrawArraysglDrawElements(以及glArrayElement,但实际上没有人应该使用它)用于渲染。
  • glVertexPointerglTexCoordPointerglNormalPointerglColorPointer用于“属性”。请注意,您只能获得一个纹理坐标指针。

OpenGL 1.2引入了:

  • glDrawRangeElements,可在某些驱动程序上提高性能。现在不太有用,但如果您正在编写旧硬件的代码,请查看它。

OpenGL 1.3引入了:

  • glActiveTexture,从而允许GL_MAX_TEXTURE_UNITSglTexCoordPointer

OpenGL 1.4引入了:

  • glMultiDrawArraysglMultiDrawElements
  • glSecondaryColorPointerglFogCoordPointer

OpenGL 1.5引入了:

  • 缓冲区对象。

OpenGL 2.0引入了:

  • glVertexAttribPointer用于通用着色器属性。可与客户端顶点数组一起使用。

2
太好了!毕竟不需要立即模式。如果他们的计算机不支持OpenGL 1.1,我相信他们不应该运行游戏。 - CoderWalker
这段历史非常精彩,我已经花了一整天的时间研究OpenGL中顶点提交的历史,这比很多维基百科文章都要好。 - user755921

5

我在OpenGL规范中发现的关于顶点数组最早的提及是在OpenGL 1.1中(第2.8节顶点数组,第21页)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接