Отчасти проблема в ответе на ваш вопрос заключается в том, что многие вещи отсутствуют, и часто это набор редко используемых или неприменимых битовых флагов. Наилучшим документом, описывающим различия, являются заголовки реализации.
Для платформы, над которой я работаю, я решил сделать ее полностью кросс-платформенной между настольным компьютером и 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 отсутствует (все, что использует GLdouble, например, glOrtho и glFrustum, имеет версии 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 «Оптимизация OpenGL ES для iPhone OS» , чтобы узнать некоторые другие советы, которые могут быть полезны при портировании.
Портирование до сих пор было довольно безболезненным для меня, и если ваше приложение не выполняет довольно продвинутые функции OGL или не использует полностью неподдерживаемую функциональность, вы обнаружите свои проблемы, нажав кнопку сборки, и простое исправление станет очевидным при копании немного в файлах gl.h. Фактически, портирование на ES заставляет вас писать хороший оптимизированный код рендеринга.