glEnableClientState和glEnableVertexAttribArray

时间:2012-01-11 22:53:41

标签: opengl

后者是否会弃用前者?

我正在编写我想在着色器2.0硬件上工作的代码,但我想使用更新的编程约定,例如VAO。

所以我一直使用glVertexAttribPointer函数代替glVertexPointerglNormalPointerglColorPointer等等。

似乎我们已经到了服务器 - 客户端概念不是特别相关的点(编辑:我的意思是它适用于这些缓冲区指针的切换状态)。但我想知道旧En/DisableClientState实际上做了什么,以及它与glEnableVertexAttribArray实际上做了什么有关。

我也没有5代以前的任何图形硬件,但我的软件的某些用户肯定可能。我怎样才能防止我的代码无法在Radeon 9700上编译? (虽然我希望如果用户拥有最新的驱动程序,它可能会支持新的东西)

1 个答案:

答案 0 :(得分:9)

  

似乎我们已经到了服务器 - 客户端概念不是......特别相关的点

实际上它非常相关。整个Buffer Objects术语是服务器和客户端。缓冲区是服务器端,客户端只发出引用服务器端缓冲区的绘图命令。

用glEnableVertexAttribArray替换glEnableClientState的主要原因是,因为OpenGL-3总是使用顶点数组(不再是立即模式),并且数据是客户端或服务器端的区别是由绑定状态各种缓冲对象槽。如果绑定了缓冲区对象0,则数据是客户端,如果绑定缓冲区对象非零,则它是服务器端。