glUniformMatrix2fv на Samsung Galaxy Tab Pro с Android GLES20 работает на Droid Bionic

Я работаю над шейдерами для программы Android OpenGL ES 2.0. Это сообщение об ошибке. Я погуглил и ничего не нашел.

java.lang.IllegalArgumentException: length - offset < count*4 < needed
            at android.opengl.GLES20.glUniformMatrix2fv(Native Method)

Это работает на моем Droid Bionic, но не на Samsung Galaxy Tab Pro. Фактическая строка, о которой идет речь, выглядит следующим образом:

GLES20.glUniformMatrix2fv(m_u_texture_position, 1, false, m_u_texture_position_floats, 0);

m_u_texture_position_floats — массив из двух элементов с плавающей запятой. Кто-нибудь знает, почему это так?


person D Liebman    schedule 24.09.2014    source источник


Ответы (1)


glUniformMatrix2fv() устанавливает значение для униформы типа mat2. mat2 — это матрица 2 на 2, поэтому для нее требуется 4 числа с плавающей запятой.

Для юниформ-переменной с двумя значениями тип кода шейдера должен быть vec2, и вы будете использовать glUniform2fv() для установки значения:

GLES20.glUniform2fv(m_u_texture_position, 1, m_u_texture_position_floats, 0);
person Reto Koradi    schedule 25.09.2014
comment
что сработало, так это код в этом ответе с «1», как показано ниже: GLES20.glUniform2fv(m_u_texture_position, 1, m_u_texture_position_floats, 0); - person D Liebman; 25.09.2014
comment
Правильно, это должно быть количество векторов, а не количество поплавков. Исправлено сейчас. - person Reto Koradi; 25.09.2014