我是一名桌面GL开发人员,现在开始探索移动领域。
为了避免误解或者单纯的回复,我谨慎地说我对GL和GL | ES机制非常清楚。
简短的问题是:如果我们在共享内存架构中使用GL | ES 2.0,使用VBO相对于客户端数组有什么意义?
更详细地说:
顶点缓冲区是原始内存块,驱动程序无法以任何方式优化它,因为访问模式取决于:1)应用程序如何配置顶点数据布局,2)顶点着色器如何使用缓冲区内容,3)我们可以有很多操作方式不同的顶点着色器,并且以不同的方式引用相同的缓冲区。
对齐:单个VBO存储可以从最佳的底层GL系统地址开始; 如果我只是强制(例如,遵守最佳实践的对齐)客户端数组分配到这些边界上怎么办?
瓦片渲染与立即模式架构不应该起作用:据我理解,这与我的问题(即内存访问)无关。
我知道使用VBO可以让你的代码在未来的平台/硬件上运行得更好/更快,而不需要修改它,但这不是本问题的重点。
另外,我也意识到,在共享内存架构中使用VBO会使内存使用量加倍(如果您出于某种原因需要保留顶点数据),并且它会花费您将数据复制到VBO中的时间。
与交错的顶点数组一样,VBO的使用在开发人员论坛/博客/官方技术说明中被大肆宣传,而没有任何支持这些说法的数据(即基准测试)。
- VBO在共享内存架构中值得使用吗?
- 客户端数组工作良好吗?
- 您对此有何看法/了解?