【发布时间】:2011-05-10 15:06:26
【问题描述】:
我的应用程序将我的所有几何数据写入 VBO 以提高性能,但我需要在程序执行期间读取顶点数据以进行射线三角形相交测试。我注意到有一个函数应该映射到 VBO 数据的位置,glMapBufferOES,但它看起来只支持 GL_READ_ONLY。有谁知道绑定后在 iPhone 上读回 VBO 数据的方法?
【问题讨论】:
-
我从来没有见过这样的功能。如果 VBO 已加载到 GPU 内存中并被驱动程序丢弃,则读取 VBO 的成本会很高。你有多少个顶点?
-
300 万个顶点,但分布在 950 多个模型上。我遇到的问题是,如果我上传我的 VBO 以提高性能,那么我在 iPhone 和 iPad 上没有足够的 RAM 来将顶点也保存在本地数组中。显示我的大对象的唯一方法是只有一个顶点副本。如果我不做VBO,那么渲染速度是不能接受的。每次执行检查时,我都使用颜色 ID 仅对单个模型进行射线三角形测试,这只是偶尔。
-
iOS 设备的基于 tile 的延迟渲染器上的任何读取操作都会非常慢,因为它会停止渲染管道(这样做可能会使帧速率降低 20% 以上)。此外,当 VBO 仍存在于 GPU 上时,您不会通过重新加载几何图形而导致内存峰值过高吗?
-
我假设顶点不是静态的,你不能对它们进行内存映射。是这样吗?
-
顶点是静态的,我不需要在执行过程中修改它们,只需将值读回来,这样我就可以进行交叉测试了。我将如何进行顶点的内存映射?