什么时候OpenGL完成函数指针?

Nic*_*las 12 c c++ opengl opengl-es

OpenGL有许多直接指针的函数.其中一些从这些指针中读取数据,另一些则将数据写入这些指针.

但是,OpenGL函数通常不会立即执行.通常,当您绘制某些内容时,绘图需要一段时间才能完成.

那么我怎么知道OpenGL何时完成了我给它的指针呢?

Nic*_*las 12

除了下面提到的例外,所有OpenGL函数都将使用在函数返回时给出的任何指针完成.因此glReadPixels,在返回时将完成所有像素读取和格式转换.这就是异步像素传输对于读取操作非常重要的原因.它允许OpenGL 这样做,不与GPU同步.

此规则的唯一例外是以"指针"一词结尾的每个函数.像glVertexAttribPointer,glTexCoordPointer等等.当您使用具有这些功能的客户端内存(核心配置文件OpenGL 3.2+中不再合法)时,这些函数会存储指向该内存的指针.因此,只要您打算使用这些顶点属性进行渲染,就必须确保此指针有效.

在使用客户端内存进行每次渲染调用之后,OpenGL要求在渲染函数返回时实现已从客户端内存中完成读取.所以你可以调用glDrawArrays,然后删除有问题的指针.只要你在改变那些指针之前不再进行另一次抽签,你就没事了.这意味着OpenGL必须在渲染调用返回时复制出所有相关的顶点数据(使用缓冲区对象的原因之一更快).