2012-06-22 3 views
28

У меня есть некоторые параметры, передаваемые от CPU к GPU, которые являются постоянными для всех фрагментов, но которые изменяются на каждом фрейме (я использую GLSL ES 1.1). Должен ли я использовать униформы или атрибуты для таких значений? Атрибуты могут варьироваться от вершины к вершине, поэтому моя интуиция заключается в том, что использование атрибутов для значений, которые являются постоянными во всем кадре, будет неэффективным. Тем не менее, я читал, что униформа относится к значениям, которые меняются «относительно редко», предполагая, что изменение униформы на каждом фрейме может быть неэффективным.Унифицированные атрибуты в GLSL ES

Что касается аппаратного обеспечения, меня больше всего интересует оптимизация для iPhone 4S.

+0

Можете ли вы перечислить некоторые ваши показания? – Luca

+1

«Язык затенения OpenGL» от Rost и Licea-Kane и «OpenGL ES 2.0» от Munchi, Ginsburg и Shreiner. (Очевидно, что первое не относится к ES) –

ответ

32

Я голосую за униформу.

Одна из причин уже объяснена в вашем вопросе: униформы являются константами для каждой вершины/фрагмента.

Другие причины предпочитать униформы против атрибутов будет:

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