Я использую следующий вершинный шейдер из учебника:
"uniform mat4 matriceDessin;" +
"uniform mat4 matriceVueCamera;" +
"uniform vec3 positionLumiere;" +
"attribute vec4 positionsSommets;" +
"attribute vec3 vecteursNormaux;" +
"attribute vec4 couleursSommets;" +
"varying vec4 v_Color;" +
"void main() {" +
"vec3 sommet,vecteurNormal,directionLumiere;"+
"float distance,diffuse;" +
"sommet = vec3(matriceVueCamera * positionsSommets);" +
"vecteurNormal = vec3(matriceVueCamera * vec4(vecteursNormaux, 0.0));" +
"distance = length(positionLumiere - sommet);" +
"directionLumiere = normalize(positionLumiere - sommet);" +
"diffuse = max(dot(vecteurNormal, directionLumiere), 0.1);" +
"diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));" +
"v_Color = couleursSommets;" +
"gl_Position = matriceDessin * positionsSommets;" +
"}";
Для определения местоположения моих переменных я использую после успешного создания и связывания программы:
GLES31.glUseProgram(programme);
pointeurSurPosition = GLES31.glGetAttribLocation(programme, "positionsSommets");
pointeurSurVecteurNormal = GLES31.glGetAttribLocation(programme, "vecteursNormaux");
pointeurSurPositionLumière = GLES31.glGetUniformLocation(programme, "positionLumiere");
pointeurSurMatriceDessin = GLES31.glGetUniformLocation(programme, "matriceDessin");
pointeurSurMatriceVueCaméra = GLES31.glGetUniformLocation(programme, "matriceVueCamera");
Проблема, с которой я сталкиваюсь, состоит в том, что вызовы, сделанные для получения местоположений matriceVueCamera
, positionLumiere
и vecteursNormaux
, всегда возвращают -1 (другие местоположения корректно извлекаются).
Согласноdoc, это может произойти, если переменные не являются активными, но можно заметить, что они используются в шейдере, поэтому их следует рассматривать как активные, по крайней мере, насколько я понимаю концепцию.
Я пыталсяпривязать местоположение к этим переменным с помощью glBindAttribLocation
, прежде чем связывать программу, но это не помогло.
Кто-нибудь видит, где может быть моя проблема?
Я использую Open GL ES 3.1.