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