HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了glDrawElements在iOS上大量使用cpu大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
硬件:iPad2
软件:OpenGL ES 2.0 C.

glDrawElements似乎占用了大约25%的cpu.使cpu 18ms和GPU每帧10ms.

当我不使用索引缓冲区并使用glDrawArrays时,它会加速并且glDrawArrays大麦会显示在探查器上.其他一切都是一样的,glDrawArrays有更多的顶点因为我必须在没有索引缓冲区的情况下复制VBO中的顶点.

至今:

>两种方法之间几乎相同的状态变化量
>顶点结构是两个浮点数(8个字节).
> indexbuffer是16bit(也试过32位)
>两个缓冲区的GL_SATIC_DRAW
>加载后缓冲区不会改变
>相同的VBO和indexbuffer每帧渲染多次,具有不同的偏移和大小
>没有opengl错误

所以看起来它正在做某种类型的软件回退.但我无法弄清楚会导致OpenGL回退的原因.

解决方法

有一些事情会立即浮现在脑海中,这可能会影响您描述的速度.

例如,许多命令被动地发出以减少总线传输的数量.它们排队等待下一批转移.状态更改,纹理更改和类似命令都会累积.绘制命令可能在一种情况下触发更大的转移而在另一种情况下不触发,或者您在一种情况下触发更频繁的转移.另一方面,您的特定模型可能会更好地组织一个或另一个绘制调用.您需要查看它们的大小,是否重用索引值,以及它们是否经过优化或重新排序以进行渲染. glDrawArrays可能需要传输更多数据,但如果您的模型很小,则开销可能不会太大.绘制频率变得很重要,因为你想经常排队,以保持卡忙,让你的cpu做其他工作,你不希望它只是累积在等待发送的命令缓冲区,但它需要平衡,因为这些转移需要付出代价.最重要的是,经常索引的值可以在频繁重用时从缓存效果中受益,但线性访问的数组在线性访问时可以从缓存效果中受益,因此您需要知道您的数据,因为不同类型的数据受益于不同的方法.

甚至Apple似乎也不确定使用哪种方法.

直到iOS7为该版本和之前的OpenGL ES Programming Guide for IOS写道:

但他们更新的适用于iOS8的OpenGL ES Programming Guide for iOS提供了相反的结果:

看起来在你的情况下你刚刚尝试了两种方法,并发现一种方法更适合你的数据.

大佬总结

以上是大佬教程为你收集整理的glDrawElements在iOS上大量使用cpu全部内容,希望文章能够帮你解决glDrawElements在iOS上大量使用cpu所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。