2012-06-22 15 views
28

Mam niektóre parametry przekazywane z procesora na GPU, które są stałe dla wszystkich fragmentów, ale które zmieniają się na każdej klatce (używam GLSL ES 1.1). Czy powinienem używać mundurów lub atrybutów dla takich wartości? Atrybuty mogą się różnić od wierzchołka do wierzchołka, więc intuicja jest taka, że ​​używanie atrybutów dla wartości, które są stałe w całej ramce, byłoby nieefektywne. Czytałem jednak, że mundury są dla wartości, które zmieniają się "stosunkowo rzadko", co sugeruje, że zmiana mundurów na każdej klatce może być nieskuteczna.Jednolite i atrybutów w GLSL ES

Pod względem sprzętu najbardziej interesuje mnie optymalizacja pod kątem iPhone'a 4S.

+0

Czy możesz wymienić niektóre z twoich odczytów? – Luca

+1

"Język cieniowania OpenGL" Rosta i Licei-Kane'a oraz "OpenGL ES 2.0" autorstwa Munchi, Ginsburg i Shreiner. (Oczywiście ten pierwszy nie jest specyficzny dla ES) –

Odpowiedz

32

Głosuję za mundurami.

Jeden z powodów jest już wyjaśniony w pytaniu: mundury są stałymi dla każdego wierzchołka/fragmentu.

Inne powody do preferują mundurach przed atrybutów byłoby:

  • liczba dostępnych szczelin (masz prawo 16 atrybutów, ale o wiele więcej mundurów)
  • GLSL kompilatory mogą zoptymalizować jednolitą wartość obsługi
  • mniej transmisji danych na długich tablicach werteksów, mniej atrybutów na wierzchołek oznacza lepszą wydajność.
  • mundury są dostępne w shaderów fragmentów, bez definiowania różne atrybuty między wierzchołków i fragmentów shaderów
  • uniformy mogą być struktury i tablice, co prowadzi do bardziej czytelnego kodu.
Powiązane problemy