J'ai du mal à changer le maillage rendu dans mon GLSurfaceView, et plus précisément dans le Renderer, je suppose qu'il y a quelque chose que je n'ai pas compris dans le workflow du Classe de renduComment changer les objets rendus dans un GLSurfaceView.Renderer
Donc, nous considérons que nous avons ceci:
public class MyRenderer extends GLSurfaceView.Renderer{
private Mesh aMesh;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config){
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
aMesh = new Mesh("TestMesh1");
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
...Creating viewport...
}
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(gl.GL_COLOR_BUFFER_BIT);
...all Maths to create mvpMatrix...
aMesh.draw(mvpMatrix);
}
}
C'est donc parfaitement travail, AMESH est affichage à l'écran avec tous les bons réglages. Maintenant, je veux changer ce maillage lorsque l'utilisateur appuie sur un bouton, et pour me rafraîchir renderer j'ai créé une méthode spécifique dans le moteur de rendu, comme suit:
public class MyRenderer extends GLSurfaceView.Renderer{
private Mesh aMesh;
public void changeMesh(String newMeshName){
GLES20.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
....
aMesh=new Mesh(newMeshName);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config){
....
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
...
}
@Override
public void onDrawFrame(GL10 gl) {
aMesh.draw(mvpMatrix);
}
}
Donc, dans mon esprit, appelant changeMesh ferait onDrawFrame méthode pour redessiner aMesh avec le nouveau modèle, non? Mon problème est que le résultat est un moteur de rendu vide. Il ne s'écrase même pas ou alors. Quand j'appelle changeMesh(), le maillage précédemment bien affiché disparaît (comme prévu), mais le nouveau n'est pas dessiné.
Alors je me demande, est-ce que cela nécessite de créer un nouveau Renderer (qui semble un peu lourd)? Existe-t-il un moyen de demander une passe dans OnSurfaceCreated manuellement? Je suis un peu perdu sur ce bug parce que c'est un peu inattendu.
Votre code tel que décrit devrait fonctionner. Je passerais par l'appel de dessin dans le débogueur après que vous ayez changé votre maillage et vérifié ce qui est dessiné. –