Podczas nakładania wielu tekstur na siatkę, jak w przypadku mapowania wypukłości, zwykle wiążę tekstury z pierwszymi kilkoma stałymi jednostkami tekstury, np.: Rozproszone = jednostka 0, wypukłość = jednostka 1, lusterko = jednostka 2, a następnie ponownie wykorzystuję je dla każdego inna siatka o różnych teksturach. Ale zawsze zastanawiałem się, dlaczego glActiveTexture
obsługuje tak wiele jednostek tekstur (w poprzednim linku jest co najmniej 80).
Przyszło mi do głowy, że jednym z możliwych sposobów zarządzania teksturami jest powiązanie różnych tekstur z każdą dostępną jednostką i pozostawienie ich włączonych, po prostu aktualizując jednolity indeks samplera. To powinno poprawić renderowanie perf poprzez zmniejszenie liczby przełączników tekstur. Jeśli masz mniej tekstur niż maksymalna liczba jednostek tekstur, nigdy nie musisz rozpinać tekstury.
Czy to standardowa praktyka w aplikacjach OpenGL w czasie rzeczywistym (uważam, że dotyczy to również D3D)? Czy są jakieś nieoczywiste implikacje wydajnościowe związane z takim podejściem? Być może narzut pamięci?