glGetUniformLocation return -1 OpenGL ES (iPhone) - PullRequest
5 голосов
/ 22 марта 2012

У меня есть фрагментный шейдер со следующими атрибутами:

varying highp vec2 coordinate;
precision mediump float;

uniform sampler2D videoframe;
uniform sampler2D videosprite;
uniform vec4 mask;
uniform float threshold;

Я получаю их местоположения и позже устанавливаю их:

_frame = glGetUniformLocation(_program, "videoframe");
_sprite = glGetUniformLocation(_program, "videosprite");
_mask = glGetUniformLocation(_program, "mask");
_threshold = glGetUniformLocation(_program, "threshold");

NSLog(@"%i %i %i %i", _frame, _sprite, _mask, _threshold);

Однако, журнал показывает: 0 2 1 -1

Из документации я вижу, что -1 (единица порога) означает, что это не удалось.Почему это терпит неудачу?Спасибо

1 Ответ

10 голосов
/ 22 марта 2012

GLSL-компилятор может (и обычно будет) оптимизировать любые униформы и атрибуты, которые не используются в шейдере. Вы можете запрашивать только местоположения активных униформ, которые используются по крайней мере в одной ветви вашего шейдера.

Итак, я думаю, переменная threshold нигде не используется в вашем коде шейдера. Но в этом случае вам все равно не нужно его значение, и установка единого значения для местоположения -1 ничего не даст. Так что вам на самом деле не нужно беспокоиться об этом.

...