Como decidir usar o OpenGL ES 1.0 ou 2.0 para Android? [fechadas]

7

Comecei a aprender um pouco de desenvolvimento do Android e uma das primeiras coisas que pensei em fazer é um jogo simples. No entanto, sou confrontado com uma pergunta difícil logo de cara. Devo usar o OpenGL ES 1.0 ou 2.0?

O jogo que eu imaginei será bastante simples graficamente, utilizando 2D (gráficos do tipo de cima para baixo em mosaico) e visualizações isométricas de câmera fixa. Eu nunca usei o OpenGL em um ambiente de área de trabalho, por isso não sei se os shaders serão algo que vou usar etc.

De acordo com esta página , devo usar o OpenGL ES 2.0 geralmente para novos desenvolvimentos. No entanto, meu próprio telefone recentemente (no ano passado) recebeu uma atualização para obtê-lo no Android 2.2 necessário. (Eu nem sei se ele tem suporte ao OpenGL ES 2.0)

Então, basicamente, minha pergunta é: vou me beneficiar de algum dos recursos do OpenGL ES 2.0 acima de 1.0 e / ou vale a pena em termos de compatibilidade?

Earlz
fonte
Ou usar uma biblioteca de código aberto gráficos para fazer a maioria do trabalho para você: libgdx
ToolmakerSteve

Respostas:

7

Se você tem pouca ou nenhuma experiência com o OpenGL, eu não sugeriria o 2.0.

Com o OpenGL ES 2.x, você terá que escrever suas próprias rotinas para manipulação de matrizes e escrever seus próprios shaders. Isso dá muito trabalho, muita coisa pode dar errado e a depuração de muitas dessas coisas é muito dolorosa.

Somente se você achar que precisará de alguns dos recursos do OpenGL ES 2.0, deverá usá-lo.

Edit: Se o exposto acima não for suficiente para assustá-lo, sugiro que você faça um exemplo trivial no OpenGL ES 1.xe tente fazer o mesmo exemplo no OpenGL ES 2.x. Você pode, por exemplo, desenhar um cubo rotativo com uma textura aplicada a ele.

entalhe
fonte
Primeiro, foi um 0, mas -1 para a edição, especialmente a parte "assustar", que é apenas contraproducente.
Christian Rau
Vou começar com o mais fácil dos dois então. Eu já estou aprendendo Android e atualizando meu Java como ele é, então vou levar algo mais fácil de aprender por enquanto
Earlz
@ChristianRau - e, no entanto, "assustar" é exatamente o que o requisito do 2.0 de escrever shaders para fazer coisas básicas fez comigo, quando eu encontrei as especificações. Estou surpreso que, a menos que alguém volte às APIs 1.0, o Android exija que todo programador que implementa o GLSurfaceView.Renderer lide com shaders, mesmo que seus requisitos sejam simples. Eu esperava ver algo como a classe Canvas, mas reescrita com foco 3D e ótimo desempenho. Eu esperava usar shaders eventualmente, mas mesmo para as coisas mais básicas? (I usarão provavelmente libgdx, mas foi surpreendido não foi alguns incorporado em solução.)
ToolmakerSteve
@ToolmakerSteve Bem, se seus requisitos são simples, seus shaders também são. Um par simples de shader que, por exemplo, mostra um objeto totalmente transformado, iluminado e texturizado, não precisa ter mais do que, digamos, cerca de 10 linhas de código para cada shader completo de vértice e fragmento. Os shaders e o gerenciamento de matrizes (para os quais existem muitas bibliotecas prontas para uso) são realmente simples, não é ciência do foguete (mas também não é javascript). Assim que você quiser fazer mais do que girar um cubo (ou seja, após o primeiro dia de GL), você não deseja evitar shaders.
Christian Rau
1

Bem, isto depende. Eu não tenho nenhuma experiência com ES, mas a questão geral é sempre a mesma: Função fixa antiga e obsoleta versus uma abordagem moderna centrada no shader.

Considerando que stephelton está correto, pois a antiga API ES 1 é mais fácil de entender para iniciantes e é mais fácil conseguir coisas simples sem entender toda a API (e impede que você se torne um desses caras usando shaders sem entender o que está fazendo ), No entanto, aconselho você a começar com a maneira moderna de criar gráficos em tempo real imediatamente. Embora você possa não precisar da flexibilidade dos shaders no início, ele é extremamente valioso quando você gerencia o básico. E é a maneira de criar gráficos em tempo real acelerados por hardware hoje (e amanhã).

Enquanto a compatibilidade pode ser uma preocupação (e eu não tenho uma visão geral sobre a atual posição dos dispositivos ES), por outro lado, se você usar o GL da área de trabalho, não se limite artificialmente aos recursos exclusivos do GL 1.1, apenas para oferecer suporte. placas gráficas de 20 anos. Significado, o progresso tem que começar em algum lugar.

Christian Rau
fonte
11
Eu discordo totalmente disso. A quantidade de trabalho necessária para executar um aplicativo trivial (talvez um cubo texturizado que gire) com o ES é exaustiva e há muitas coisas que podem dar errado. Entenda que no ES 2, você não possui nenhuma funcionalidade da matriz (push / pop, translação, rotação, redimensionamento ...) e precisa escrever todos os seus shaders do zero. Se uma pessoa nunca foi exposta a esses conceitos, certamente não os acertará na primeira vez.
notlesh
11
Diferentemente do OpenGL normal (<= 3.0), essas coisas não são apenas obsoletas, elas não existem. Portanto, você não pode usá-las como muletas enquanto constrói em torno delas; você tem que construir tudo do zero. Para iniciantes, o OpenGL ES 2.x seria como tentar construir um prédio de escritórios do zero, sem saber nada sobre arquitetura.
notlesh
11
@stephelton Mas você precisa entender essas coisas (coisas da matriz) de qualquer maneira. E removê-lo do OpenGL não engana você a pensar que eles estão implementados no hardware. Alguém tem que implementar o material da matriz, e na verdade não é realmente o trabalho do OpenGL fazer isso, pois não tem nada a ver com o hardware gráfico. Obtenha uma biblioteca se ainda não quiser mexer com ela. Basta usar bons recursos de aprendizado e não tentar conquistar o mundo desde o início. Então, começar com o ES 2 somente com sombreador não deve ser problema.
Christian Rau
11
@stephelton E bem, os gráficos não são fáceis e usar uma abordagem antiga de função fixa para transformar, iluminar e texturar você, apenas para que você não precise entender o que realmente faz, não é uma alternativa real (e não torne isso muito mais fácil de qualquer maneira). Depois de fazer algo mais envolvido do que um cubo rotativo (embora seja o que um iniciante certamente fará primeiro), a sobrecarga adicional desaparecerá; além disso, resultará em menos sobrecarga, permitindo que você implemente suas idéias de maneira mais direta do que de alguma forma esmagá-las nos recursos de função fixa.
Christian Rau
11
@ChristianRau, acho que você está polarizando um pouco as duas versões do OpenGL. Ele não está perguntando se deveria focar sua carreira em um ou outro; ele está perguntando se o ES 2.x é apropriado e necessário para o seu jogo simples. Embora eu concorde que o ES 2.x seja certamente melhor que 1.xe que aprender 2.x seja uma coisa boa, não posso recomendar que alguém novo no OpenGL comece com o ES 2.x. Aprenda a engatinhar antes de andar. O ES 2.x não apenas está muito mais envolvido (mais aprendizado, mais trabalho, mais depuração ...), mas o impedirá de uma parte substancial do mercado Android.
notlesh