Programação com OpenGL/Android GLUT Wrapper: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 101:
 
== Criando um contexto em OpenGL ES com o EGL ==
 
Nós precisamo usar EGL para o OpenGL ES versão 2.0 (não a versão 1.x).
 
Em primeiro lugar, solicitaremos os contextos disponíveis:
<source lang="cpp">
const EGLint attribs[] = {
...
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
...
eglChooseConfig(display, attribs, &config, 1, &numConfigs);
</source>
Depois criaremos o contexto:
<source lang="cpp">
static const EGLint ctx_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
context = eglCreateContext(display, config, EGL_NO_CONTEXT, ctx_attribs);
</source>
 
(Em Java:)
<source lang="java">
setEGLContextClientVersion(2);
// ou em um Renderizador personalizado:
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
</source>
 
É uma boa prática, mas não é obrigatória, que você de declare os requirementos OpenGL 2.0 no <code>AndroidManifest.xml</code>:
<source lang="xml">
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
<uses-sdk android:targetSdkVersion="9" android:minSdkVersion="9"></uses-sdk>
</source>
 
Quando o usuário vai para tela inicial(ou recebe uma chamada), seu aplicativo é pausado, Quando ele volta para o aplicativo, ele continua, mas o contexto OpenGL é perdido, Neste caso, você precisa recarregar todos recursos na GPU (VBOs, texturas e etc...), Existe um evento no Android para detectar se seu aplicativo foi "despausado".
 
Da mesma forma que quando o usuário precisa o botão voltar, o aplicativo é destruído, mas fica na memória e pode ser reiniciado.
 
Para nosso empacotador(wrapper), nos consideremos que o aplicativo GLUT não foi desenhado para refazer o contexto OpenGL, muito menos refazer todas as variáveis estaticamente atribuídas. consequentemente o aplicativo sairá completamente enquanto o contexto é perdido, semelhante ao botão fechar dos desktops.
 
== Referencia ==