10

我是一名桌面 GL 开发人员,我开始探索移动世界。

为了避免误解或欢迎但琐碎的答复,我可以谦虚地说我非常了解 GL 和 GL|ES 机器。

一个简短的问题是:如果我们在共享内存架构中使用 GL|ES 2.0,那么在客户端阵列上使用 VBO 的意义何在?

更详细:

  • 顶点缓冲区是原始内存块,驱动程序无法以任何方式优化任何内容,因为访问模式取决于:1)应用程序如何配置顶点数据布局,2)顶点着色器如何使用缓冲区内容,以及 3)我们可以有很多顶点着色器以不同的方式运行,并以不同的方式获取相同的缓冲区。

  • 对齐:单个 VBO 存储可以从最适合底层 GL 系统的地址开始;如果我只是强制(例如,尊重对齐最佳实践)客户端阵列分配到这些边界怎么办?

  • 基于图块的渲染与即时模式架构不应该发挥作用:据我了解,这与我的问题(即内存访问)无关。

我知道使用 VBO 可以让您的代码在未来的平台/硬件中运行得更好/更快,而无需修改它,但这不是这个问题的重点。

此外,我还意识到在共享内存架构中使用 VBO 会使内存使用量翻倍(如果您出于某种原因必须保留顶点数据供您使用),并且会花费您数据的 memcpy。

与交错的顶点数组一样,VBO 的使用在开发人员的论坛/博客/official_technotes 中得到了很大的“炒作”,但没有任何数据支持这些声明(即基准测试)。

  • 在共享内存架构上使用 VBO 是否值得?
  • 客户端阵列运行良好吗?
  • 您对此有何看法/了解?
4

3 回答 3

3

我可以报告说,使用 VBO 在 Android 设备上存储顶点数据给了我零性能提升。在 Adreno、Mali400 和 PowerVR GPU 上进行了尝试。但是,我们使用 VBO,因为它是 OpenGL ES 的最佳实践。

您可以在我们的文章顶点缓冲区对象段落)中找到有关此内容的说明。

于 2012-10-25T11:24:15.933 回答
0

根据这份报告,即使保持 SMA 不变,它也取决于 OpenGL 实现(一些 VBO 工作在 CPU 上秘密完成)和 VBO 的大小:

http://sarofax.wordpress.com/2011/07/10/vbo-vertex-buffer-object-limitations-on-ios-devices/

于 2013-04-23T02:59:53.160 回答
-1

我会告诉你,我对 iOS 平台的了解。VBO 确实可以提高你的表现。

  1. VBO 是完美的,如果你有一个静态几何体——一旦复制,每次绘制调用都没有额外的开销。CA 会在每次绘制调用时将您的数据从客户端内存复制到“gpu 内存”。如果您忘记了它,它可能会重新调整数据。
  2. VBO 可以通过 glMapBuffer 映射到 gpu - 这是一个异步操作,这意味着它几乎没有开销,但您应该记住 - 当您映射\取消映射缓冲区时,最好在取消映射操作后 2 帧使用它 - 以避免同步
  3. Apple 工程师宣称,VBO 将比 SGX 硬件上的 CA 具有更好的性能,即使您每帧都重新上传它——我不知道细节。
  4. VBO 是最佳实践。CA 已弃用。更好地跟上现代趋势并尽可能多地保持跨平台
于 2012-10-26T10:22:19.487 回答