嗨,这是我在这里发表的第一篇文章:) 我在使用Android 2.3 OpenGL ES 2 2D游戏引擎。我尝试通过构建一个大的VBO而不是逐个绘制精灵来提高性能。我使用批处理一次绘制32个精灵。
这是我的顶点着色器定义:
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均匀数组传递给顶点着色器?
答案 0 :(得分:0)
如果你读到这个page,它应该是这样的:
GLES20.glUniformMatrix4fv(<handle>, <number of matrices>, <transposed?>, <array of matrices>);
答案 1 :(得分:0)
看起来你的着色器仍然宣称mvpMatrix是统一的
统一mat4 mvpMatrix [32];
但是你试图将其作为属性传递:
GLES20.glEnableVertexAttribArray(mMVPMatrixHandle); GLES20.glVertexAttribPointer(mMVPMatrixHandle,MVP_SIZE * BATCHSIZE,GLES20.GL_FLOAT,false,0,0);
答案 2 :(得分:0)
出于某种原因,在移动设备上的GLES中统一阵列被破坏了 https://www.opengl.org/discussion_boards/showthread.php/176674-Uniform-arrays-in-OpenGLES