Domanda

Ho scavato intorno alla rete di recente e notato alcuni tutorial video mostra un modello più vecchio (pre SDK 3.2) con un contesto OpenGL ES. Ora ci sono due di loro, che, ho spigolato sono le due versioni di OpenGL ES disponibili sui dispositivi iMobile più recenti.

Can mi basta usare il più vecchio o devo fare tutto due volte? Come faccio a dire l'iPhone per utilizzare il contesto più vecchio, o intende farlo automaticamente?

È stato utile?

Soluzione

Per impostazione predefinita, i tentativi modello per creare un contesto ES2, e se fallisce, poi cerca di creare un contesto ES1. Se si desidera lavorare con ES 1.1 da solo (che è supportato su tutti i dispositivi), si può solo eliminare tutti i riferimenti a ES2 dal progetto modello.

Altri suggerimenti

Per espandere su ciò che ha detto Frogblast, il codice del modello definisce due classi: ES1Renderer e ES2Renderer. La classe EAGLView prima cerca di creare un'istanza ES2Renderer, ma se fallisce crea un ES1Renderer. Il fallimento avviene se il ES2Renderer non è in grado di creare un contesto OpenGL ES 2.0 utilizzando il seguente codice:

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

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

Se un dispositivo supporta OpenGL ES 2.0, questo dovrebbe avere successo. In caso contrario, l'applicazione ricade sulla ES1Renderer OpenGL ES 1.1 renderer.

Il motivo per l'applicazione dispone di due diverse classi di rendering è che OpenGL ES 1.1 e 2.0 sono diversi e incompatibili pipeline di rendering. OpenGL ES 2.0 consente di creare shader programmabili per alcuni effetti sorprendenti, ma può essere più difficile da utilizzare per le attività semplici di OpenGL ES 1.1.

Molte persone aggiungere fallback alla loro applicazione se usano OpenGL ES 2.0, perché solo l'iPhone 3G S e dispositivi successivi hanno il supporto per questo non è mai API. Tuttavia, se si sta sviluppando un iPad-only applicazione, si può supporre che avrà il sostegno 2.0. Si potrebbe inoltre limitare l'applicazione per l'esecuzione su dispositivi con questa funzionalità aggiungendo la chiave opengles-2 alla UIRequiredDeviceCapabilities nel vostro Info.plist.

È possibile utilizzare OpenGL ES 1.1 bene sui dispositivi più recenti, quindi se si desidera disattivare il percorso di rendering 2.0 è possibile avere l'EAGLView nel modello ignora la classe ES2Renderer e proprio lavoro con il ES1Renderer. Si potrebbe anche prendere il codice OpenGL ES dalla ES1Renderer e basta posizionarlo all'interno del EAGLView.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top