V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
begeekmyfriend
V2EX  ›  Android

如何优化 samplerExternalOES 类型纹理在高斯模糊算法中的性能?

  •  
  •   begeekmyfriend · 2016-10-30 12:00:10 +08:00 · 10061 次点击
    这是一个创建于 2949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 blur 算法的 fragment shader 例子

    其中 uniform samplerExternalOES uTexture 是来自摄像头预览的外部纹理( Android 里对应 SurfaceTexture )。我写过一个简单的测试, Nexus 5x 手机,在 24 帧采样分辨率 480p 下使用 glDrawArrays 渲染全屏, 1 分钟后会掉至 10 帧以下。将 samplerExternalOES 改为 sampler2D , 5 分钟都不会掉帧。推测由于 texture2D 调用过多,使得每一帧都得从外部纹理调取,导致设备性能急剧下降(降频)。

    问题是我现在必须用 samplerExternalOES ,有何优化方法?

    1 条回复    2016-10-31 18:21:17 +08:00
    begeekmyfriend
        1
    begeekmyfriend  
    OP
       2016-10-31 18:21:17 +08:00
    自己想法子解决了:将包含 samplerExternalOES 的 shader 渲染到 FBO 纹理,再写一个 sampler2D 的 shader 将 FBO 纹理渲染到屏幕。由于 FBO 纹理的尺寸可以设置成小于屏幕尺寸,间接避免了 samplerExternalOES 直接渲染到屏幕分辨率大小的开销。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.