あなたの質問に答える際の問題の一部は、多くのものが欠けていることであり、多くの場合、めったに使用されない、または適用できないビット フラグのセットです。違いを説明する最良のドキュメントは、実際には実装ヘッダーです。
私が取り組んでいるフレームワークについては、デスクトップと iPhone の間で完全にクロス プラットフォームにすることにしました。それを理解するために私が取ったアプローチは、OpenGL でコードを書き、それがどこで壊れているかを確認することです。次に、中を見てください
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/
System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h
そしてそれを比較してください
/Developer/SDKs/MacOSX10.5.sdk/
System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h
これらのヘッダーは非常に単純で、簡単に理解できます。
これまでに発見した主な違いは、GLdouble がないことです (glOrtho や glFrustum などの GLdouble を使用するものには、GLfloat バージョンの glOrthof と glFrustumf があります)。また、何らかの理由で gluPerspective または gluPerspectivef がありません。
これが置換のドロップです:
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 );
}
glBegin と glEnd がないため、glDrawArray または glDrawElements (推奨) を使用してすべてを行う必要があります。簡単で汚い例:
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 );
}
移植に役立つその他のヒントについては、Apple のテクニカル ノートTN2230「Optimizing OpenGL ES for iPhone OS」を参照してください。
これまでの移植は、私にとってはかなり楽でした。アプリがかなり高度な OGL を実行したり、完全にサポートされていない機能を使用したりしない限り、ビルド ボタンを押すことで問題を見つけることができます。 gl.h ファイル。実際、ES への移植は、適切に最適化されたレンダリング コードを作成することを強制します。