2016-11-16 91 views
1

我在这里是因为我正在开发一个OpenGL程序,并且我遇到了一些性能问题。我在iMX6 soc上使用OpenGL ES 3.0。Open gl es如何提高性能,渲染纹理,混合

这里是我的算法:

  1. 我从相机被直接映射到纹理获取的图像。 使用FBO,我渲染到纹理以映射特定窗体上的图像。

  2. 我做其通过另一应用程序通过共享存储器发送用于另一图像同样的事情(与第二FBO)。仅当图像更新时才执行此步骤。每秒只有一次。

  3. 我在默认帧缓冲器混合这两种纹理渲染结果到屏幕上。

如果我分别执行这三个步骤,它运行良好,屏幕更新为30FPS。但是当我在一个程序中包含三步时,渲染速度非常慢,而且我只有0.5FPS。

我想知道如果在iMX6的GPU是足够强大,但我认为这不是一个复杂的算法。我想我正在做一些错误的事情,但是什么? 我使用3个不同的帧缓冲区,所以这是一个好方法,或者我应该只使用一个?

能有人给我解答,线索,凡是能帮助我吗? :-)

我的图像尺寸为1280×1024 X RGBA。然后,我正在做一些从浮点纹理到整数的转换,然后返回到浮点,这是为了对像素执行按位运算。

+0

“然后,我正在做一些从浮点纹理到整数的转换,然后返回到浮点,这是为了对像素执行按位运算。”我的直觉是,这是一个缓慢的位。如果你做一个更简单的混合作为测试(例如输出两个图像的平均值),会发生什么? – Columbo

+0

感谢您的回答,我现在无法尝试,但我会尽快完成。使用浮点纹理还是整数或甚至标准化的整数更好? (为了更好的性能) – Ango742

+0

一些实际的代码和着色器会有所帮助 - 很难提供基于相当蓬松的描述的具体建议... – solidpixel

回答

0

由于@Columbo问题,从所有的转换来了,我和浮点纹理,并且只能用于位运算我做的转换,其提高了很多算法的性能工作。

降低性能的另一点是纹理格式。对于第一步,图像是1280x1024,但只在一个组成(灰度图像)。为了仅保留灰度级组合并不使用太多内存,我使用了GL_RED纹理,但这不是一个好主意,因为当我将其更改为GL_RGB时,我也将渲染帧率加倍。