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