Aller au contenu principal

Session 37 — Fix ecran noir : render() -> postRender() pour les menus 2D

Cause racine REELLE

Les menus utilisaient AppState.render() pour dessiner via Renderer2D.
render() s’execute AVANT que JME rende ses viewports. L’etat GL laisse
par Renderer2D (FBO, viewport letterbox, shader actif) corrompait le rendu
JME du frame suivant, meme sans invalidateState().

Fix : utiliser postRender() a la place de render()

postRender() s’execute APRES que JME ait completement rendu tous ses
viewports. L’etat GL laisse par Renderer2D ne peut plus impacter JME
pour ce frame — JME a deja fini.

Avantages supplementaires :
– Plus besoin de desactiver/reactiver le viewport JME
– Plus besoin de restaurer l’etat GL dans cleanup()
– Plus besoin de enqueue() pour differer la destruction
– Code beaucoup plus simple

Ordre d’execution corrige

Avant (bug) :
1. render() : Renderer2D dessine (corrompt GL state)
2. JME rend ses viewports (avec GL state corrompu -> noir)

Apres (correct) :
1. JME rend ses viewports (GL state propre)
2. postRender() : Renderer2D dessine par-dessus (GL state sans impact)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *