执行eglSwapBuffer和eglMakeCurrent时性能低下

2024-04-10

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

  • 使用 OpenGl FrameBufferObject (FBO) 使 Unity 离屏渲染到此 FBO
  • Get the offscreen texture of this FBO then using for 2 purposes:
    • 渲染到视频表面
    • 重绘到设备屏幕
  • Execute flow per frame:
    • 绑定我的FBO
    • 将场景渲染到 FBO(Unity 代码)
    • 解绑我的 FBO
    • set up video surface
      • 配置表面尺寸(仅第一次执行)
      • 保存egl状态
      • 使视频表面成为当前
    • 使用 FBO 的屏幕外纹理绘制到视频表面
    • restore to default surface
      • 将演示时间设置为视频帧
      • 将缓冲区从视频表面交换到默认窗口
      • 恢复egl状态
      • 使默认表面成为当前表面
    • 通知编码器线程数据已准备好写入

我的问题是录制时的性能不好。三星 Galaxy S4 上的 FPS 从 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 等待排队的操作执行。因此,您看到的时间是因为在您正在进行的实际调用之前执行了其他调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行eglSwapBuffer和eglMakeCurrent时性能低下 的相关文章

  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • startActivity overridePendingTransition 只显示进入动画

    基本上 我遇到的问题是只显示输入幻灯片动画 调用 Activity 不会产生动画 startActivity intent overridePendingTransition R anim right in partly R anim le
  • Android自定义控件命名空间问题

    我一直在为 Android 开发自定义控件 尽管我尝试按照建议进行操作here https stackoverflow com questions 4495511 how to pass custom component parameter
  • Google Play 商店中基于服务的 Android 应用程序

    我正在开发一个应用程序 该应用程序仅包含一些服务 没有任何活动 即没有 UI 基本上 当用户在他 她的设备上安装应用程序时 我希望有 2 到 3 个服务在后台运行 对此我有几个疑问 应用程序安装后我的服务将如何启动 我的BroadcastR
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • BluetoothAdapter.getDefaultAdapter() 不返回 null

    这是我的第一篇文章 所以如果我做了一些愚蠢的事情 请告诉我 这个问题可能看起来与其他帖子类似 但或多或 少与我所看到的所有内容相反 关于该项目的事情 我正在开发 android 4 0 4 4 应用程序 我正在使用蓝牙 我正在运行 andr
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • 多语言 Android 应用程序:在电子邮件和密码字段中显示英文键盘

    我们正在开发一款多语言 Android 应用程序 针对英语和阿拉伯语 面临的问题是在登录和注册屏幕中 我们希望仅以英文文本输入用户名和密码字段 从而显示英文键盘 无论设备区域设置语言如何 已尝试在 edittext 中设置 inputtyp
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 将图像保存到内部存储器并将出现在图库中

    我搜索了很多与我的问题相关的问题 是否有办法将图像存储在内存中并且它也应该出现在图库中 这是完全有可能的 我以前也这么做过 在将图像保存到内存 或称为应用程序文件夹等 之前 您最好设置Context MODE WORLDREADABLE 虽
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles

