/ / Skąd iPhone wie, którego kontekstu OpenGL ES użyć między 1.1 a 2.0? - iPhone, iPad, OpenGL-ES, iPhone-SDK-3.2

W jaki sposób iPhone zna kontekst OpenGL ES, który ma być używany w wersjach 1.1 i 2.0? - iphone, ipad, opengl-es, iphone-sdk-3.2

Kopałem ostatnio w sieci izauważyłem, że niektóre samouczki wideo pokazują starszy szablon (wcześniejszy niż SDK 3.2) z jednym kontekstem OpenGL ES. Teraz są dwie z nich, które, nauczyłem się, są dwie wersje OpenGL ES dostępne na nowszych urządzeniach iMobile.

Czy mogę po prostu użyć starszego, czy muszę zrobić wszystko dwa razy? Jak powiedzieć iPhone'owi, aby używał starszego kontekstu, czy też zrobi to automatycznie?

Odpowiedzi:

0 dla odpowiedzi № 1

Domyślnie szablon próbuje utworzyć ES2kontekst, a jeśli to się nie powiedzie, wówczas spróbuje utworzyć kontekst ES1. Jeśli chcesz pracować z samym ES 1.1 (który jest obsługiwany na wszystkich urządzeniach), możesz po prostu usunąć wszystkie odniesienia do ES2 z projektu szablonu.


4 dla odpowiedzi nr 2

Aby rozwinąć to, co powiedział Frogblast, kod szablonu definiuje dwie klasy: ES1Renderer i ES2Renderer. The EAGLView klasa najpierw próbuje utworzyć ES2Renderer wystąpienie, ale jeśli to się nie powiedzie, tworzy ES1Renderer. Awaria pojawia się, jeśli ES2Renderer nie może skonfigurować kontekstu OpenGL ES 2.0 przy użyciu następującego kodu:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
[self release];
return nil;
}

Jeśli urządzenie obsługuje OpenGL ES 2.0, powinno się to powieść. Jeśli nie, aplikacja wraca do ES1Renderer Mechanizm renderujący OpenGL ES 1.1.

Powód, dla którego aplikacja ma dwa różneklasy renderowania polegają na tym, że OpenGL ES 1.1 i 2.0 mają różne i niekompatybilne potoki renderowania. OpenGL ES 2.0 pozwala tworzyć programowalne moduły cieniujące dla niektórych oszałamiających efektów, ale korzystanie z prostych zadań może być trudniejsze niż OpenGL ES 1.1.

Wiele osób dodaje awarie do swojej aplikacji ifużywają OpenGL ES 2.0, ponieważ tylko iPhone 3G S i nowsze urządzenia obsługują to nigdy API. Jeśli jednak opracowujesz aplikację tylko na iPada, możesz założyć, że będzie ona obsługiwać 2.0. Możesz również ograniczyć aplikację do działania na urządzeniach z tą funkcją, dodając opengles-2 klucz do UIRequiredDeviceCapabilities w swoim Info.plist.

Możesz używać OpenGL ES 1.1 dobrze na nowszych urządzeniach, więc jeśli chcesz wyłączyć ścieżkę renderowania 2.0, możesz włączyć EAGLView w szablonie, ignorując ES2Renderer klasy i po prostu pracuj z ES1Renderer. Możesz również pobrać kod OpenGL ES z ES1Renderer i po prostu umieść go w EAGLView.