我是桌面GL开发人员,我开始探索移动世界。
为了避免误解,或者欢迎但是微不足道的回复,我可以谦卑地说我非常了解GL和GL | ES机器。
简短的问题是:如果我们在共享内存架构中使用GL | ES 2.0,那么对客户端阵列使用VBO有什么意义呢?
更详细:
顶点缓冲区是内存的原始块,驱动程序无法以任何方式优化任何内容,因为访问模式取决于:1)应用程序如何配置顶点数据布局,2)如何顶点着色器消耗缓冲区内容,3)我们可以使用不同的方式运行大量的顶点着色器,并以不同的方式提供相同的缓冲区。
对齐:单个VBO存储可以从对底层GL系统最佳的地址开始;如果我只是强制(例如,尊重对齐最佳实践)客户端数组分配到这些边界怎么办?
基于平铺的渲染与立即模式架构不应该发挥作用:根据我的理解,这与我的问题(即内存访问)无关。
据我所知,使用VBO可以让代码在 future 平台/硬件中更好/更快地运行而无需修改它,但这不是这个问题的重点。
除此之外,我还意识到在共享内存架构中使用VBO会使内存使用量增加一倍(如果由于某种原因,您必须保留顶点数据),并且需要花费大量数据。
与交错的顶点数组一样,VBO的使用在开发者论坛/博客/ official_technotes中得到了很大的“炒作”,没有任何数据支持这些语句(即基准)。
答案 0 :(得分:3)
我可以报告使用VBO在Android设备上存储顶点数据给我带来零性能提升。在Adreno,Mali400和PowerVR GPU上尝试过。但是,考虑到它是OpenGL ES的最佳实践,我们使用VBO。
您可以在我们的article(顶点缓冲区对象段落)中找到有关此内容的说明。
答案 1 :(得分:0)
根据这份报告,即使保持SMA不变,它也取决于OpenGL实现(某些VBO工作是在CPU上秘密完成)和VBO的大小:
http://sarofax.wordpress.com/2011/07/10/vbo-vertex-buffer-object-limitations-on-ios-devices/
答案 2 :(得分:-1)
我会告诉你,我对iOS平台的了解。 VBO确实提高了你的表现。