OpenGL ES 2.0: атрибут не активен - PullRequest
0 голосов
/ 01 декабря 2010

При чтении книги: Руководство по программированию OpenGL ES 2.0 (Addison-Wesley).И я прочитал следующее:

"Имена атрибутов, которые не существуют или не активны в вершинном шейдере, прикрепленном к объекту программы, игнорируются."

Когда атрибут не активен?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Из спецификации OpenGL:

Общая переменная атрибута считается активным, если он определен компилятором и компоновщиком, что атрибут может быть доступен, когда шейдер выполнен. атрибут переменные, которые объявлены в вершинный шейдер но никогда не будет считать против лимита. В случаях где компилятор и компоновщик не могут сделать окончательное решение, атрибут будет считаться активным. объект программы не сможет связать, если количество активных атрибутов вершины превышает MAX_VERTEX_ATTRIBS.

0 голосов
/ 20 июня 2012

Иногда полезно иметь вершинный шейдер, который предоставляет набор атрибутов для различных фрагментных шейдеров, не беспокоясь о том, использует ли его каждый конкретный фрагментный шейдер.В этих случаях допустимо, чтобы компилятор и компоновщик удалили атрибуты, которые фактически не используются в выводе вершинного шейдера, и они будут сопоставлены с дескриптором no-op -1.

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

...