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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top