Dla jakiej wersji OpenGL powinienem kodować, biorąc pod uwagę względy zgodności i wydajności? [Zamknięte]

19

Gdy specyfikacja OpenGL jest aktualizowana, dodają tylko funkcje. Teoretycznie więc najnowszy i najlepszy sprzęt z obsługą profili Core i Compatibility powinien działać bardzo stary kod OpenGL1.1. Okazało się to prawdą. Spędziłem 12 miesięcy ucząc się OpenGL1.1 i dobrze go rozumiem.

Przeczytałem kilka rozdziałów jednej z tych nowych, wymyślnych książek o OpenGL4.2. Niemal wszystkie funkcje, na których polegam, były przestarzałe (takie jak listy wyświetlania), co pozwala mi założyć, że są lepsze sposoby robienia tych wszystkich rzeczy.

Rozważmy, że 1.1 będzie prawdopodobnie w pełni obsługiwane przez WSZYSTKIE nowoczesne urządzenia. Wersja 1.1 została wydana w 1992 roku. Nie koduję na poważnie jedynie obsługi 20-letnich komputerów PC. :-p Myślę, że rozsądnie jest założyć, że większość graczy korzysta ze sprzętu, który osiąga najniższy poziom w średnim wieku około 5 lat.

Myślę, że nowsze metody zostały zaprojektowane tak, aby były jedną z dwóch rzeczy: lepszą wydajnością lub łatwiejszym kodowaniem. Czytałem gdzieś, że nigdy nie jest to jedno i drugie! XD

Jaka wersja OpenGL jest najczęściej obsługiwana przez sprzęt sprzed około 5 lat? Z jakiej wersji warto skorzystać, biorąc pod uwagę te względy?

Mydliny
źródło

Odpowiedzi:

19

Biorąc pod uwagę twoje rozważania, wtedy pojawiłem się, aby zobaczyć, kiedy specyfikacje OpenGL dla każdej wersji zostały wydane, a także wziąłem pod uwagę ogólne informacje z tego, co widziałem.

OpenGL 3, który wprowadził FBO, VAO i inne rzeczy, został wydany 11 lipca 2008 roku, prawie 5 lat temu. Oczywiście nie można oczekiwać, że wszystkie karty po tej dacie natychmiast będą miały dostęp do OpenGL 3.

Patrząc na ankietę sprzętową Steam , 40% to DirectX 10. Ponieważ OpenGL 3 wymagał podobnej karty graficznej, ogólnie można bezpiecznie założyć, że większość kart DirectX 10 obsługuje przynajmniej OpenGL 3.

OpenGL 3 jest obsługiwany na kartach od samego początku do serii GeForce 8xxx, które były dość popularne, jeśli dobrze pamiętam. Warto również zauważyć, że Intel HD 2000 i 3000 Graphics (Sandy bridge) obsługują tylko do OpenGL 3, więc miej to na uwadze, jeśli planujesz na nie celować.

Wniosek: OpenGL 3 to dobry zakład (pamiętaj również, że większość graczy, w zależności od grupy docelowej, będzie prawdopodobnie miała lepszy sprzęt niż średnia).

DMan
źródło
To świetna odpowiedź. Był to dokładnie taki wgląd, którego szukałem.
Suds
3
„Warto również zauważyć, że Intel HD 2000 i 3000 Graphics (Sandy bridge) obsługują tylko do OpenGL 3” Uwaga: obsługują tylko GL 3.1 (ponieważ Intel po prostu nie obchodzi). A ponieważ jest to Intel, „wsparcie” należy przyjmować z odrobiną soli. Ich sprzęt może obsługiwać 3.3, ale tego nie ujawniają (bo znowu ich to nie obchodzi). W ogóle unikałbym używania OpenGL 3.x na sprzęcie Intela. Rzeczywiście unikałbym robienia czegokolwiek opartego na shaderze na sprzęcie Intela.
Nicol Bolas
Powstaje pytanie; jak nasycony jest rynek sprzętem Intel? Czy w ogóle nie warto dbać o grafikę Intel i używać OpenGL3.x? Czy jest wystarczająca ilość sprzętu graficznego Intel, żeby mieć znaczenie?
Suds
1
Jednym z problemów jest OSX. Najnowsza wersja 10.7.x obsługuje tylko OpenGL 3.2 , 10.6.x obsługuje tylko 3.0 (a może nawet 2.x). 10.5.x różni się znacznie w zależności od karty, 1.3, 1.5 i 2.0 są możliwościami. Systemy te na zawsze utkną w tych wersjach OpenGL, chyba że użytkownik zapłaci pieniądze Apple za aktualizację. Nie ma żadnych aktualizacji sterowników karty graficznej dla OSX, które aktualizowałyby OpenGL. Inne problemy to niektóre wbudowane chipsety Intel używane w netbookach. Wiele z nich to tylko OpenGL 2.0 lub gorzej.
David C. Bishop
A potem masz 3DS, który wciąż
gra
8

Chciałbym zacząć tutaj: http://store.steampowered.com/hwsurvey

Nie celowałbym tak długo, jak procent użytkowników, na przykład, jeśli celujesz w 4cpus, trafisz tylko 45% użytkowników, ale jeśli pracujesz do 2, dostaniesz blisko 90%

