gpt4 book ai didi

android - 执行 eglSwapBuffer 和 eglMakeCurrent 时性能低下

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:01 25 4
gpt4 key购买 nike

我正在开发一个 Android Unity 插件,允许用户记录他/她的游戏过程
我的解决方案概述:

  • 使用 OpenGl FrameBufferObject (FBO) 让 Unity 渲染离屏到这个 FBO
  • 获取此 FBO 的屏幕外纹理,然后用于 2 个目的:
    • 渲染到视频界面
    • 重绘到设备屏幕
  • 每帧执行流程:
    • 绑定(bind)我的FBO
    • 将场景渲染到 FBO(Unity 代码)
    • 解绑我的FBO
    • 设置视频界面
      • 配置表面尺寸(仅第一次执行)
      • 保存egl状态
      • 使视频表面流行
    • 使用我的 FBO 的屏幕外纹理绘制到视频表面
    • 恢复到默认表面
      • 将演示时间设置为视频帧
      • 将缓冲区从视频表面交换到默认窗口
      • 恢复egl状态
      • 使默认表面成为当前
    • 通知编码器线程数据已准备好写入

我的问题是录制效果不佳时的性能。 FPS 在 Samsung Galaxy S4 上从 60 下降到 40。我尝试记录渲染操作的执行时间,并认识到最影响性能的操作是使视频表面成为当前操作并将缓冲区从视频表面交换到默认窗口操作。下面是他们的代码

public void makeCurrent()
{
if (!EGL14.eglMakeCurrent(this.mEGLDisplay, this.mEGLSurface, this.mEGLSurface, this.mEGLContext))
throw new RuntimeException("eglMakeCurrent failed");
}

public boolean swapBuffers()
{
return EGL14.eglSwapBuffers(this.mEGLDisplay, this.mEGLSurface);
}

make current操作的执行时间为1~18 ms
交换缓冲区操作的执行时间为 4 ~ 14 ms
其他操作的执行时间一般为0~1ms
如何提高这些操作的性能?
任何帮助将不胜感激!

最佳答案

很多 OpenGL 调用都是异步的,有些调用可能会导致 OpenGL 等待排队的操作执行。所以你被看到的次数是因为在你实际调用之前执行的其他调用。

关于android - 执行 eglSwapBuffer 和 eglMakeCurrent 时性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518397/

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