2013-02-06 10 views
7

Chciałbym mieć możliwość ustawienia mundurów poprzez ich rzeczywistych nazw w cieniującegoCzy warto zapamiętać jednolite położenie glsl w kodzie?

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f); 

muszę miejscach pamięci podręcznej w jakiejś postaci mapy?

std::map<std::string, unsigned int> // or unordered_map 

czy może OpenGL (na komputerze) tak czy inaczej cache, więc nie miałbym żadnej różnicy wydajności?

Odpowiedz

6

Specyfikacja OpenGL określa funkcjonalność, a nie wydajność. Nie ma więc sposobu, aby dowiedzieć się, jak konkretna implementacja OpenGL będzie przechowywać listę aktywnych mundurów lub jak szybko będzie glGetUniformLocation, w stosunku do wydajności std::map.

Tak naprawdę, to zależy od Ciebie. Jeśli chcesz uzyskać spójną, znaną wydajność, zrób to sam. Jeśli chcesz zaryzykować kaprysy implementacji OpenGL, zapytaj ją, kiedy tylko chcesz. Osobiście wymieniłbym nazwy równe i udałbym się z lokacjami. W ten sposób uzyskasz maksymalną wydajność.

+0

, tak jak w większości przypadków, nie możemy polegać na założeniach (dotyczących implementacji sterownika) i lepiej jest zrobić takie proste buforowanie na własną rękę. – fen