2009-08-07 19 views
6

In discussione con alcuni colleghi ci chiedevamo se il lavoro OpenGL sviluppato per Android o iPhone fosse effettivamente intercambiabile dato che entrambi supportano le specifiche.OpenGL per Android e iPhone

O è la realtà di condividere OpenGL tra le due piattaforme più un caso di stranezze, ritocchi e non facile come si poteva sperare.

risposta

8

Un'implementazione OpenGL consiste di norma in due parti: 1. Parte specifica della piattaforma. Questo ha una funzione solitamente correlata alla creazione e visualizzazione di superfici. 2. L'API OpenGL. Questa parte è la stessa su tutte le piattaforme per l'implementazione specifica di OpenGL, nel caso di Android, OpenGLES 1.0.

Ciò significa che la maggior parte del codice OpenGL deve essere facile da portare.
In C, potresti avere glLoadIdentity();
In Java su Android, qualcosa come gl.glLoadIdentity();

Quindi per la maggior parte del codice è possibile tagliare e incollare, quindi cercare e sostituire prefissi come "gl".

Ora per la parte divertente: devi davvero stare attento a quale versione stai codificando. OpenGL per il desktop ha API che non esistono in OpenGLES. Esistono anche alcuni tipi di dati OpenGL specifici per ciascuna piattaforma. Inoltre, hai a disposizione 1.0 (ad esempio Android) 1.1 (ad esempio iPhone) 2.0 (ad esempio iPhone GS). Le differenze nell'API spesso hanno a che fare con funzionalità hardware aggiuntive, quindi non è che tu possa scrivere un semplice codice wrapper per emulare le funzionalità 2.0 in 1.0/1.1.

+1

Inoltre, è necessario aggiungere che Android può supportare OGLES 1.1 e 2.0, a seconda della versione di Andriod. –

1

Entrambe le piattaforme utilizzano OpenGL ES, ma Wikipedia afferma che Android utilizza 1.0 mentre l'iPhone utilizza 1.1 (originale e 3g) e 2.0 per il 3gs link. È probabile che almeno alcuni programmi utilizzino le funzioni API non incluse nella 1.0, quindi non ci sarà piena compatibilità tra i 2 (ben 3).

5

OpenGL ES su Android viene effettuato secondo Khronos Java GLES spec JSR239, e avvolge GL chiama qualcosa come glinst.glBindBuffer (FloatBuffer.wrap (dati) ...) OpenGL ES su iPhone viene fatto usando magazzino GL. file he la stessa chiamata sarà solo guardare come glBindBuffer (dati ...)

il codice verrà non essere intercambiabili e causerà molte stranezze, anche prima di entrare in tutto il casino delle differenze tra il 1.0 1.1 e 2.0 API.