2012-12-03 46 views
2

嗨,這是我的第一篇文章:) 我致力於Android 2.3 OpenGL ES 2 2D遊戲引擎。我嘗試通過構建一個大的VBO而不是逐個繪製精靈來提高性能。我使用配料一次繪製32個精靈。如何將mat4數組傳遞給Android中的opengl es 2中的着色器?

這是我的頂點着色器的定義:

uniform mat4 mvpMatrix[32]; 

當我使用客戶端內存

for (int k = 0; k < m; k++) 
    mvpBuffor.put(models[k], 0, models[k].length); 
mvpBuffor.position(0); 
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, m, false, mvpBuffor); 
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, m * VERTEX_PER_SPRITE); 

和這個作品非常好 但是當我嘗試使用VBO

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, batch.mvpBufferIndex); 
GLES20.glEnableVertexAttribArray(mMVPMatrixHandle); 
GLES20.glVertexAttribPointer(mMVPMatrixHandle, MVP_SIZE * BATCHSIZE, GLES20.GL_FLOAT, false, 0, 0); 

我得到錯誤代碼1281

任何人都知道如何將mat4 uniform的數組傳遞給頂點着色器?

+0

哪條線給你的錯誤? – Tim

回答

0

如果你讀這page,它應該是這樣的:

GLES20.glUniformMatrix4fv(<handle>, <number of matrices>, <transposed?>, <array of matrices>); 
0

看起來好像你的着色器仍然宣佈mvpMatrix作爲統一

均勻MAT4 mvpMatrix [32];

但你想在將它作爲一個屬性:

GLES20.glEnableVertexAttribArray(mMVPMatrixHandle); GLES20.glVertexAttribPointer(mMVPMatrixHandle,MVP_SIZE * BATCHSIZE,GLES20.GL_FLOAT,false,0,0);

0

出於某種原因,在GLES在手機上均勻排列被打破 https://www.opengl.org/discussion_boards/showthread.php/176674-Uniform-arrays-in-OpenGLES

+0

在GLES中沒有被破壞,規範很明確:「數組第一個元素的位置可以通過使用數組名稱或使用名稱追加」[0]「。」來檢索。 如果JoshKlint在該線程中的斷言是真實的(我想他們在寫作時)。然後在5年前iOS和Galaxy Tab驅動程序都有不同的錯誤。 – Columbo

相關問題