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

时间:2014-02-19 23:33:53

标签: java android opengl-es unity3d

快速注意 - 如果你有Unity / Android代码可以播放视频流h264,而不是完整视频,在Unity端30 + FPS播放分享它,这会救我!

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

仅限Texture2D Unity Side:

  • 纹理的分配不是问题。
  • 使用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, buffer);
  • 使用这个“指针/ ID”,我可以进行多次调用,说明在GL调用之前和之后它在Java端都是合法的。
  • 这声称它就是答案,但直到我在Unity一侧使用Apply()时才会有效,这当然会破坏它。
  • 我的假设是Java代码已经改变,我需要弄清楚什么能解决我的问题。

渲染纹理:

  • 这也是我所看到的潜在答案。
  • 它声称可以更快地更新纹理更改,但它似乎只通过相机设置纹理。
  • 我想用数学上至少30 FPS计算的简单1080帧更新RenderTextures。
  • 我发现这样做的唯一方法是遗憾地使用Texture2D,当然还需要Apply()!
  • 截至目前,这似乎已接近可用,但总体上无法使用。

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

1 个答案:

答案 0 :(得分:1)

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

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