2012-07-05 172 views
2

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

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

所以,我不认为数据指出有可靠的读取,以创建我的新缓冲区。我知道GL核心中还有其他功能可以让您复制缓冲区数据,但这些功能似乎也不存在。

任何人都可以验证这是不可能在ES 2.0或给一些方法来实现缓冲区读取?我目前的解决方案是保留所有数据的影子副本,这显然不理想。

回答

0

我认为在主内存中保留GPU数据的影子副本要比从GPU内存读取这些数据要好得多。无论如何,建议在使用glMapBuffer之前丢弃先前的数据。阅读this了解更多信息(它不会给你直接的答案,但它可能是有用的)。

+0

感谢您的建议 - 当您特别请求(尽管没有选项)只写访问时,对于从映射缓冲区读取数据的感觉是一样的。然而,我不认为这个链接是非常相关的,因为我正在寻找一种方法来阅读或复制一个VBO,并且这个帖子与各种方式的写作速度有关。 –

相关问题