gpt4 book ai didi

ios - OpenGL ES 2.0 片段着色器在 iPhone 5S 上编译缓慢

转载 作者:行者123 更新时间:2023-11-28 22:24:21 34 4
gpt4 key购买 nike

我有一个使用大量片段着色器的应用程序。着色器在应用程序启动时全部编译(在后台队列中)。我最近在 iPhone 5S 上测试了该应用程序,一切正常,但着色器的编译时间要长得多。 5号,编译耗时0.8秒。在 5S 上,需要 10 多秒。有谁知道这里发生了什么?

在 iPhone 5(运行 iOS 7.0.2)上:

   2013-10-16 16:53:41.949 Socialcam[1096:1603] -[EffectCaptureController compileShaders]: start
2013-10-16 16:53:42.753 Socialcam[1096:1603] -[EffectCaptureController compileShaders]: end

在 iPhone 5S(运行 iOS 7.0.2)上:

   2013-10-16 16:46:52.856 Socialcam[9757:1603] -[EffectCaptureController compileShaders]: start
2013-10-16 16:47:03.303 Socialcam[9757:1603] -[EffectCaptureController compileShaders]: end

编辑更多信息

进一步研究这个问题,看起来 iPhone 5S 无法像以前的设备那样处理那么多制服。这实际上不是编译问题。对于我的一个着色器,链接阶段挂起 10 秒,然后失败。对于所有其他着色器,没有问题,编译和链接只需要几毫秒。所讨论的着色器使用 768 个 vec4 的统一数组,以及三个纹理。如果我删除任何纹理,或减小数组的大小,它会毫无问题地链接。

最佳答案

既然听起来大制服是个问题,这里有一些替代方案:

  • 如果您在 iPhone 5s 上运行时使用 OpenGL ES 3.0,则可以利用统一缓冲区对象 (UBO),它允许比统一数组大得多的存储空间。另请注意,即使您在支持 ES3 的设备上运行时并未真正利用 ES3 功能,使用 ES3 上下文也会给您带来更大的限制(MAX_TEXTURE_IMAGE_UNITS 等)。

    <
  • 批量数据的另一个好地方是纹理。您在该着色器中使用了三个纹理单元,因此您有足够的空间来添加第四个纹理单元,它可以容纳一个 32x32 图像,其数据与统一数组相同,并且采样速度可能更快。 (一般建议是注意此处的相关纹理提取,但在 A7 上不会有任何损失,因此您可以在特定于新 GPU 的代码中执行此操作。)

关于ios - OpenGL ES 2.0 片段着色器在 iPhone 5S 上编译缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19416110/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com