什么是glEnable和glEnableClientState之间的区别?每次我需要设置/取消模式时,我都必须查看参考以了解哪个接受它。是否有一般规则说明哪些模式属于哪个?
glEnableClientState
和glDisableClientState
的唯一用途是启用/禁用内置的固定功能属性数组(如GL_VERTEX_ARRAY
,GL_NORMAL_ARRAY
,...)。对于所有其他状态,您需要使用glEnable
和glDisable
(或glEnableVertexAttribArray
和glDisableVertexAttribArray
用于通用顶点着色器属性)。glEnable
用于设置OpenGL ARB决定代表内部驱动程序状态的一组状态。glEnableClientState
用于表示您更直接控制的信息的状态。唯一存在的客户端状态是旧顶点数组状态的启用/禁用。而这些被glEnable/DisableVertexAttribArray
所取代。
实际上,区分这两者是毫无意义的,因为驱动程序仍然管理所有这些状态。
glEnable
是服务器端的,而 glEnableClientState
是客户端的。可以将服务器端想象成中央处理器(CPU),而客户端则是图形处理器(GPU)。总的来说,只有顶点数组是客户端的。
glVertexPointer
等函数中设置一个指向 CPU 内存的指针)。性能提升不仅是因为不从 CPU 复制,而且不为每个顶点调用驱动程序回调。但你是对的,VBO(现代使用数组的方式)允许你将数组存储在 GPU 内存中。但启用数组的旧方法glEnableClientState
已经被保留。 - Christian RauglEnableClientState
一起)。而新的通用着色器属性glEnableVertexAttribArray
不再有客户端或服务器的概念。 - Christian Rau