2

我正在尝试制作一个 OpenGL 渲染器,它将各种形状混合成一个大网格并将它们存储在两个 VBO 中,一个 GL_ARRAY_BUFFER 和一个 GL_ELEMENT_ARRAY_BUFFER。我的目标是让它同时在 OpenGL ES 2 和 OpenGL 3.2 核心上工作。我目前正在尝试找到处理从该网格中删除形状的最佳方法,我目前的方法是定期重建整个事物,可能在后台线程上。

问题是,为了重建新的干净的网格,我需要使用 glMapBuffer 访问已写入缓冲区的顶点/索引。根据 GL_OES_mapbuffer 的文档, WRITE_ONLY_OES是“访问”唯一可接受的参数。

所以,我不认为指向那里的数据可以可靠地读取以创建我的新缓冲区。我知道 GL Core 中还有其他功能可以让您复制缓冲区数据,但这些似乎也不见了。

谁能验证这在 ES 2.0 上是不可能的,或者给出一些实现缓冲区读取的方法?我目前的解决方案是保留所有数据的卷影副本,这显然并不理想。

4

1 回答 1

0

我认为在主内存中保留 GPU 数据的影子副本比从 GPU 内存中读取这些数据要好得多。无论如何,建议在使用 glMapBuffer 之前丢弃以前的数据。阅读内容以获取更多信息(它不会直接回答您的问题,但可能会有用)。

于 2012-07-06T10:29:06.693 回答