2011-01-24 6 views
31

Avvierò un nuovo progetto openGL cross-plattform (primario per iPhone & PC). Quindi c'è la domanda principale: il targeting per OpenGL ES 1.1 o OpenGL ES 2.0? O entrambi? Finora ho letto Open GL ES 1.1, non è davvero deprecato, non è vero? Quindi cosa direbbe per openGL ES 2.0? Vertice programmabile - & frammenti - Qualcos'altro? Ho sentito parlare di riduzione delle prestazioni con l'alpha blending o così - può essere vero? Presumo che il codice openGL ES 2.0 dovrebbe anche funzionare su PC - Quindi openGL ES 2.0 è davvero più consapevole del futuro?Scegli OpenGL ES 1.1 o OpenGL ES 2.0?

Gli altri sviluppatori là fuori stanno ancora codificando per OpenGL ES 1.1 o 2.0? E perché? Suppongo che nel caso in cui scelgo OpenGL ES 2.0, ci sarebbe un sacco di spese generali per la compatibilità con le versioni precedenti con openGL ES 1.1. Ma ci sono molti iPhone là fuori senza il supporto per OpenGL ES 2.0: come dovrei farlo? Qualche esperienza là fuori?

Ho trovato solo questa domanda: OpenGL ES 1.1 or 2.0 on iPhone tipo di pertinente, ma non è molto approfondita dell'implementazione ... Quindi qualsiasi consiglio è benvenuto! Grazie mille!

risposta

52

Se utilizzare OpenGL ES 1.1 o 2.0 dipende da cosa si desidera fare nella propria applicazione e da quanti dispositivi è necessario che siano compatibili. Tutti i dispositivi iOS supportano OpenGL ES 1.1, dove solo l'iPhone 3G S ei nuovi dispositivi (iPhone 3G S, iPhone 4, iPad e iPod touch di terza e quarta generazione) supportano OpenGL ES 2.0. Tuttavia, tutti i dispositivi iOS attualmente in vendita sono compatibili con OpenGL ES 2.0. La percentuale di dispositivi che non supportano OpenGL ES 2.0 è in calo ogni giorno. Tutti gli iPad hanno supportato OpenGL ES 2.0 dal lancio, quindi hai la garanzia di avere il supporto se scegli quel fattore di forma.

OpenGL ES 2.0 e 1.1 utilizzano condotte di rendering diverse e abbastanza incompatibili. OpenGL ES 1.1 utilizza una pipeline di funzioni fisse, in cui si inseriscono dati di geometria e texture, impostazione di illuminazione, ecc., E lascia che OpenGL gestisca il resto per te. OpenGL ES 2.0 è basato su una pipeline programmabile, in cui si forniscono vertex e frammenti di shader per gestire le specifiche del modo in cui il contenuto viene reso sullo schermo.

Poiché è necessario scrivere il proprio codice per sostituire anche le funzioni di base più semplici, l'utilizzo di OpenGL ES 2.0 per semplici applicazioni 3D può richiedere uno sforzo maggiore rispetto a OpenGL ES 1.1. Inoltre, la maggior parte delle applicazioni e annotazioni di esempio che trovi in ​​questo articolo saranno orientate verso 1.1, quindi può essere più difficile iniziare con l'API 2.0.

Tuttavia, il fatto che sia possibile scrivere le proprie routine per gestire la geometria e le trame e il modo in cui vengono visualizzate sullo schermo significa che OpenGL ES 2.0 consente di eseguire operazioni che semplicemente non sarebbero possibili (o richiederebbero un tremendo sforzo) da fare in OpenGL ES 1.1. Questi includono effetti come l'ombreggiatura dei cartoni animati e l'illuminazione di occlusione ambientale, oltre a permetterti di fare qualcosa di interessante come scaricare il lavoro in parallelo con la GPU.

Se vi interessa vedere alcuni esempi di ciò che si può fare con OpenGL ES 2.0, il video per la classe ho insegnato su questo argomento sono disponibili on iTunes U, e ho creato due applicazioni di esempio here e here.

Quando si tratta di compatibilità cross-platform, shaders sono stati disponibili su OpenGL desktop per un po 'di tempo, in modo che tutto quello che costruire utilizzando OpenGL ES 1.1 o 2.0 dovrebbe essere abbastanza portatile al desktop.

Se è possibile eseguire il rendering desiderato in OpenGL ES 1.1, è possibile procedere in questo modo per garantire la massima compatibilità del dispositivo. Tuttavia, la maggior parte dei dispositivi iOS attualmente in uso supporta OpenGL ES 2.0 (Non riesco a trovare le statistiche al momento, ma era basato sulle unità vendute) e quel numero crescerà nel tempo. OpenGL ES 2.0 ti consente di ottenere alcuni effetti sorprendenti (vedi Epic Citadel) che possono aiutarti a distinguere la tua applicazione dagli altri là fuori.

+0

Risposta molto dettagliata - Grazie! – Constantin

+0

Per completare questa risposta classica e sorprendente, a questo link http://en.wikipedia.org/wiki/List_of_iOS_devices#Features scorrere verso il basso fino a OpenGL ES per una visualizzazione utile della situazione. – Fattie

+1

@Brad Larson: 1.5 anni dopo, vorresti dare una risposta simile a quella o porterebbe in [GLKit] (http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKit_Collection/GLKit_Collection. pdf) come la scelta migliore? –

-2

ho scelto 2.0 solo per cubemap

0

Fondamentalmente solothe iPhone 3G and prior (fuori produzione 2010) e iPod 2 ° generazione e precedenti (fuori produzione anche settembre 2010) hanno bisogno di utilizzare OpenGL ES 1.0.

Tutti gli iPad, mini iPad e iPhone 3GS in poi, supportano OpenGL ES 2.0. Infatti, qualsiasi dispositivo iOS venduto (come un dispositivo nuovo di zecca) dopo il settembre 2010 supporta OpenGL ES 2.0.

OpenGL ES 3.0 sostegno

Non solo si ottiene ES 2.0 sostegno, ma l'iPhone 5S + iPad Air (iPad 5a generazione) ora OpenGL ES 3.0, a partire dal novembre 2013.

0

Attualmente, Dubito seriamente che ci sia qualche dispositivo là fuori che non supporta OpenGLES 2.0! Metti un po 'più di impegno in OpenGLES 2.0, e sarai a prova di futuro, soprattutto dal momento che OpenGLES 3.0 è fuori. In realtà, ho trovato OpenGLES 2.0 più semplice di 1.1, semplicemente perché posso eseguire i miei calcoli con le matrici e specificare esattamente ciò che accade in uno shader.

L'altra cosa è che se si utilizza l'API di OpenGLES 1.1, è necessario sapere che è effettivamente implementato come uno shader e che non è una cosa hardware, se ciò ha senso. OpenGLES 2.0 esegue un vertex shader che implementa una pipeline a funzione fissa OpenGLES 1.1.

È un gioco da ragazzi - OpenGLES 2.0 almeno!