Массивы в GLSL на Android - PullRequest
       2

Массивы в GLSL на Android

1 голос
/ 03 февраля 2012

Попытка выяснить, почему мой вершинный шейдер работает на моем мобильном телефоне (Casio Commando, Android 2.3.3), но затем протестировать его на моем планшете (Motorola Xoom, Android 3.2.4) не работает ...

Вершинный шейдер:

uniform mat4 uMVPMatrix;
uniform mat4[4] uBoneMatrix;
attribute vec4 vPosition;
attribute vec4 vBoneIndex;
attribute vec4 vBoneWeight;

void main() {
 gl_Position = uMVPMatrix * ( (vBoneWeight.x * uBoneMatrix[int(vBoneIndex.x)]) +
                              (vBoneWeight.y * uBoneMatrix[int(vBoneIndex.y)]) +
                              (vBoneWeight.z * uBoneMatrix[int(vBoneIndex.z)]) +
                              (vBoneWeight.w * uBoneMatrix[int(vBoneIndex.w)]) ) * vPosition;
}

glGetShaderInfoLog() на моем планшете печатает:

(2) : error C7551: OpenGL first class arrays require #version 120

Проект нацелен на android-8, и я звоню setEGLContextClientVersion(2). На планшете GL_VERSION это OpenGL ES 2.0, а на телефоне OpenGL ES 2.0.1566933. GL_SHADING_LANGUAGE_VERSION на обоих устройствах - OpenGL ES GLSL 1.00.

Даже более странно, когда я добавляю строку #version 120 к своему шейдеру, тогда я получаю еще больше ошибок:

(2) : error C0201: unsupported version 120
(3) : error C7532: global type mat4 requires "#version 100" or later
(4) : error C7551: OpenGL first class arrays require #version 120
(5) : error C7532: global type vec4 requires "#version 100" or later
(10) : error C7532: global variable gl_Position requires "#version 100" or later
(10) : error C7532: global type int requires "#version 100" or later

Так что, я думаю, это просто расхождение между драйверами? Мне кажется странным, что драйвер на планшете знает о добавлении #version 120 и потом жалуется, когда я его добавляю.

1 Ответ

4 голосов
/ 03 февраля 2012
uniform mat4[4] uBoneMatrix;

[4] всегда идет после имени переменной в GLSL.Ваш Casio Commando также должен выдавать ошибку.

При этом печально видеть, что NVIDIA не может заставить себя написать отдельные компиляторы для чего-либо.И поэтому их компиляторы выдают неуместные сообщения об ошибках.

...