2011-01-24 13 views
31

Mam zamiar rozpocząć nowy, wieloplatformowy projekt OpenGL (podstawowy dla iPhone'a & PC). Oto główne pytanie: kierowanie na OpenGL ES 1.1 lub OpenGL ES 2.0? Lub oba? Do tej pory czytałem Open GL ES 1.1 nie jest naprawdę przestarzałe, prawda? Co zatem można powiedzieć o OpenGL ES 2.0? Programowalny wierzchołek - & Fragmentshader - Coś jeszcze? Słyszałem o zmniejszeniu wydajności za pomocą mieszania alfa - czy to prawda? Zakładam, że kod OpenGL ES 2.0 powinien również działać na PC - więc czy OpenGL ES 2.0 jest bardziej przyszłościowy?Wybierz OpenGL ES 1.1 lub OpenGL ES 2.0?

Inni deweloperzy nadal kodują OpenGL ES 1.1 lub 2.0? I dlaczego? Zakładam, że na wypadek, gdyby wybrałem openGL ES 2.0, byłby duży nakład na kompatybilność wsteczną z OpenGL ES 1.1. Ale jest tam wiele iPhone'ów bez wsparcia dla OpenGL ES 2.0 - jak mam to zrobić? Jakieś doświadczenie?

Znalazłem tylko to pytanie: OpenGL ES 1.1 or 2.0 on iPhone rodzaj istotnego, ale nie jest tak naprawdę głęboko w realizacji ... Tak więc każda rada jest mile widziany! Dziękuję bardzo!

Odpowiedz

52

To, czy korzystać z OpenGL ES 1.1 lub 2.0, zależy od tego, co chcesz zrobić w aplikacji i ilu urządzeń potrzebujesz, aby była kompatybilna. Wszystkie urządzenia iOS obsługują OpenGL ES 1.1, gdzie tylko iPhone 3G S i nowsze urządzenia (iPhone 3G S, iPhone 4, iPad oraz iPod touch trzeciej generacji) obsługują OpenGL ES 2.0. Jednak wszystkie urządzenia z systemem iOS, które są obecnie dostarczane przez Apple, są zgodne z OpenGL ES 2.0. Odsetek urządzeń, które nie obsługują OpenGL ES 2.0, spada każdego dnia. Wszystkie iPady obsługują OpenGL ES 2.0 od uruchomienia, więc masz gwarancję, że będziesz mieć wsparcie, jeśli zdecydujesz się na ten współczynnik.

OpenGL ES 2.0 i 1.1 używają różnych i dość niekompatybilnych potoków renderowania. OpenGL ES 1.1 używa potoków o ustalonej funkcji, w których podajesz dane geometrii i tekstury, ustawiasz oświetlenie itd., I pozwala OpenGL obsłużyć resztę. OpenGL ES 2.0 opiera się na programowalnym potoku, w którym dostarczasz shexy wierzchołków i fragmentów, aby poradzić sobie ze specyfiką sposobu wyświetlania zawartości na ekranie.

Ponieważ trzeba napisać własny kod, aby zastąpić nawet najbardziej podstawowe wbudowane funkcje, korzystanie z OpenGL ES 2.0 dla prostych aplikacji 3D może wymagać więcej wysiłku niż OpenGL ES 1.1. Ponadto większość przykładowych aplikacji i napisów, które tam znajdziesz, będzie nastawiona na 1.1, więc rozpoczęcie korzystania z interfejsu API 2.0 może być trudniejsze.

Jednak fakt, że można pisać własne procedury obsługi geometrii i tekstur oraz ich wyświetlania na ekranie oznacza, że ​​OpenGL ES 2.0 pozwala robić rzeczy, które po prostu nie byłyby możliwe (lub wymagałyby ogromna trudność) do zrobienia w OpenGL ES 1.1. Obejmują one efekty, takie jak animowane cieniowanie i oświetlenie okluzji otoczenia, a także pozwalają zrobić coś interesującego, np. Odciążenie masowej pracy równoległej do GPU.

Jeśli zależy Ci, aby zobaczyć kilka przykładów tego, co można zrobić z OpenGL ES 2.0, wideo dla klasy I nauczał na ten temat jest dostępnych on iTunes U i stworzyłem dwa przykładowe aplikacje here i here.

Jeśli chodzi o kompatybilność między platformami, shadery są dostępne na pulpicie OpenGL już od jakiegoś czasu, więc wszystko, co budujesz przy użyciu OpenGL ES 1.1 lub 2.0, powinno być dość przenośne na pulpicie.

Jeśli możesz wykonać renderowanie w OpenGL ES 1.1, możesz przejść w ten sposób, aby zapewnić maksymalną zgodność urządzenia. Jednak znaczna większość obecnie używanych urządzeń z iOS obsługuje OpenGL ES 2.0 (Nie mogę teraz znaleźć statystyk na ten temat, ale było to oparte na dostarczonych jednostkach), a liczba ta będzie rosnąć z czasem. OpenGL ES 2.0 pozwala ci uzyskać niesamowite efekty (patrz Epicka Cytadela), które pomogą ci odróżnić twoją aplikację od innych.

+0

Bardzo szczegółowa odpowiedź - Dziękujemy! – Constantin

+0

Aby uzupełnić tę klasyczną i niesamowitą odpowiedź, pod tym linkiem http://en.wikipedia.org/wiki/List_of_iOS_devices#Features przewiń w dół do OpenGL ES, aby zobaczyć, jak wygląda sytuacja. – Fattie

+1

@Brad Larson: 1.5 lat później, czy podałbyś podobną odpowiedź na to pytanie, czy przyniósłbyś [GLKit] (http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKit_Collection/GLKit_Collection. pdf) jako najlepszy wybór? –

0

Zasadniczo tylkothe iPhone 3G and prior (zaniechana 2010) i iPod generacji 2 i wcześniej (również przerwać września 2010) potrzebne do korzystania z OpenGL ES 1.0.

Wszystkie iPady, iPady mini i iPhone 3GS obsługują standard OpenGL ES 2.0. W rzeczywistości każde urządzenie iOS sprzedawane (jako zupełnie nowe urządzenie) po Sept 2010 obsługuje OpenGL ES 2.0.

OpenGL ES 3.0 Wsparcie

Nie tylko dostać ES 2.0 wsparcie, ale iPhone 5S + iPad Air (iPad 5. generacji) teraz OpenGL ES 3.0, a od listopada 2013 r

0

Obecnie I poważnie wątpię, że istnieje jakieś urządzenie, które nie obsługuje OpenGLES 2.0! Dodaj trochę więcej wysiłku do OpenGLES 2.0, a będziesz odporny na przyszłość, zwłaszcza, że ​​OpenGLES 3.0 jest obecnie niedostępny. W rzeczywistości odkryłem, że OpenGLES 2.0 jest łatwiejszy niż w wersji 1.1, ponieważ mogę wykonywać własne obliczenia macierzy i dokładnie określić, co dzieje się w module cieniującym.

Po drugie, jeśli zamierzasz korzystać z API OpenGLES 1.1, musisz wiedzieć, że jest on faktycznie zaimplementowany jako moduł cieniujący i że nie jest to sprzęt, jeśli ma to sens. OpenGLES 2.0 uruchamia vertex shader, który implementuje potokową funkcję OpenGLES 1.1.

To nie ma sensu - przynajmniej OpenGLES 2.0!