Byłbym skłonny wierzyć, że to zależy od konkretnego zastosowania. I tak, ponieważ bardziej wydajne byłoby mówienie o uruchomieniu 100 programów, w których każdy może mieć około 2-16 mundurów; może być lepiej mieć kompromis z dwóch. Miałem tendencję do myślenia, że być może 10 - 20 programów dla najpopularniejszych technik cieniowania byłoby wystarczające lub kilka innych. Na przykład możesz chcieć mieć jeden program/moduł cieniujący do wykonania wszystkich mapowania wypukłości, jeden do wszystkich efektów mgły, jeden do wykonywania odbić, jeden do załatania załamań.
Teraz poza zakresem swoje pytanie myślę, że będzie to dotyczyć również tutaj, jedno włączenie do swojego silnika byłoby BatchProcess & BatchManager konfigurację klasy, aby zmniejszyć ilość CPU - GPU nazywa się autobus jak to będzie również są wydajne. Nie sądzę, że istnieje 1 rozwiązanie, które pasowałoby do wszystkich twoich pytań, ponieważ uważałbym, że byłoby to specyficzne dla aplikacji, podobnie jak ustalenie relacji pomiędzy ilością partii (wiader) wierzchołków (prymitywów), które posiadałby twój silnik a liczbą wierzchołki, które zawierałaby każda z tych partii.
Aby to wyjaśnić nieco lepiej: jedna gra może zawierać 4 kontenery lub partie, w których każda partia może pomieścić do 10 000 wierzchołków, aby można było uznać, że jest pełna, zanim BatchManager zdecyduje się opróżnić wiadro wysyłające wszystkie te wierzchołki na kartę graficzną dla rurociągu renderowania, który ma być przetwarzany i rysowany, gdy inna gra może mieć 10 wiader z 5000 wierzchołków, lub inna gra może mieć 8 segmentów z 120000 wierzchołkami.
Więc może być kompromis z próbą połączenia obu zgodnie z twoimi potrzebami. Jeśli masz 1 pojedynczy program z setkami mundurów; pojedynczy program jest łatwiejszy do zarządzania w ramach potoku, ale moduły cieniujące są zbyt kłopotliwe, aby je odczytać i nimi zarządzać.Z drugiej strony, programy cieniujące z bardzo niewielką liczbą mundurów są dość łatwe do odczytania i zarządzania, ale posiadanie 100 programów jest nieco trudniejsze w zarządzaniu procesorem przed połączeniem i wysłaniem, aby były poprawnie renderowane. Osobiście spróbuję znaleźć pośrednie miejsce, w którym mam wystarczająco dużo programów, aby wykonać każde konkretne zadanie, które jest całkowicie unikalne od siebie nawzajem, takie jak zagęszczenie mgły na jednym i wolumetryczne odwzorowywanie cienia na innym, gdzie każdy program ma wystarczającą liczbę mundurów do zrobienia. wymagane obliczenia.
Następnym krokiem będzie wykonanie kilku testów porównawczych, aby sprawdzić, na ile efektywność i obciążenie są zrównoważone, aby dokonać odpowiednich korekt.
Uważam, że to prawda. Widząc jak OpenGL4 w pewnym stopniu reprezentuje DX11 w funkcjach, poszedłem do przodu i spojrzałem na "dziennik zmian" na 4.1, i wydaje się, że jest (http://en.wikipedia.org/wiki/Opengl#OpenGL_4.1): "Zredukowany razy kompilacji shaderów z możliwością zapytania i załadowania pliku binarnego dla obiektów programu cieniującego " –