łosoś łososiowy
źródło
1
Gdzie widziałeś OpenGL? Widzę tylko DirectX (co jest interesujące, jeśli planujesz tylko atakować system Windows).
DMan
Zgaduję, że wykonujesz prace nóg w oparciu o awarię karty graficznej
Jimmy
Tak - nie widziałem nic na temat OpenGL - ale możesz to uzyskać z modeli kart, a nawet uważam, że istniałaby spora korelacja między wersjami DirectX i OpenGL.
łosoś łosoś
3

Odpowiedź zależy od tego, czy musisz uruchomić grafikę firmy Intel wydaną w podanym terminie, czy nie.

Jeśli tak, ogranicz się do OpenGL 2.1 (lub nawet 1.5), jeśli nie, to 3.x wydaje się rozsądny.

Tak, starsze wersje OpenGL nadal działają i tak, z jednej perspektywy mogą wydawać się prostsze. Tam, gdzie rzeczy wychodzą z kształtu, jest to, gdy próbujesz robić rzeczy (i robisz to), których nie wspierają zbyt łatwo. OpenGL 1.1 to nie tylko trudna droga - często jest niemożliwa, jeśli chcesz osiągnąć określone wyniki.

Maximus Minimus
źródło
Przyszło mi do głowy, że powinienem dodać przykład, dlaczego 1.1 jest często niemożliwe. Jednym z nich, który można łatwo powiązać z funkcjonalnością 1.1, jest wiele przejść mieszania. Ponieważ nie masz żadnych bloków FBO i jesteś ograniczony do 8 bitów na tekstury składników, przekonasz się, że w miarę upływu czasu mieszanie zaczyna tracić precyzję. Użyj przepustek 3/4/5, a wynik końcowy zacznie wyglądać (lub gorzej niż) grafikę 16-bitową lub 8-bitową. Jednak wielokrotne przejścia są często wymagane do symulacji efektów wyższego poziomu (podstawowy multiteksturowanie to taki, który wszyscy znamy) z zestawem funkcji 1.1.
Maximus Minimus
Nawet grafika Intel HD (Sandy / Ivy Bridge) obsługuje tylko OpenGL 3.1, a to już rok. Wszystko sprowadza się do tego, czy chcesz obsługiwać tanie (lub o niskiej mocy) laptopy.
Steve Howard
2
@ SteveHoward: Grafika Intel HD może obsługiwać źródło
Janus Troelsen
Ten artykuł pochodzi z około 3 miesięcy po opublikowaniu komentarza.
Steve Howard
1

Po pierwsze rzeczy OpenGL 1.1, takie jak Listy wyświetlania, będą nadal działać w nowym kontekście, pod warunkiem, że masz profil zgodności (co zwykle ma miejsce). Jedynym problemem jest to, że oczekujesz przeniesienia do OpenGL ES, jednej z bibliotek graficznych specyficznych dla konsoli (są one zwykle usuwane z OpenGL podobnie jak OpenGL ES) lub nawet WebGL (co i tak wymagałoby sporo przeróbki).

Osobiście polecam używanie shaderów wierzchołków / fragmentów i VBO. Są już od dłuższego czasu i oferują świetne ulepszenia wydajności. Prawdopodobnie możesz nawet zapewnić prosty powrót, jeśli zawrzesz funkcje w klasie.

Możesz także być w stanie emulować takie obiekty, jak obiekty tablicy wierzchołków.

David C. Bishop
źródło
0

Z pięcioletnim sprzętem niektórzy ludzie nadal używają XP. A to oznacza, że ​​nie można nawet kodować za pomocą DirectX 10 lub OpenGL 3. A OpenGL 3 ma wiele funkcji, z których naprawdę skorzystasz, takich jak bufory ramki i tym podobne. Szczerze mówiąc, podniosłem nieco wymagania systemowe, abyś mógł uwzględnić te funkcje.

Avi
źródło
8
-1: „Z pięcioletnim sprzętem niektóre osoby nadal używają XP. A to oznacza, że ​​nie można nawet kodować za pomocą DirectX 10 lub OpenGL 3.” Nie prawda. OpenGL 3.x działa dobrze w XP. Tylko D3D10 jest ograniczony z XP z powodów API / sterowników. Nie ma to nic wspólnego ze sprzętem.
Nicol Bolas,
0

Oprogramowanie 3d często ma ścieżki kodu zarówno dla „podstawowej” wersji graficznej interfejsu API, jak i „najnowszej i najlepszej” wersji interfejsu API.

Typowymi wersjami graficznymi linii bazowej są D3D9 i OpenGL 2.1 / GLSL 120 .. Oba są wyraźnie brakujące shaderów geometrii, ponieważ stary sprzęt ich nie obsługuje.

Inną opcją podstawową jest ANGLE, czyli GLES 2.0 plus EGL, który działa na D3D9, stacjonarnym OpenGL i mobilnym GLES 2.0. Jest to zaplecze dla Google Chrome i Webgl w Chrome i Firefox.

http://code.google.com/p/angleproject/

Jeśli chodzi o wybraną „najnowszą i najlepszą” wersję, jest to trudniejsze. Im najnowszy interfejs API i sprzęt, na który celujesz, tym lepiej wyglądające funkcje możesz obsługiwać - ale tylko na najnowszym i najlepszym sprzęcie.

David Jeske
źródło