glEnableClientState和OpenGL的glDisableClientState

时间:2011-06-13 21:51:08

标签: opengl

OpenGL中glEnableClientStateglDisableClientState的含义是什么? 到目前为止,我发现这些功能是启用或禁用某些客户端功能。

嗯,这里的客户端或服务器究竟是什么? 我正在PC上运行我的OpenGL程序,所以这是指什么? 为什么我们甚至需要禁用某些功能? ...更有趣的是关于某种与数组相关的东西?

整张照片对我来说非常灰暗。

4 个答案:

答案 0 :(得分:13)

原始术语源于X11表示法,其中服务器是实际的图形显示系统:

  • 提供对某种显示设备的访问的服务器程序

  • 连接服务器的客户端在其提供的显示设备上绘图

glEnableClientStateglDisableClientState设置客户端部分的状态。 Vertex Arrays过去位于客户端进程内存中,因此使用顶点数组进行绘制是客户端本地进程。

今天我们有缓冲对象,它将数据放在服务器内存中,使顶点数组的整个客户端术语具有违反直觉。通过常用的glEnable / glDisable函数放弃客户端状态并启用/禁用顶点数组是有意义的,就像我们使用帧缓冲对象和纹理一样。

答案 1 :(得分:7)

如果通过将缓冲区传递给OpenGL(glVertexPointer()等)而不是直接调用(glVertex3f())来绘制图形,则需要告诉OpenGL要使用哪些缓冲区。

因此,不是调用glVertex和glNormal,而是创建缓冲区,绑定它们,并使用glVertexPointer和glNormalPointer将OpenGL指向您的数据。然后调用glDrawElements(或类似)将使用这些缓冲区进行绘图。但是,另一个必需的步骤是告诉OpenGL驱动程序您实际想要使用哪个缓冲区,即glEnableClientState()进来。

这一切都非常手工波浪。您需要阅读顶点缓冲区对象并尝试它们。

答案 2 :(得分:4)

在OpenGL术语中,客户端是您的应用程序,而我认为服务器是图形卡(或驱动程序)。唯一的客户端功能是顶点数组,因为它们存储在CPU内存中,因此存储在客户端,或者更具体地说,它们由应用程序而不是驱动程序控制(分配和释放)。

顶点缓冲区对象是另一回事。它们可以用作顶点数组,但是由驱动程序控制,因此在使用缓冲区时,“客户端状态”这个词不再那么有意义了。

答案 3 :(得分:2)

glEnableClientStateglDisableClientState主要用于管理Vertex ArraysVertex Buffer Objects