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