Jak szybki jest glUseProgram()? Czy jest coś lepiej (szybciej) ?:Zachowanie mundurów po glUseProgram() i prędkości
Oto moje myśli:
- Zastosowanie 1 uniwersalny program shader, ale z wielu ustawień wejściowych i atrybutów (ustawienia dla każdej klasy Graphics)
- używać więcej niż 1 moduł cieniujący dla każdej klasy grafiki
W jakim stanie są uniformy po zmianie programu cieniującego? Czy zapisują wartości (na przykład wartości matryc)?
Oto co uważam korzyści nr 1 będzie:
- Nie używa glUseProgram()
a korzyści z # 2:
- Nie zmiany macierzy (na przykład, jeśli klasa
Menu
i klasaScene3D
mają różne macierze rzutowania)
"To, która z opcji jest lepsza, zależy w dużej mierze od tego, co robią te shadery" - Zadanie jest proste - renderowanie z teksturowaniem, bez żadnych efektów (tylko niektóre muszą mieć efekty cieniowania). –
Jeśli niektóre z nich są bardzo proste, a niektóre mają pewien efekt, to powinienem mieć prosty moduł cieniujący z teksturowaniem (zakładając, że jest to wersja otwarta 2.x lub nowsza) i jedną dla klasy efektu. Ale naprawdę trudno jest osądzać, nie wiedząc więcej. Prawdopodobnie nie będzie miało to większego znaczenia. Jeśli nie masz problemów z wydajnością i wiesz, że to ze względu na zmiany stanu, po prostu rób to, co jest wygodniejsze. – haffax
Mundury mogą być współdzielone między programami za pomocą Uniform Buffer Object (patrz np. [Shared Uniforms] (http://arcsynthesis.org/gltut/Positioning/Tut07%20Shared%20Uniforms.html)) – stativ