2011-10-15 8 views
5

Sto creando un'app per iPhone con cocos2d e sto cercando di utilizzare il seguente codice OpenGL ES 1.1. Tuttavia, non sto bene con OpenGL e la mia app fa uso di OpenGL ES 2.0 quindi ho bisogno di convertirlo.OpenGL ES 1.1 a 2.0 un cambiamento importante?

Quindi mi chiedevo, quanto sarebbe difficile convertire il codice seguente da ES 1.1 a ES 2.0? C'è qualche fonte che potrebbe dirmi quali metodi devono essere sostituiti ecc?

-(void) draw 
{ 
    glDisableClientState(GL_COLOR_ARRAY); 
    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisable(GL_TEXTURE_2D); 

    glColor4ub(_color.r, _color.g, _color.b, _opacity); 
    glLineWidth(1.0f); 
    glEnable(GL_LINE_SMOOTH); 

    if (_opacity != 255) 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    //non-GL code here 

    if (_opacity != 255) 
     glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); 

    glEnableClientState(GL_COLOR_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnable(GL_TEXTURE_2D); 
} 
+0

Stiamo parlando di ES o desktop qui? Fa una grande differenza Nel primo caso (ripeti il ​​tag opengl) non sarà così facile. In quest'ultimo caso (rimuovere i tag es) non dovrebbero esserci problemi di protezione. –

+0

Ciao, è iPhone quindi è ES. – FBryant87

+1

Ah sì, deve averlo sovrapposto. In questo caso il porting non sarà così facile e devi entrare negli shader GLSL. –

risposta

9

Non sarà così facile se non sei così in forma in OpenGL.

OpenGL ES 2.0 non ha più una pipeline a funzione fissa. Ciò significa che devi gestire le trasformazioni dei vertici, l'illuminazione, la texturizzazione e simili usando te stesso i vertici e gli shader dei frammenti GLSL. Devi anche tenere traccia delle matrici di trasformazione da te stesso, non ci sono più glMatrixMode, glPushMatrix, glTranslate, ....

Non ci sono più attributi di buitlin vertice (come glVertex, glColor, ...). Quindi, queste funzioni, insieme alle corrispondenti funzioni di matrice (come glVertexPointer, , ...) e gl(En/Dis)ableClientState, sono state anche riformate. Invece sono necessarie le funzioni generiche degli attributi dei vertici (glVertexAttrib, glVertexAttribPointer e gl(En/Dis)ableVertexAttribArray, che si comportano in modo simile) insieme a un vertex shader corrispondente per dare a questi attributi il ​​loro significato corretto.

Ti suggerisco di esaminare un buon tutorial o libro OpenGL ES 2.0, poiché il porting da 1.1 a 2.0 è davvero un grosso cambiamento, almeno se non hai mai sentito nulla sugli shader.

+1

Bene, grazie, potrei provare 2.0 da zero. Capisco che 2.0 offra più possibilità, ma non potrebbero anche fornire le scorciatoie di 1.1? Trovo incredibile che si siano seduti e abbiano pensato "So che nella versione 2.0 elimineremo tutto e lasceremo che le persone facciano tutto da soli". Non mi dispiace prendere tempo per imparare alcune cose di basso livello, ma guardando alcuni tutorial ci vogliono circa un'ora per fare un cubo rotante. Sono sorpreso per il semplice disegno a tratteggio, ecc. Qualcuno non è venuto con qualcosa di meglio. – FBryant87

+1

@ user666254 Hai davvero ragione che impostare semplici cose richiede più impegno ora ed è anche più difficile da imparare per i principianti, dato che non puoi fare molto senza capire l'intera API e la pipeline. D'altro canto, ora è molto più difficile fare le cose nel modo sbagliato (come 'glBegin/glEnd', ...) e l'API è molto più pulita. E non troverai nessuna applicazione seria che non usi gli shader (forse oggi, ma sicuramente non domani). –

+1

@ user666254 Qualcosa di meglio? Devono supportare un nuovo fornitore di hardware API accelerato dall'hardware, che raggiunge un sottoinsieme delle possibilità già esistenti? Non è molto probabile che accada. Per cose semplici, puoi sempre usare OpenGL ES 1.1, ovviamente. Ma da qualche parte deve essere fatto un progresso nel futuro. –