我在glsl中有这个制服
glUniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset)
用64个矩阵填充
它用于在我的游戏中转换64个形状。它运作良好!!!
如果我想要旋转或调整某个精灵的大小,我的问题是它是否可能改变这个矩阵向量的一部分?我可以使用这个方法:
GLES30.glUniformMatrix4fv(mMVPMatrixHandleEyes, 1, false, mMVPMatrixEyes, 1);
我不理解偏移量参数,我认为它是用作glsl中矩阵-vec的偏移但显然不是?
java.lang.IllegalArgumentException: length - offset < count*16 < needed
at android.opengl.GLES20.glUniformMatrix4fv(Native Method)
如果我更改偏移量参数,我会得到一个例外:
lib
这个问题的解决方案是什么?我是否应该专注于在GPU端进行更改?但是可以改变制服吗?
答案 0 :(得分:2)
glsl中的统一数组保证具有连续的位置。统一u_MVPMatrix[i]
因此具有位置mMVPMatrixHandleEyes + i
。此位置可用于设置单个矩阵(或多个连续矩阵),方法是将其传递给glUniformMatrix4fv
。
相反,offset参数是传递给float []数组的偏移量,而不是glsl数组中的偏移量。