我是一名桌面 GL 开发人员,我开始探索移动世界。
为了避免误解或欢迎但琐碎的答复,我可以谦虚地说我非常了解 GL 和 GL|ES 机器。
一个简短的问题是:如果我们在共享内存架构中使用 GL|ES 2.0,那么在客户端阵列上使用 VBO 的意义何在?
更详细:
顶点缓冲区是原始内存块,驱动程序无法以任何方式优化任何内容,因为访问模式取决于:1)应用程序如何配置顶点数据布局,2)顶点着色器如何使用缓冲区内容,以及 3)我们可以有很多顶点着色器以不同的方式运行,并以不同的方式获取相同的缓冲区。
对齐:单个 VBO 存储可以从最适合底层 GL 系统的地址开始;如果我只是强制(例如,尊重对齐最佳实践)客户端阵列分配到这些边界怎么办?
基于图块的渲染与即时模式架构不应该发挥作用:据我了解,这与我的问题(即内存访问)无关。
我知道使用 VBO 可以让您的代码在未来的平台/硬件中运行得更好/更快,而无需修改它,但这不是这个问题的重点。
此外,我还意识到在共享内存架构中使用 VBO 会使内存使用量翻倍(如果您出于某种原因必须保留顶点数据供您使用),并且会花费您数据的 memcpy。
与交错的顶点数组一样,VBO 的使用在开发人员的论坛/博客/official_technotes 中得到了很大的“炒作”,但没有任何数据支持这些声明(即基准测试)。
- 在共享内存架构上使用 VBO 是否值得?
- 客户端阵列运行良好吗?
- 您对此有何看法/了解?