2012-04-27 1 views
0
GLuint index = 0; 
glBindAttribLocation(mprogram, index, name); 

Например, индекс «0» - это gl_position, но как насчет других индексов, таких как 1 и 2?GLSL 1.2: Каковы атрибуты по умолчанию для разных индексов, используемых в glBindAttribLocation

@Nicolas Проблема в том, что, когда я установил индекс к нулю, я заметил, что призывы к glVertexAttrib (индекс ...) будет изменять позиции вершин вместо атрибута я присвоенного его ...

ответ

0

Во-первых, gl_Position - это выход позиция из вершинного шейдера, а не вход. Это не атрибут вершин и его никогда не было. Вероятно, вы думаете о gl_Vertex.

Самое главное, что встроенные атрибуты, такие как gl_Vertex, gl_Color и т. Д., Не имеют общих индексов атрибутов. gl_Vertex is не то же самое, что и общий атрибут 0. Спецификация OpenGL явно запрещает эти два значения одинаковыми. Общие атрибуты (вещи с индексами атрибутов) и встроенные атрибуты не являются «псевдонимами» друг с другом. Они не разделяют одни и те же ресурсы или пространство.

Теперь реализация OpenGL от NVIDIA позволяет наложение псевдонимов в направлении, противоречащем спецификации OpenGL. Но такой код не переносится (и ужасно). Если вы хотите точно определить, как NVIDIA делает свое сопоставление, я уверен, что документация на сайте NVIDIA будет где-то написана.

+0

Но я думал, что это указано, что общий атрибут 0 действительно сглажен со встроенной вершинной позицией (по крайней мере, в старые неисчерпаемые дни). Ну, по крайней мере, в «Оранжевой книге» сказано об этом, и я так и считал. –

+0

@ChristianRau: Вы можете получить это в замешательстве с необходимостью использовать либо атрибут 0, либо 'gl_Vertex' при рендеринге (в соответствии с правилами совместимости). Они оба служат для «провокации» вершины под 'glBegin/glEnd', поэтому вы должны иметь что-то в одном из них, и вы не можете использовать оба для одного вызова рендеринга. Но если это то, что он говорит, то Оранжевая книга ошибочна. Из спецификации совместимости OpenGL 3.3: «Нельзя использовать общие атрибуты с обычными». Исключением не является исключение для gl_Vertex и атрибута 0. –

+0

Посмотрел. 2.1-spec говорит (в главе 2.7): * «Установка атрибута нулевого атрибута вершины указывает вершину, четыре координаты вершин берутся из значений атрибута 0. Команда Vertex2, Vertex3 или Vertex4 полностью эквивалентна соответствующей VertexAttrib команда с индексом 0. Установка любого другого общего атрибута вершин обновляет текущие значения атрибута. Нет текущих значений для нулевого атрибута вершины. "* Чтобы быть *" полностью эквивалентным "*, ему не нужно отправлять значения к тому же каналу атрибутов? –

 Смежные вопросы

  • Нет связанных вопросов^_^