我正在尝试制作一个OpenGL渲染器,将各种形状混合成一个大网格,并将它们存储在两个VBO中,一个GL_ARRAY_BUFFER和一个GL_ELEMENT_ARRAY_BUFFER。我的目标是在OpenGL ES 2和OpenGL 3.2核心上工作。我目前正在尝试找到处理从此网格中删除形状的最佳方法,我当前的方法是定期重建整个事物,可能在后台线程上。
问题在于,为了重建新的干净网格,我需要访问使用glMapBuffer写入缓冲区的顶点/索引。根据{{3}}的文档,WRITE_ONLY_OES是'access'唯一可接受的参数。
所以,我不认为指向那里的数据是可靠的,以便创建我的新缓冲区。我知道GL Core中还有其他功能允许您复制缓冲区数据,但这些似乎也缺失了。
任何人都可以验证这在ES 2.0上是不可能的,还是提供一些实现缓冲区读取的方法?我目前的解决方案是保留所有数据的影子副本,这显然不太理想。
答案 0 :(得分:0)
我认为在主内存中保留GPU数据的卷影副本比从GPU内存中读取这些数据要好得多。无论如何,建议在使用glMapBuffer之前丢弃以前的数据。阅读this了解更多信息(它不会直接回答您的问题,但可能会有用)。