2008-11-07 11 views
17

Es scheint, dass die gesamte Dokumentation, die ich über OpenGL-ES finden kann, etwas zu der Wirkung von "OpenGL-ES ist wie OpenGL, aber ohne viel Zeug. Zum Beispiel gibt es kein glBegin oder glEnd. "Was ist "in" und "out" von OpenGL-ES? (Portierung von OpenGL)

Ok, das ist großartig. Also, was ELSE gibt es nicht? Oder gibt es eine Liste von in? Oder vielleicht ein Portierungsführer?

(genauer gesagt, ich versuche, eine vorhandene GL App auf das iPhone zu bewegen, obwohl ich meine Q auf das iPhone will nicht notwendigerweise begrenzt.) Verknüpfen

Antwort

12

Das "OpenGL ES 1.1.12 Difference Specification" (PDF) von the OpenGL ES 1.X info page at Khronos.org geht durch die Unterschiede zwischen OpenGL ES 1.X und OpenGL 1.5. OpenGL ES 1.1 ist die Version, die auf dem iPhone verwendet wird.

Die Differenzspezifikation ist nicht das einfachste Dokument, das ich jemals gesehen habe, aber es ist einfacher zu lesen als die OpenGL-Spezifikationen im Allgemeinen. Ich empfehle, eine Liste der von Ihnen aufgerufenen OpenGL-Funktionen zu erhalten und dann das Differenzdokument für sie zu durchsuchen. Es wird Ihnen zeigen, wenn sie in OpenGL ES unterstützt werden, und wenn die Unterstützung nur teilweise ist, können Sie für weitere Informationen zu der vollständigen Spezifikation gehen.

+0

Ok, das funktioniert. Entschuldigung, neu in ES, und fand die Khronos-Seite erst nach dem Posten der Frage (d'oh!) – Olie

13

Ein Teil des Problems bei der Beantwortung Ihrer Frage ist, es gibt viele Dinge, die fehlen und oft ist es eine Reihe von selten verwendeten oder nicht anwendbaren Bit-Flags. Das beste Dokument, das die Unterschiede beschreibt, sind die Implementierungsheader.

Für das Framework, an dem ich arbeite, habe ich beschlossen, es komplett plattformübergreifend zwischen Desktop und iPhone zu machen. Der Ansatz, den ich bei der Berechnung verwende, ist Code in OpenGL schreiben und sehen, wo es bricht. Dann schauen Sie in

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h

und vergleichen Sie es mit

/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h

Diese Header sind sehr einfach und leicht zu folgen.

Der Hauptunterschied, den ich bisher entdeckt habe, ist, dass es kein GLdouble gibt (alles, was GLdouble wie glOrtho und glFrustum verwendet, hat eine GLfloat Version glOrtof und glFrustumf). Auch gibt es keine gluPerspective oder gluPerspektiven aus irgendeinem Grund.

Hier ist ein direkter Ersatz:

void gluPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar) 
{ 
    GLfloat xmin, xmax, ymin, ymax; 

    ymax = zNear * tan(fovy * M_PI/360.0); 
    ymin = -ymax; 
    xmin = ymin * aspect; 
    xmax = ymax * aspect; 

    glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar); 
} 

Da Sie keine glBegin und glEnd haben, müssen Sie alles über glDrawArray oder glDrawElements (bevorzugt) tun. Eine schnelle und schmutzige Beispiel:

void draw(short x, short y, short w, short h) 
{ 
    const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 }; 
    const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h }; 

    glVertexPointer(2, GL_SHORT, 0, v); 
    glEnableClientState(GL_VERTEX_ARRAY); 

    glTexCoordPointer(2, GL_SHORT, 0, t); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 
} 

Check out Apple Technical Note TN2230 "Optimizing OpenGL ES for iPhone OS" für einige andere Hinweise, die bei der Portierung von Nutzen sein könnte.

Portieren war bisher ziemlich schmerzfrei für mich, und wenn Ihre App einige ziemlich fortgeschrittenen OGL Sachen oder verwendet völlig nicht unterstützte Funktionalität Sie Ihre Probleme finden, indem Sie den Build-Knopf und eine einfache Lösung wird durch Graben ein wenig in den gl.h-Dateien. In der Tat, die Portierung auf ES zwingt Sie dazu, einen guten, optimierten Rendering-Code zu schreiben.

+0

Interessant: Ich kann diese technische Notiz nirgends finden.Irgendwelche Ideen? – cbrulak

+0

Hier ist der direkte Link, obwohl Sie natürlich iPhone Developer Zugang benötigen (kostenlos). http://developer.apple.com/iphone/library/technotes/tn2008/tn2230.html –

+0

Nein - Apple hat (charakteristisch) einfach die Seite gelöscht, nach dem Aussehen der Dinge. :( – Adam