OpenGL ES:从客户端更改glsl中matrix-vector的一部分

时间:2017-10-11 12:10:47

标签: glsles opengl-es-3.0

我在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端进行更改?但是可以改变制服吗?

1 个答案:

答案 0 :(得分:2)

glsl中的统一数组保证具有连续的位置。统一u_MVPMatrix[i]因此具有位置mMVPMatrixHandleEyes + i。此位置可用于设置单个矩阵(或多个连续矩阵),方法是将其传递给glUniformMatrix4fv

相反,offset参数是传递给float []数组的偏移量,而不是glsl数组中的偏移量。