Попытка выяснить, почему мой вершинный шейдер работает на моем мобильном телефоне (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
и потом жалуется, когда я его добавляю.