2015-02-06 27 views
0

目前我正在爲Android編寫一個簡單的OpenGL遊戲。今天,我將大量的矩陣運算轉移到了GPU上,因爲它比CPU快得多。我這樣做之前,所有的偉大工程,但現在,如果我跑我的應用程序渲染的場景是這樣的:CustomROM上的OpenGL不起作用

enter image description here

紅線應該是一個立方體。奇怪的是它只能在我的手機上看起來像這樣。我在另外三臺設備上測試過它,它的運行效果很好。所有這些其他設備運行在製造商股票ROM和我的手機上,我已經安裝了一個CustomROM(SlimKat)。這是否可能是我的手機輸出很奇怪的原因?我在着色器中不做任何複雜的計算。我VertexShader代碼如下所示:

uniform mat4 uProjectionMatrix; 
uniform mat4 uModelMatrix; 
uniform mat4 uViewMatrix; 

attribute vec4 aPosition; 

void main() 
{ 
    mat4 VM_Matrix = uProjectionMatrix * uViewMatrix * uModelMatrix;  
    gl_Position = VM_Matrix * aPosition; 
} 

你有任何想法如何,我可以解決這個問題或做也許你可以界定的問題?

回答

0

在我的項目的所有文件中搜索整整一天後,我發現我的錯誤。爲什麼畫面看起來像這種情況的原因是,雖然我提出了矩陣運算我評論一些代碼了除其他事項外:

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); 

真的,真的愚蠢的,但現在我已經找到了,我希望我會借鑑它。所以現在沒有驅動程序錯誤,所有的工作都很好我對你的最後一個問題是,爲什麼它在其他(股票ROM)設備上正常工作。製造商是否可以設置一些或向其驅動程序提供一些代碼,以便自動調用該行?

0

也許這是一個驅動程序問題。自定義ROM可能包含錯誤的驅動程序,特別是如果自定義ROM的Android版本高於最新版本的ROM ROM。硬件抽象層隨時間而變化,有時「ROM廚師」沒有更新的驅動程序。

只是一個問題 - 你確定這是更快?在CPU上,每個對象只能乘以一次矩陣(並且乘法運算ProjectionMatrix * ViewMatrix每幀只執行一次)。在GPU上,每個頂點都進行一次乘法。

+0

謝謝你。最奇怪的是,在將所有矩陣乘法移動到着色器之前,它工作正常。但是,如果我將其重新使用,它不再適用於舊代碼...所以我不相信這是自定義ROM,它會拋出錯誤,但我對這種現象沒有任何其他想法 – Cilenco 2015-02-06 16:34:49

+0

對於我所討論的問題這[這裏](http://gamedev.stackexchange.com/a/93435/36051)也許這可以幫助你。但我也不相信速度更快,但我對GPU的瞭解不多,所以我相信作者。 – Cilenco 2015-02-06 16:35:20