首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有许多重复的顶点时,glDrawElements()比glDrawArrays()更有效吗?

当有许多重复的顶点时,glDrawElements()比glDrawArrays()更有效吗?
EN

Stack Overflow用户
提问于 2010-01-16 00:40:44
回答 2查看 5.3K关注 0票数 9

我正在尝试从我的iPhone OpenGL ES应用程序中获得一些性能提升。根据Instruments的数据,我的磁贴利用率大部分时间接近100%,FPS约为24%。我想把我的FPS提高到30以上。我可以通过从GL_FLOAT转换到GL_SHORT来实现这一点,但目前这给我带来了一些相当令人生畏的技术问题。我宁可不去那里。

因此,我正在考虑从glDrawArrays()切换到glDrawElements()。我有由708个顶点组成的35个网格,但其中许多顶点是在面间共享的。我是纹理贴图,但网格的颜色大部分都是均匀的。需要特殊纹理处理的面将保留原样。

假设我可以将顶点的数量减半。也就是说,我还以一种对iPhone有意义的方式组织了我的几何体:比如说,使用想象力技术PVRTTriStrip工具。忽略索引数组的少量额外内存,这意味着我大致将内存带宽减少了一半,因此我应该会看到相当不错的性能提升。

这是真的吗,还是我漏掉了什么或误解了什么?非常感谢您的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-16 07:10:11

如果有人感兴趣,我继续尝试,没有使用PVRTTriStrip工具部分。所有测试都是在iPhone 3G上完成的。我能够将我的顶点从708缩小到113。因为我不到255,所以我使用GLubyte作为我的索引类型。所以,我的回答是:

35 * (708 * 32) = ~774K

至:

35 * (113 * 32 + 708 * 1) = ~148K

这使我的总内存带宽减少到原来的20%以下。我的FPS提高到了~34。所以,我看到FPS提高了大约42%。总体而言,我很高兴。我认为还有更多的收获,但我现在有更重要的事情要做。

此外,我过滤掉了一堆退化的三角形(不是有用的那种),将索引计数从708降至522。由此,我看到从我看到的~34 FPS增加到~40 FPS。

票数 17
EN

Stack Overflow用户

发布于 2010-01-16 07:14:06

如果你在工具(like I was)中达到100%的拖尾利用率,你就会受到几何体大小的限制。在我试图提高性能的所有事情中,我只注意到当我减小几何尺寸时帧率有一个显着的提升。所以,是的,如果你能从发送中消除一些顶点,你应该会看到性能的提升。

即使你说这很难做到,我还是强烈建议你从GL_FLOAT转换到GL_SHORTs,因为你会看到渲染速度有很大的提高。我在我的应用程序中做到了这一点,对于我得到的那种返回来说,实现它并不是太麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2073216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档