• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - ios7上的glTexSubImage2D慢

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:03:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个项目,我需要更新纹理的多个区域,并将这些区域每帧同步到 openGL。我正在将 openGL ES 2.0 与 xcode5 中的 iDevices 项目一起使用。

为了同步这些纹理更改,我使用 glTexSubImage2D,可能每帧调用此函数数百次,用于绑定(bind)纹理的小区域。在运行 ios6 的 iPhone4 上进行测试时,这足以满足我的需求。

当我在运行 ios7 的 iPad Mini Retina 上对其进行测试时,它明显停滞不前。 在 glTexSubImage2D 下调用的三个函数的 mach_msg_trap 中显示了停顿。

很遗憾,我无法发布配置文件的图像(由于缺少信誉点),但这三个函数是从 agxuBlitRender 调用的,总共占用了 86.1% 的 CPU: agxuCreateRenderTarget (38.2%) 提交数据包 (25.5%) agxuReleaseAllRenderTargets (16.2%)

我很欣赏 mach_msg_trap 只是意味着线程在等待时正在旋转,但我无法从分析器确定它在等待什么。

我最初想知道它是否可能是重建 mip-map 或 ios7 强制执行的其他一些过程。我没有打开 mipmap,尽管根据 gl.h 中的选项,我可能没有太多选择(所有 TextureMinFilters 都是面向 mipmap,即使我将其设置为 GL_NEAREST,它可能默认为 GL_NEAREST_MIPMAP_NEAREST 如果它认为 GL_NEAREST 无效)。如果 iPhone4 版本在底层处理 mipmapping,那么它使用完全相同的代码这一事实可能不是决定因素。

虽然我尝试每帧只复制整个纹理一次,但随着纹理尺寸的增大,这会显着变慢,因为函数 twiddle32x32_32 位于 openGL 的核心深处,每帧占用大量 CPU。

p>

感谢您的帮助。



Best Answer-推荐答案


glTexSubImage2D() 在所有使用 PowerVR GPU 的设备上都非常慢,因为它们基于延迟渲染图 block 的设计和旋转。我更熟悉 Android,您可以在其中获取指向纹理的虚拟指针并使用 EGL 图像扩展直接访问像素。这通常快 4 倍。但是,我读到 iOS 中也有类似的功能。例如:

Using OpenGL ES texture caches instead of glReadPixels to get texture data

关于ios - ios7上的glTexSubImage2D慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21162688/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap