【问题标题】:android and VBO use安卓和VBO使用
【发布时间】:2014-01-12 21:31:26
【问题描述】:

有一个奇特的 GPU,称为 Vivante GC800,只支持客户端阵列,根本不支持 VBO(顺便说一句,这就是为什么 MALI400 被认为与游戏“更兼容”的原因)。对我来说,这很有趣:如果您查看http://dx.com,您会发现提供了大量只有 512MB 内存的 android 4.1+ 设备。这可能意味着 GPU 与操作系统共享内存。那么还有什么理由,为什么要使用 VBO(在任何 GPU 下,在 android 下),因为它可能不是人们倾向于认为的“快速内存”?

【问题讨论】:

    标签: android opengl-es-2.0


    【解决方案1】:

    我在某处读到,90% 的 Android 游戏玩家都选择三星 Galaxy……

    我认为后者的最新版本(游戏玩家实际用来玩游戏的东西)拥有真正的图形内存,因此使用 VBO 是非常值得的,即使假设 90% 的 (Android) 设备不支持它(我怀疑)。 如果您考虑将游戏移植到 iOS,这也是值得的。 如果您希望您的代码在 3 年后表现良好,是否值得这样做? 3年不是很长的时间......

    ""提供了大量的 android 4.1+ 设备,它们只有 512MB 内存。这可能意味着,GPU 与操作系统共享内存""

    ……这是一个未经证实的假设:)

    【讨论】:

    • 我认为不支持 VBO 并不是很多,而是我相信分配它们只是从系统内存的剩余部分中获取内存。当然,GC 800 是个例外,这里没有完全支持(即,甚至没有“模拟”)。
    • @user1095108 将数据加载到 VBO 后,您可以释放它以在客户端回收内存,因此您不会带走任何东西。你的问题是,“还有什么理由使用 VBO 吗?”所以我试着回答这个问题……如果使用 VBO 会“从所剩无几”中获取记忆,那将是不使用 VBO 的原因。然而事实并非如此。
    • 您忘记了客户端数组的一个好处——轻松修改它们的可能性。因此,如果不为 VBO 使用专用内存,则使用 VBO 有一个缺点。对于纹理也是如此,它也可以驻留在客户端。
    • 哦,还有一件事,这 10% 仍然可以覆盖数百万玩家。
    • @user1095108 我没有忘记任何事情,也许你应该问'什么时候最好不要使用 VBO?反而。这是一个问答而不是辩论的地方……你写 OpenGL-ES 代码吗?你在实际设备上运行它吗? VBO 的好处以及何时使用它们对于需要它们的人来说是显而易见的......
    【解决方案2】:

    我可能认为每种 GPU 类型都有自己处理缓冲内存的方式,对于 iOS(PowerVR 系列),文档清楚地说明了好处。

    也许要了解Android,我们可以看看其他阵营:

    发件人:OpenGL ES Programming Guide for iOS

    此代码有效,但效率低下。每次调用 DrawModel 时,索引和顶点数据都会被复制到 OpenGL ES,并传输到图形硬件。如果顶点数据在调用之间没有改变,这些不必要的副本会影响性能。为避免不必要的复制,您的应用程序应将其顶点数据存储在顶点缓冲区对象 (VBO) 中。由于 OpenGL ES 拥有顶点缓冲区对象的内存,它可以将缓冲区存储在图形硬件更容易访问的内存中,或者将数据预处理为图形硬件的首选格式。

    TL:DR:查看 GPU 制造商的建议。

    【讨论】:

    • 曾经有这些针对 ipod touch 和 iphone 的基准测试,其中测试了 VBO 与非 VBO 代码。我记得测试出来了,使用 VBO 没有任何好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2013-08-23
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多