Pergunta

Parece que toda a documentação que posso encontrar sobre OpenGL-ES diz algo no sentido de "OpenGL-ES é como OpenGL, mas sem um monte de coisas. Por exemplo, não há nenhuma glBegin ou glEnd."

Ok, isso é ótimo. Então, o que mais não está lá qualquer um? Ou há uma lista do que é em ? Ou talvez um guia portar?

(Especificamente, eu estou tentando mover um aplicativo GL existente para o iPhone, apesar de eu não querer limitar necessariamente a minha Q para o iPhone.)

Foi útil?

Solução

O "OpenGL ES 1.1.12 Diferença Specification" (PDF) ligada a partir de a página de informações OpenGL ES 1.X em Khronos.org passa através das diferenças entre OpenGL ES 1.X e OpenGL 1.5. OpenGL ES 1.1 é a versão usada no iPhone.

A especificação diferença não é o documento mais simples que eu já vi, mas é uma leitura mais fácil do que as especificações OpenGL em geral. Eu recomendo ter uma lista de funções OpenGL você ligar e, em seguida, busca através do documento diferença para eles. Ela vai mostrar se eles são compatíveis com o OpenGL ES, e se o suporte é apenas parcial você pode ir para a especificação completa para mais informações.

Outras dicas

Parte do problema em responder a sua pergunta é que existem muitas coisas que faltam e, muitas vezes, é um conjunto de sinalizadores de bit raramente usados ??ou não aplicáveis. A melhor documento que descreve as diferenças é, na verdade os cabeçalhos de implementação.

Para que o quadro que estou trabalhando eu decidi fazê-lo plataforma completamente cruzamento entre desktop e iPhone. A abordagem que eu tome em descobrir isso é escrever código em OpenGL, e ver onde ele quebra. Em seguida, olhar em

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

e compará-lo com

/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h

Estes cabeçalhos são muito simples e fácil de seguir.

A principal diferença que eu descobri até agora é que não há GLdouble (qualquer coisa usando GLdouble como glOrtho e glFrustum tem uma GLfloat versão glOrthof e glFrustumf). Também não há gluPerspective ou gluPerspectivef por algum motivo.

Aqui está uma gota de substituição:

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

Uma vez que você não tem glBegin e glEnd, você tem que fazer tudo através glDrawArray ou glDrawElements (preferencial). Um exemplo rápido e sujo:

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

Confira a Nota Técnica da Apple TN2230 "Otimizando o OpenGL ES para o iPhone OS" para algumas outras dicas que podem ser úteis em portar.

portar até agora tem sido bastante livre de dor para mim, ea menos que seu aplicativo faz algumas coisas OGL bastante avançado ou usos funcionalidade completamente sem suporte que você vai encontrar os seus problemas por apertar o botão de configuração e uma correção simples será aparente cavando um pouco nos arquivos gl.h. Na verdade, portar para ES tipo de forças que você escrever um bom código de renderização otimizado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top