Tworzę silnik gry, który będzie działał tylko na nowoczesnym sprzęcie (Shader model 4+). Wydaje mi się, że zanim skończę, nie będzie to tak nieracjonalnym wymogiem.
Moje pytanie brzmi: ile tekstur mogę oprawić jednocześnie na nowoczesnej karcie graficznej? 16 byłoby wystarczające. Czy mogę oczekiwać, że większość nowoczesnych kart graficznych będzie obsługiwać taką liczbę tekstur?
Mój GTX 460 wydaje się obsługiwać 32, ale nie mam pojęcia, czy jest to reprezentatywne dla większości nowoczesnych kart graficznych.
Odpowiedzi:
Liczba tekstur, które można powiązać z OpenGL, nie wynosi 32 lub 16 . To nie jest to, co dostajesz
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Ta funkcja pobiera liczbę tekstur, które mogą być dostępne przez moduł cieniujący fragmenty .Zobacz, każdy moduł cieniujący ma swój własny limit liczby tekstur, których może użyć . Jednak istnieje również całkowita liczba tekstur, których można użyć, kropka. Jest to zdefiniowane (w OpenGL) przez
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Istnieją więc dwa ograniczenia: tekstury na etap i tekstury całkowicie powiązane.
OpenGL 3.x określa minimalną liczbę limitów na etap wynoszącą 16, więc sprzęt nie może mieć mniej niż 16 tekstur na etap. Może mieć wyższy limit, ale wiesz, że otrzymujesz co najmniej 16. 3.x określa minimalną liczbę dla tekstur związanych łącznie na 48. AKA: 16 * 3 etapy. Podobnie, GL 4.x definiuje liczby jako 16 tekstur na etap i 96 tekstur łącznie (tj. 16 * 6 etapów, włączając shadery obliczeniowe).
Ponownie, są to liczby minimalne . Sprzęt może (i robi) się różnić.
Jeśli chodzi o konkretny sprzęt, można oczekiwać, że dowolny sprzęt klasy DX10 będzie pasował do tych liczb. Sprzęt klasy DX11 ma pewną wariancję; Układy NVIDIA (GeForce 4xx +) i wyższej klasy układy AMD (aka: rdzenie GCN) mogą mieć więcej niż 16 na stopień.
źródło
Uważam, że 32 to maksymalna liczba tekstur, które można obecnie związać. O ile wiem, nawet seria 8800 miała 32 jednostki tekstur.
O ile mi wiadomo, do obsługi OpenGL 4.x potrzebna będzie karta Fermi lub nowsza karta NVIDIA (lub odpowiednia karta AMD), wszystkie modele z wyższej półki wydają się mieć 32 jednostki, podczas gdy karty z najniższej klasy (na przykład GT 430) ) mają 16. Jednak patrząc na arkusze specyfikacji AMD, wyświetlają numery takie jak 80 lub 128 jednostek tekstur, ale wymieniają 32 jednostki ROP w kolorze, które wydają się pozostawać niezmienne przez pokolenia.
Z drugiej strony GTX 480 ma 60 jednostek tekstur i 48 jednostek ROP, podczas gdy karty z niższej półki, takie jak 430, mają podobno tylko 16 jednostek tekstur i 4 jednostki ROP. Ogólnie rzecz biorąc, nie jestem do końca przekonany, czy którykolwiek z nich jest liczbą, której tak naprawdę szukasz.
Możesz jednak sprawdzić liczbę jednostek tekstur dostępnych do renderowania potoków funkcji nie ustalonych za pomocą
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
, więc jeśli masz dostęp do różnorodnego sprzętu, możesz to sprawdzić.EDYCJA: ta strona pozwala porównać zgłaszane możliwości openGL wszystkich rodzajów kart wideo, które powinny dać ci potrzebne liczby: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PS: AMD i nvidia niedawno wprowadziły „bezbłędne tekstury” (amd ma na to inną nazwę), która pozwala na używanie dużej liczby tekstur bez wiązania ich z jednostkami tekstowymi, w tej chwili jest to dostępne tylko w openGL.
źródło