OpenGL中glEnableClientState
和glDisableClientState
的含义是什么?
到目前为止,我发现这些功能是启用或禁用某些客户端功能。
嗯,这里的客户端或服务器究竟是什么? 我正在PC上运行我的OpenGL程序,所以这是指什么? 为什么我们甚至需要禁用某些功能? ...更有趣的是关于某种与数组相关的东西?
整张照片对我来说非常灰暗。
答案 0 :(得分:13)
原始术语源于X11表示法,其中服务器是实际的图形显示系统:
和
glEnableClientState
和glDisableClientState
设置客户端部分的状态。 Vertex Arrays过去位于客户端进程内存中,因此使用顶点数组进行绘制是客户端本地进程。
今天我们有缓冲对象,它将数据放在服务器内存中,使顶点数组的整个客户端术语具有违反直觉。通过常用的glEnable
/ glDisable
函数放弃客户端状态并启用/禁用顶点数组是有意义的,就像我们使用帧缓冲对象和纹理一样。
答案 1 :(得分:7)
如果通过将缓冲区传递给OpenGL(glVertexPointer()等)而不是直接调用(glVertex3f())来绘制图形,则需要告诉OpenGL要使用哪些缓冲区。
因此,不是调用glVertex和glNormal,而是创建缓冲区,绑定它们,并使用glVertexPointer和glNormalPointer将OpenGL指向您的数据。然后调用glDrawElements(或类似)将使用这些缓冲区进行绘图。但是,另一个必需的步骤是告诉OpenGL驱动程序您实际想要使用哪个缓冲区,即glEnableClientState()进来。
这一切都非常手工波浪。您需要阅读顶点缓冲区对象并尝试它们。
答案 2 :(得分:4)
在OpenGL术语中,客户端是您的应用程序,而我认为服务器是图形卡(或驱动程序)。唯一的客户端功能是顶点数组,因为它们存储在CPU内存中,因此存储在客户端,或者更具体地说,它们由应用程序而不是驱动程序控制(分配和释放)。
顶点缓冲区对象是另一回事。它们可以用作顶点数组,但是由驱动程序控制,因此在使用缓冲区时,“客户端状态”这个词不再那么有意义了。
答案 3 :(得分:2)
glEnableClientState
和glDisableClientState
主要用于管理Vertex Arrays和Vertex Buffer Objects。