2010-06-22 4 views
6

J'essaie de trouver un moyen de vérifier si un EGLContext existe et est prêt à utiliser sur Android. Par spécification, je l'ai essayé d'utiliserAppel pour vérifier si un EGLContext actuel existe dans Android

((EGL10) EGLContext.getEGL()). EglGetCurrentContext()

puis comparer à EGL10.EGL_NO_CONTEXT (essayé equals() et! =). Cependant, même si par le débogage il semble '' qu'il retourne une instance de 'EGL_NO_CONTEXT' (semble signifier que toutes les valeurs internes ne sont pas initialisées) mais peu importe la comparaison que je fais, je ne peux pas le faire fonctionner.

Quelqu'un sait d'une autre/méthode appropriée pour faire ceci? Je ne veux pas le faire en lançant un appel GL aléatoires et attraper le EGLError ...

Répondre

0

Vous pouvez essayer de le tester pour voir s'il est nul, plutôt qu'égale à un contexte donné. C'est ce que je ferais dans un programme opengl standard.

[EDIT] Il y a un exemple here qu'il utilise comme suit:

if ((eglGetCurrentContext() != context->egl_context) || 
    (eglGetCurrentSurface (EGL_READ) != drawable->egl_surface)) 

Je ne sais pas si cela est une aide.

+1

Il ne retourne jamais tristement nul. Je l'ai débogué et l'EGLContext que Android me donne de eglGetCurrentContext() n'est actuellement pas courant car toutes les opérations l'utilisant me donnent l'erreur 'No current context set'. – Moncader

+0

Y a-t-il une sorte d'erreur dans votre processus d'initialisation?Quand j'ai jeté un coup d'oeil plus tôt à votre problème, j'ai trouvé plusieurs exemples de code d'exemple, mais rien avec une erreur de vérification. Peut-être que vous devriez vérifier vos routines d'initialisation en ligne avec ce qui est dans les exemples pour le moment et trouver la vérification d'erreur plus tard? Vous pouvez également poser des questions sur d'autres sites centrés sur Android, et vérifier également les mises à jour ici. De plus, si l'une de vos autres avenues porte ses fruits, assurez-vous d'afficher la solution ici pour aider les autres à la trouver. – Amos

+0

J'ai déjà une application entièrement fonctionnelle. Cependant j'ai quelques situations où je veux charger des textures dans la mémoire quand Android n'a pas placé un contexte courant de GL (si vous ne savez pas androïde, bien, c'est juste comment cela fonctionne). Évidemment, ce n'est pas possible, donc quand je détecte qu'il n'y a pas de contexte actuel, j'ajoute ce bitmap à une file d'attente à ajouter à la VRAM quand le contexte redevient disponible. – Moncader

2

Il semble y avoir un bug dans l'implémentation d'Android de EGL10.eglGetCurrentContext(), où le résultat de eglGetCurrentContxt() doit être comparé à l'aide

result.equals(EGL10.EGL_NO_CONTEXT) 

plutôt que

result == EGL10.EGL_NO_CONTEXT 

Par exemple :

if (((EGL10) EGLContext.getEGL()).eglGetCurrentContext().equals(EGL10.EGL_NO_CONTEXT)) { 
    // no current context. 
} 
2

J'ai rencontré le problème de ne pas être en mesure de re-u Vous pouvez utiliser l'EGLContext actuel pour essayer de rendre ce qui était à l'écran dans un GLSurfaceView à un EGLPixelBufferSurface hors écran. D'après ce que je peux dire, le problème avec l'aide de la méthode statique

EGLContext.getEgl()

est qu'il crée une instance par défaut EGL - cela signifie que le EGLContext associé est équivalent à EGL10.EGL_NO_CONTEXT.

De plus, dans Android, l'EGLContext ne peut être associé qu'à un seul thread (le développeur Android Romain Guy le dit here). Ainsi, afin d'utiliser correctement

EGL.getCurrentContext()

vous devez avoir une instance EGL préexistante et appeler la méthode getCurrentContext() dans le fil qui a créé le EGLContext.

REMARQUE: Android gère désormais l'enregistrement de EGLContext lorsque GLThread est suspendu/repris dans la classe GLSurfaceView (consultez la méthode setPreserveEGLContextOnPause(boolean preserveOnPause)).

Questions connexes