На некоторых устройствах (до настоящего времени Samsung Galaxy Note 2 и 3 + Xperia Z1) я получаю эту ошибку, вызову с вызовом Gluniformmatrix4fv (UmatrixLocation, 10, False, Matrix, 0), чтобы установить матрицу преобразования.
Ошибка: < /p>
java.lang.IllegalArgumentException: length - offset < count*16 < needed
at android.opengl.GLES20.glUniformMatrix4fv(Native Method)
< /code>
И это вызвано этой строкой в моем коде Textureshaderprogram: < /p>
glUniformMatrix4fv(uMatrixLocation, 10, false, matrix, 0);
< /code>
uMatrixLocation - указатель местоположения матрицы var
10 - количество матриц преобразования (так matrix.length () = 10 * 16 = 160 )
matrix - это Float [] Valible, содержащая все данные о преобразовании
, а 0 - смещение в матрице < /p>
Я пытался увеличить переменная графа для его решения, но без успехов. br />https://android.googlesource.com/platfo ... gles20.cpp
P> и эти конкретные строки делают проверку и выбросьте вышеуказанную ошибку: < /p>
_remaining = _env->GetArrayLength(value_ref) - offset;
if (_remaining < count*16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
_exceptionMessage = "length - offset < count*16 < needed";
goto exit;
}
< /code>
any clue about why these devices throw the error?
Could the cpp file on these devices differ from the other devices?
added 20140114 18:47
These are the float values passed to glUniformMatrix4fv(uMatrixLocation, 10, false, matrix, 0)< /code> в переменной матрицы: < /p>
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.0
my float is: -0.8425926
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.098958336
my float is: -1.1574074
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: -0.296875
my float is: -1.1574074
my float is: -0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: -0.098958336
my float is: -1.1574074
my float is: -0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.296875
my float is: -1.1574074
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.9010416
my float is: -0.8240741
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.9010416
my float is: 0.8240741
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.9010416
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.5625
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 1.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: 0.0
my float is: -1.0
my float is: 0.0
my float is: 0.0
my float is: -1.1574074
my float is: 0.0
my float is: 1.0
< /code>
and this is my vertex shader:
uniform mat4 u_Matrix[10];
attribute lowp float a_MatrixIndex;
attribute vec4 a_Position;
attribute vec2 a_TextureCoordinates;
attribute vec3 a_Color;
varying vec3 v_Color;
varying vec2 v_TextureCoordinates;
void main()
{
v_Color = a_Color;
int MatrixIndex = int(a_MatrixIndex);
v_TextureCoordinates = a_TextureCoordinates;
gl_Position = u_Matrix[MatrixIndex] * a_Position;
}
Подробнее здесь: https://stackoverflow.com/questions/211 ... rixlocatio