Open gl es - 如何提高性能、渲染到纹理、混合
Open gl es - How to improve performance, render to texture, blending
我来这里是因为我正在开发一个 OpenGL 程序并且我遇到了一些性能问题。我在 iMX6 soc 上使用 OpenGL ES 3.0。
这是我的算法:
我从直接映射到纹理的相机获取图像。
使用 FBO,我渲染到纹理以将图像映射到特定形式。
我对另一个应用程序通过共享内存发送的另一个图像执行相同的操作(使用第二个 FBO)。仅当更新图像时才执行此步骤。每秒仅一次。
我在默认帧缓冲区中混合这两个纹理以将结果渲染到屏幕上。
如果我分别执行这三个步骤,效果很好,屏幕以 30FPS 的速度更新。但是当我在一个程序中包含这三个步骤时,渲染速度非常慢,我只有 0.5FPS。
我想知道 iMX6 上的 GPU 是否足够强大,但我认为它不是一个复杂的算法。我想我做错事了,但是呢?
我使用了 3 个不同的帧缓冲区,这是一个好方法还是我应该只使用一个?
有人可以给我答案、线索或任何可以帮助我的东西吗? :-)
我的图片尺寸为 1280x1024 x RGBA。然后我正在做一些从浮点纹理到整数再回到浮点数的转换,这样做是为了对像素执行按位运算。
感谢@Columbo,问题来自于所有的转换,我使用浮点纹理并且只对按位操作进行转换,这大大提高了算法的性能。
另一个降低性能的点是纹理格式。第一步,图像是 1280x1024,但只有一个合成(灰度图像)。为了只保留灰度合成而不使用太多内存,我使用了 GL_RED 纹理,但这不是一个好主意,因为当我将其更改为 GL_RGB 时,我将渲染的帧速率加倍也是。
我来这里是因为我正在开发一个 OpenGL 程序并且我遇到了一些性能问题。我在 iMX6 soc 上使用 OpenGL ES 3.0。
这是我的算法:
我从直接映射到纹理的相机获取图像。 使用 FBO,我渲染到纹理以将图像映射到特定形式。
我对另一个应用程序通过共享内存发送的另一个图像执行相同的操作(使用第二个 FBO)。仅当更新图像时才执行此步骤。每秒仅一次。
我在默认帧缓冲区中混合这两个纹理以将结果渲染到屏幕上。
如果我分别执行这三个步骤,效果很好,屏幕以 30FPS 的速度更新。但是当我在一个程序中包含这三个步骤时,渲染速度非常慢,我只有 0.5FPS。
我想知道 iMX6 上的 GPU 是否足够强大,但我认为它不是一个复杂的算法。我想我做错事了,但是呢? 我使用了 3 个不同的帧缓冲区,这是一个好方法还是我应该只使用一个?
有人可以给我答案、线索或任何可以帮助我的东西吗? :-)
我的图片尺寸为 1280x1024 x RGBA。然后我正在做一些从浮点纹理到整数再回到浮点数的转换,这样做是为了对像素执行按位运算。
感谢@Columbo,问题来自于所有的转换,我使用浮点纹理并且只对按位操作进行转换,这大大提高了算法的性能。
另一个降低性能的点是纹理格式。第一步,图像是 1280x1024,但只有一个合成(灰度图像)。为了只保留灰度合成而不使用太多内存,我使用了 GL_RED 纹理,但这不是一个好主意,因为当我将其更改为 GL_RGB 时,我将渲染的帧速率加倍也是。