Comment arrêter le moteur de rendu Open GL
Pour une raison quelconque, j'ai besoin de redémarrer un GLSurfaceView.Moteur de rendu donc je veux quelque temps dans mon application pour appeler setRenderer(newRenderer) un deuxième temps, ce qui Android n'aime pas et lève une exception IllegalStateException disant "setRenderer a déjà été appelé"...
Maintenant, je sais que c'est parce que le rendu est rattaché à la GLSurfaceView et j'ai besoin de séparer ce convertisseur de la surface d'affichage, de sorte que je peux appeler de nouveau setRenderer.
Quelqu'un a une solution pour cela ?
P. S.:
Code ressemble à ceci :
render = new Renderer(this);
setContentView(R.layout.main);
graphicView = (GLSurfaceView) this.findViewById(R.id.graphicView);
//DO STUFF
graphicView.setRenderer(render);
//DO STUFF
Renderer newRender = new Renderer();
graphicView.setRenderer(newRender); <= ...and Android hates this line sooo much
Merci !
Vous devez vous connecter pour publier un commentaire.
Trouvé la réponse ici, cette "LemonDev" ne m'a sauvé la vie :
On peut s'arrêter et détruire un OpenGL surface d'afficher et de définir la nouvelle GLSurfaceView un nouveau moteur de rendu en appel de la OnPause() et postDelayed la destruction avec un Gestionnaire et un Exécutable, comme ceci :
Cela va créer un nouveau moteur de rendu et de mettre en pause le GLSurfaceView. Ensuite, l'application va "détruire" des étoffes que vous ne pouvez pas le toucher avec le SDK... Après cela, vous pouvez détruire la GLSurfaceView, en créer un autre et de définir le nouveau moteur de rendu pour elle.
Mon problème maintenant est que les textures ne sont pas actualisées, mais encore, encore, c'est génial !
Avez-vous vraiment besoin d'appeler setRenderer deux fois?
La android documentation mentionne :
Au lieu de cela, je suppose que vous voulez mettre en pause le rendu?
Utilisation
setRenderMode(RENDERMODE_WHEN_DIRTY);
pour mettre en pause le moteur de renduthis.graphcView = null; this.graphicView = (GLSurfaceView) this.findViewById(R.id.graphicView);
this.graphicView = new GLSurfaceView();
et remplacer la vue avec l'idR.id.graphicView
par cette nouvelle. Ensuite, vous serez en mesure d'appeler setRenderer de nouveauJ'ai trouvé un moyen plus facile pour actualiser les textures. Dans votre classe d'Activité appeler invalidate (), puis dans votre surface d'affichage de la classe de votre onDrawFrame ira en se disant à chaque fois..Donc vous pouvez charger votre texture ici et, ainsi, votre travail sera fait!