Comment l'iPhone sait quel contexte OpenGL ES à utiliser entre 1.1 et 2.0?
-
04-10-2019 - |
Question
J'ai été en train de creuser autour du filet récemment et a remarqué quelques tutoriels vidéo montrent un modèle plus ancien (avant SDK 3.2) avec un contexte OpenGL ES. Maintenant, il y en a deux, qui, je l'ai glané sont les deux versions d'OpenGL ES disponibles sur les nouveaux dispositifs de iMobile.
Puis-je utiliser le plus vieux ou dois-je faire tout deux fois? Comment puis-je dire l'iPhone d'utiliser le contexte plus, ou seront-ils le faire automatiquement?
La solution
Par défaut, le modèle tente de créer un contexte ES2, et si cela échoue, puis tente de créer un contexte ES1. Si vous voulez travailler avec ES 1.1 seul (qui est pris en charge sur tous les appareils), vous pouvez simplement supprimer toutes les références à ES2 à partir du modèle de projet.
Autres conseils
Pour élargir ce Frogblast dit, le modèle de code définit deux classes: ES1Renderer
et ES2Renderer
. La classe EAGLView
essaie d'abord de créer une instance de ES2Renderer
, mais si cela échoue, il crée un ES1Renderer
. L'échec se réalise si l'ES2Renderer
est incapable de mettre en place un contexte OpenGL ES 2.0 en utilisant le code suivant:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
[self release];
return nil;
}
Si un périphérique prend en charge OpenGL ES 2.0, cela devrait réussir. Dans le cas contraire, l'application revient à la ES1Renderer
OpenGL ES 1.1 renderer.
La raison pour laquelle l'application a deux classes de rendu différents est que OpenGL ES 1.1 et 2.0 ont pipelines de rendu différents et incompatibles. OpenGL ES 2.0 vous permet de créer des shaders programmables pour certains effets étonnants, mais il peut être plus difficile à utiliser pour des tâches simples que OpenGL ES 1.1.
Beaucoup de gens ajouter à leur application des solutions de repli si elles utilisent OpenGL ES 2.0, car seul l'iPhone 3G S et les périphériques plus tard supportent cela ne API. Toutefois, si vous développez une application iPad uniquement, vous pouvez supposer qu'il aura 2.0 soutien. Vous pouvez également restreindre votre application à l'exécution sur les appareils avec cette capacité en ajoutant la clé de opengles-2
au UIRequiredDeviceCapabilities
dans votre Info.plist.
Vous pouvez utiliser OpenGL ES 1.1 très bien sur les appareils plus récents, donc si vous voulez désactiver le chemin 2.0 de rendu, vous pouvez avoir le EAGLView dans le modèle ignorer la classe ES2Renderer
et fonctionnent avec le ES1Renderer
. Vous pouvez également prendre le code OpenGL ES du ES1Renderer
et juste le placer dans le EAGLView.