Что & # 8220; в & # 8221; и & # 8220; out & # 8221; OpenGL-ES? (Портирование из OpenGL)

StackOverflow https://stackoverflow.com/questions/272970

Вопрос

Кажется, что вся документация, которую я могу найти об OpenGL-ES, говорит о том, что "OpenGL-ES похож на OpenGL, но без большого количества материала". Например, нет glBegin или glEnd. & Quot;

Хорошо, это здорово. Так чего же еще нет? Или есть список того, что в ? Или, может быть, руководство по портированию?

(В частности, я пытаюсь перенести существующее приложение GL на iPhone, хотя я не хочу обязательно ограничивать свой Q для iPhone.)

Это было полезно?

Решение

" OpenGL ES 1.1.12 Спецификация различий " (PDF) со ссылкой на информационную страницу OpenGL ES 1.X на Khronos.org проходит через различия между OpenGL ES 1.X и OpenGL 1.5. OpenGL ES 1.1 - это версия, используемая на iPhone.

Спецификация различий не является самым простым документом, который я когда-либо видел, но его легче читать, чем спецификации OpenGL в целом. Я рекомендую получить список функций OpenGL, которые вы вызываете, а затем искать их в разностном документе. Он покажет вам, поддерживаются ли они в OpenGL ES, и если поддержка является лишь частичной, вы можете перейти к полной спецификации для получения дополнительной информации.

Другие советы

Отчасти проблема в ответе на ваш вопрос заключается в том, что многие вещи отсутствуют, и часто это набор редко используемых или неприменимых битовых флагов. Наилучшим документом, описывающим различия, являются заголовки реализации.

Для платформы, над которой я работаю, я решил сделать ее полностью кросс-платформенной между настольным компьютером и 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 / Версии / 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 заставляет вас писать хороший оптимизированный код рендеринга.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top