与iOS9(OGLES2.0)相比,iOS10/11下的屏幕外渲染性能大幅下降
背景:我们正在开发的游戏在我们升级到iOS 10或iOS 11的设备上性能急剧下降。两台运行10.3.3的iPhone6s只能达到20-30fps,而一台运行8.0的iPhone5s只能以60fps的速度轻松前行 最近,我将iPod6从ios 9升级到ios 11,运行完全相同版本的游戏时,速度也从60 fps下降到了20-30 fps NB:最初,GPU分析器让我相信这是一个与着色器相关的问题,但这是一个错误的线索。感谢所有在此基础上发表评论的人。 以下是我如何缩小问题的范围: 正常运行时,我们的游戏会在每一帧生成以下屏幕外纹理:与iOS9(OGLES2.0)相比,iOS10/11下的屏幕外渲染性能大幅下降,ios,iphone,performance,opengl-es,fragment-shader,Ios,Iphone,Performance,Opengl Es,Fragment Shader,背景:我们正在开发的游戏在我们升级到iOS 10或iOS 11的设备上性能急剧下降。两台运行10.3.3的iPhone6s只能达到20-30fps,而一台运行8.0的iPhone5s只能以60fps的速度轻松前行 最近,我将iPod6从ios 9升级到ios 11,运行完全相同版本的游戏时,速度也从60 fps下降到了20-30 fps NB:最初,GPU分析器让我相信这是一个与着色器相关的问题,但这是一个错误的线索。感谢所有在此基础上发表评论的人。 以下是我如何缩小问题的范围: 正常运行时,我
- 256x256处的十个玩家阴影(不涉及alpha混合)
- 十一个128x256到256x256动画“电视屏幕”纹理
- 256x512“世界反射”纹理包含场景中模型的一小部分
- 生成20个小(256x256)纹理并为其指定帧缓冲区
- 在每个帧中,为每个纹理渲染几个精灵,然后将纹理渲染到屏幕上
- OpenGL配置此设置
- 将所有精灵渲染重定向到屏幕(但也保留“将纹理渲染到屏幕”步骤)
- 配置此设置。在我的测试中,尽管sprite渲染必须覆盖更多的像素,但第二次设置要快10毫秒
- 绘制到主帧缓冲区
- 绘制到纹理1
- 将纹理1绘制到主帧缓冲区
- 绘制到纹理2
- 将纹理n绘制到主帧缓冲区
- 绘制到纹理1
- 绘制到纹理2
- 绘制纹理
- 将纹理1绘制到主帧缓冲区
- 将纹理2绘制到主帧缓冲区
- 将纹理n绘制到主帧缓冲区
- iPhone 5s(iOS 8.0):14毫秒/11.5毫秒(2.5毫秒)
- iPod 6gen(iOS11):19ms/11.8ms(7.2ms)
- iPhone6s(iOS10.3.3):17ms/8.2ms(8.8ms)
2:你说的是opengl es,对吗?你的目标是哪个版本?OGLES2.0-现在添加到主帖子中。有两件事需要尝试:1。用两个单独的vec2替换vec4 texcoord,这样可以避免依赖纹理读取(尽管