¿Qué es & # 8220; en & # 8221; y & # 8220; fuera & # 8221; de OpenGL-ES? (Portado desde OpenGL)

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

Pregunta

Parece que toda la documentación que puedo encontrar sobre OpenGL-ES dice algo en el sentido de que '' OpenGL-ES es como OpenGL, pero sin muchas cosas. Por ejemplo, no hay glBegin o glEnd. & Quot;

Ok, eso es genial. Entonces, ¿qué más no hay? ¿O hay una lista de lo que está en ? ¿O tal vez una guía de portabilidad?

(Específicamente, estoy tratando de mover una aplicación GL existente al iPhone, aunque no quiero limitar necesariamente mi Q al iPhone).

¿Fue útil?

Solución

El " OpenGL ES 1.1.12 Diferencia Especificación " (PDF) vinculado desde la página de información de OpenGL ES 1.X en Khronos.org pasa por las diferencias entre OpenGL ES 1.X y OpenGL 1.5. OpenGL ES 1.1 es la versión utilizada en el iPhone.

La especificación de diferencia no es el documento más simple que he visto, pero es más fácil de leer que las especificaciones de OpenGL en general. Recomiendo obtener una lista de las funciones de OpenGL a las que llama y luego buscarlas en el documento de diferencia. Le mostrará si son compatibles con OpenGL ES, y si el soporte es parcial, puede consultar la especificación completa para obtener más información.

Otros consejos

Parte del problema al responder su pregunta es que faltan muchas cosas y, a menudo, se trata de un conjunto de indicadores de bits poco utilizados o no aplicables. El mejor documento que describe las diferencias es en realidad los encabezados de implementación.

Para el marco en el que estoy trabajando, decidí hacerlo completamente multiplataforma entre el escritorio y el iPhone. El enfoque que tomo para resolverlo es escribir código en OpenGL y ver dónde se rompe. Luego mira en

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

y compárelo con

/Developer/SDKs/MacOSX10.5.sdk/ Sistema / Biblioteca / Frameworks / OpenGL.framework / Versions / A / Headers / gl.h

Estos encabezados son muy sencillos y fáciles de seguir.

La principal diferencia que he descubierto hasta ahora es que no hay GLdouble (cualquier cosa que use GLdouble como glOrtho y glFrustum tiene una versión GLfloat glOrthof y glFrustumf). Además, no hay gluPerspective o gluPerspectivef por alguna razón.

Aquí hay una caída en el reemplazo:

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 );
}

Dado que no tiene glBegin y glEnd, debe hacer todo a través de glDrawArray o glDrawElements (preferido). Un ejemplo rápido y sucio:

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 );
}

Consulte la Nota técnica de Apple TN2230 " Optimización de OpenGL ES para iPhone OS " ; para algunas otras sugerencias que podrían ser útiles en la portabilidad.

La transferencia hasta ahora ha sido bastante fácil para mí, y a menos que su aplicación haga algunas cosas OGL bastante avanzadas o use una funcionalidad completamente incompatible, encontrará sus problemas presionando el botón de compilación y una solución simple será evidente al cavar un poco en los archivos gl.h. De hecho, portar a ES te obliga a escribir un buen código de renderizado optimizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top