Cause racine identifiee par bisection
Appeler rm.getRenderer().invalidateState() dans AppState.render() brise
COMPLETEMENT le pipeline de rendu JME — meme le GuiNode ne s’affiche plus,
meme sans aucun menu. Le fond (background color du viewport) reste visible
mais AUCUNE geometrie ne se rend.
Ce bug est tres contre-intuitif car invalidateState() est documente comme
« force JME a re-uploader son etat GL », mais en pratique il corrompt quelque
chose dans le pipeline de rendu en JME 3.8.1.
Fix
// INTERDIT dans AppState.render() :
// rm.getRenderer().invalidateState(); // brise TOUT le rendu JME
// glUseProgram(0); // idem
@Override public void render(RenderManager rm) { /* ne rien faire ici */ }
Pour le passage menu -> jeu, on se contente dans cleanup() de :
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, w, h);
// C'est tout - JME gere le reste
Lecon apprise
Ne JAMAIS appeler rm.getRenderer().invalidateState() ni aucun appel GL
de type « reset complet » dans AppState.render(). JME gere son propre etat
GL interne et appeler invalidateState() le perturbe irreversiblement.