Falha do Android “Chamada para API openGL sem um contexto atual”

resposta stackoverflow


Da documentação GLSurfaceView:

“Existem situações em que o contexto de renderização EGL será perdido. Isso geralmente acontece quando o dispositivo acorda depois de entrar no modo de espera. Quando o contexto EGL é perdido, todos os recursos OpenGL (como texturas) associados a esse contexto serão excluídos automaticamente . Para manter a renderização corretamente, um renderizador deve recriar todos os recursos perdidos de que ainda precisa. O método onSurfaceCreated (GL10, EGLConfig) é um lugar conveniente para fazer isso. “

Você precisa estar ciente dos contextos OpenGL perdidos, então readquirir o contexto e recarregar todos os recursos OpenGL. Parece que seu contexto está sendo perdido quando você exibe o navegador de arquivos em tela inteira.


Você está trabalhando em um projeto cocos2d-x?

Você pode encontrar códigos que resolvem esse problema em jni / xx / main.cpp:

Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit

Mas, você ainda encontrará esse problema, por exemplo, você chama e mostra uma caixa de diálogo WebView em tela cheia no lado do java e, quando você volta ao thread C ++, ocorre o travamento. Você deve resolver este problema mostrando este WebView em tela cheia em uma Activity separada, e quando você fechar esta Activity de volta para cocos2dActivity, cocos2d-x irá chamar o método e reinicializar o contexto openGL para você.