Как получить тип данных единой переменной - PullRequest
6 голосов
/ 18 января 2011

Я пытаюсь получить тип универсальной переменной, определенной в фрагментном шейдере:

 uniform vec3 color;
 uniform float zoom;
 uniform int max;
 void main() {
    ...
 }

glGetActiveUniformARB (программа, индекс, maxLength, * длина, * размер, * тип, * имя)Кажется, это правильная функция API для использования, но я не знаю, как определить index из имени переменной.glGetUniformLocationARB возвращает местоположение унифицированной переменной, которое, похоже, не совпадает с index .

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Что ж, API-интерфейс предполагает, что если вы знаете имя униформы, вы также знаете тип (эти две вещи написаны в коде рядом друг с другом), поэтому он не позволяет получить простой доступ к введите по имени.

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

(Как правило, ожидаемое использование состоит в том, чтобы перебирать все униформы, извлекать имя и тип, а затем получать их местоположение из имени, чтобы знать, как их обновлять во время выполнения. Не наоборот).

2 голосов
/ 18 января 2011

Со страницы glGetActiveUniform :

The number of active uniform variables can be obtained by calling glGetProgram
with the value GL_ACTIVE_UNIFORMS. A value of 0 for index selects the first
active uniform variable. Permissible values for index range from 0 to the
number of active uniform variables minus 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...