java - Unity 4.3 + Android - 我需要在 1080 x 1920 下至少以 30 FPS 更新 Texture2D 或 RenderTexture

标签 java android opengl-es unity3d

快速说明 - 如果您的 Unity/Android 代码将在 Unity 端以 30+ FPS 播放h264 视频流,而不是完整视频,并且可以分享它,那会救我!

描述: 我有 Unity Pro 4.3。第一种简单的方法是创建一个 Color32 [1080*1920] 数组,并将元素分配给通过数学函数创建的值。 主要目标 是创建一个 Texture2D 并为像素使用颜色数组,并能够以 30+ FPS 的速度逐帧更新它们。以下是我目前的结果:

仅限 Texture2D Unity 端:

  • 纹理的分配不是问题。
  • Apply() 的使用是个大问题。这是实际更新纹理所必需的。
  • 使用 1080 x 1920 纹理以 0.5 FPS 的速度运行。当然太慢了。

Unity 和 Android 端之间的 Texture2D:

  • 我看过并尝试使用 Android Java OpenGL ES 示例。
  • 如果我能够找到解决方案,这听起来仍然是最好的方法。
  • 我正在通过桥将 Texture2D 的“指针/ID”传递到 Java 端。
  • 尝试使用“指针/ID”在 Java 端更新 Texture2D,方法如下: glBindTexture(GL_TEXTURE_2D, texturePtr);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, s_resolutionWidth, s_resolutionHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 缓冲区);
  • 使用这个“指针/ID”,我能够进行多次调用,表明在 GL 调用之前和之后在 Java 端一切都应该是合法的。
  • 这声称这是答案,但这没有任何影响,直到我在 Unity 端使用 Apply(),这当然会毁了它。
  • 我的假设是 Java 代码已更改,我需要弄清楚如何解决我的问题。

渲染纹理:

  • 这也是我认为可能的答案。
  • 它声称可以更快地更新纹理变化,但它似乎只能通过相机设置纹理。
  • 我想用数学上至少计算出 30 FPS 的简单 1080 帧来更新 RenderTextures。
  • 不幸的是,我发现这样做的唯一方法是使用 Texture2D,当然需要 Apply()!
  • 所以目前看来,这似乎接近可用,但总的来说还不能用。

我真的需要知道在 Unity 中以 30 FPS 更新纹理的最佳方法。一旦我知道如何做到这一点,即使是最简单的形式,我也能取得进步。

最佳答案

您不能指望使用标准的 glTexImage2D() 函数可以达到接近 30 fps 的速度,因为它会复制和转换每张图像,这使得速度太慢。该功能仅适用于加载一次并使用多次的静态图像。 Android 平台通过使用 EGL 图像扩展来避免此功能,应用程序也可以这样做。但是,它确实需要 native 代码。本文给出了 Android 的介绍和示例代码:

http://software.intel.com/en-us/articles/using-opengl-es-to-accelerate-apps-with-legacy-2d-guis

关于java - Unity 4.3 + Android - 我需要在 1080 x 1920 下至少以 30 FPS 更新 Texture2D 或 RenderTexture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894951/

相关文章:

android - 未生成 Dagger 2 组件

c++ - OpenGL - 纹理映射不完整

android - OpenGL ES 字符串错误

java - GestureDetector 不适用于新布局

java - 无限图像滚动

java - 运行从基于 gradle 的项目构建的可执行 jar 文件

android - 单击android中的 ListView 适配器时如何展开和折叠 View

ios - 打开 GL ES 1 和 iOS 5 引用

Java - Servlet 404 错误

java - ScrollView 中的 2 个元素布局和 ListView