随机推荐

  • 生产中的 GWT 源映射

    GWT 支持超级开发模式下的源映射 不幸的是 尽管我在 gwt xml 文件中添加了源映射选项 但它们似乎无法在生产模式下工作 如何在那里启用它们 看看 GWT 自己的网站是如何做到这一点的 https gwt googlesource c
  • 如何离线安装Flask? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我已经在我的电脑上下载了 Flask 然后我就断开了连接 现在我需要在没有互联网连接的情况下安装 Flask 离线安装 Flask 还需要什
  • Wildfly 中有多个持久单元?

    Wildfly 9 0 2 应用程序中是否可以有两个持久性单元 我收到 WFLYJPA0061 未指定持久性单元名称 并且应用程序部署部署 jasper web war 中有 2 个持久性单元定义 要么将应用程序部署更改为只有一个持久性单元
  • Java 中使用分隔符“.”的分词问题

    我需要使用分隔符分割文本 例如我想要这个字符串 Washington is the U S Capital Barack is living there 分为两部分 Washington is the U S Capital Barack
  • Spring Security 中具有密码授予的 oAuth2 客户端

    我正在使用一组受 oAuth2 保护的服务 目前的工作原理如下 客户端使用用户名和密码登录 我用这些换取代币 我将令牌保留在会话中 并在每次想要调用服务时提交它 它可以工作 但问题是我完全手动执行此操作 而没有使用 Spring Secur
  • 使用命令中断循环

    在我的 Python Discord Bot 中 我想创建一个命令 这会导致循环运行 当我输入第二个命令时 循环应该停止 那么粗略地说 client event async def on message message if message
  • Node.js 中多线程处理文件

    我需要从在线 url 读取文件并在多线程中处理它并将其写入另一个输出中 https www w3 org TR PNG iso 8859 1 txt https www w3 org TR PNG iso 8859 1 txt我尝试过的解决
  • 如何测量图像上绘制的线的长度? C#

    我想编写一个应用程序来测量在显微镜下检查的样本碎片 我认为最好的方法是捕获图像并在样本的选定部分上绘制 然后以像素为单位计算绘制线的值 然后将该值转换为适当的单位 是否有任何东西可以帮助解决已经实现的此类问题 或者有任何工具 包或允许此类计
  • C# LINQ 用有意义的字符串替换空值

    从列表中 class Delivery public string ProductCode get set public DateTime OrderedDate get set public DateTime DeliveryDate g
  • 如何在 iPhone 上运行的应用程序中浏览核心数据?

    我正在开发一个使用核心数据的 iPhone 项目 并试图找到一种方法来轻松浏览数据的存储方式 具体来说 我将图像存储在核心数据中 并想查看它们占用了多少空间等 我发现了一个名为 核心数据编辑器 的应用程序 可以让你在 iPhone 模拟器上
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • Phoenix:订购查询集

    我 一个菜鸟 为了好玩而玩弄 Phoenix 框架并构建一个小型 Twitter 克隆 我一切正常 但是 我想按updated at字段 升序 正如您从 tweet controller 中看到的 我尝试过使用 order by 子句 但这
  • (MySQL) 在文件特定列中加载数据

    我在将数据加载到表的特定列时遇到问题 CSV 文件是动态构建的 具有默认字段 ID LAST REFRESH ALIAS1 和可能含有ALIAS2 至 ALIAS8 当前 CSV 仅包含 ALIAS1 4 MySQL 表包含 ID LAST
  • 在 64 位 Windows 计算机上使用 32 位 com 运行 32 位应用程序

    我有一个使用 C COM 对象的 C 应用程序 两者都构建在 32 位计算机上 现在我必须在 64 位机器上运行它们 我注册了COM对象 在计算机 hkey classes root wow6432node clsid xxx 下的寄存器中
  • C++ 中的嵌套 Lambda 捕获 [重复]

    这个问题在这里已经有答案了 我有类似的东西 think of Synonym as a set vector of values the purpose of this function is to filter out elements
  • Javascript 函数显示所遵循城市的路线

    我正在 codewars com 上练习编码 我碰到这个问题 https www codewars com kata 5899a4b1a6648906fe000113 train javascript 我们正在追踪我们的流氓特工马修 奈特
  • WPF 多线程

    我正在绞尽脑汁地尝试让多线程在 WPF 中按照我想要的方式工作 我有一个名为 Manager 的对象 带有单例 它执行大量处理和查找 我希望它在与 UI 分开的线程中运行 UI 将调用 Manager 上的方法来执行 UI 应该做出反应的处
  • 使用.net 2.0 连接到 FTP 服务器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望连接到现有的 FTP 服务器 上传文件 等待服务器生成报告 然后将该报告下载回 VB NET 2
  • 您应该如何有效地批处理复杂的网格?

    渲染复杂网格的最佳方法是什么 我在下面写了不同的解决方案 想知道您对它们有何看法 让我们举个例子 如何渲染 Crytek Sponza 网格 PS 我不使用Ubershader 只使用单独的着色器 如果您通过以下链接下载网格 http gr
  • 执行eglSwapBuffer和eglMakeCurrent时性能低下

    我正在开发一个 Android Unity 插件 允许用户记录他 她的游戏玩法我的解决方案概述 使用 OpenGl FrameBufferObject FBO 使 Unity 离屏渲染到此 FBO Get the offscreen tex