2016-11-16 94 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時,我也將渲染幀率加倍。