glEnableClientState和glEnableVertexAttribArray

Ste*_* Lu 7 opengl

后者是否会弃用前者?

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

所以,我一直在使用该glVertexAttribPointer功能来代替glVertexPointer,glNormalPointer,glColorPointer等等.

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

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

dat*_*olf 9

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

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

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