# JOGL bleibt nach display() in PaintArea.paintComponent hängen



## Woron (15. Jun 2009)

Hallo

Ich habe für eine game engine eine Anbindung an JOGL geschrieben, funktionierte soweit ganz gut solange ich die game loop über den Animator betrieben habe.

Ich habe es jetzt soweit umgestellt dass die ursprüngliche game loop vom GLAutoDrawable display aufruft (und nicht der Animator ruft display auf worin erst der rest geupdated wird). Das Problem ist dass das Spiel nach dem ersten Aufruf von JOGLs GLEventListener.display(GLAutoDrawable arg0) hängen bleibt. 

Beim debuggen kann ich das Problem in RepaintArea.paintComponent(Component, Graphics) lokalisieren wofür ich jedoch keine source finde und somit nicht sagen kann wo genau er hängen bleibt.

Meine Fragen:
1. Hat das Problem schon mal wer gelöst?
2. Weis wer wo ich den source für die RepaintArea finde?


----------



## Marco13 (15. Jun 2009)

Bist du sicher (sicher sicher sicher) dass du nicht in der display-Methode irgendwas "böses" machst, wie etwa auf ein ungültiges VBO zugreifen oder so? (Durch solche Sachen kann man sich schön sein Programm zerschiessen, und man kriegt u.U. nicht viel davon mit)


----------



## Woron (15. Jun 2009)

ungültiges VBO?

Auszug aus der Klasse

```
//member
private GLAutoDrawable drawable; //wird in der init methode gesetzt

public void display(GLAutoDrawable arg0) {
	glContext.makeCurrent();
	visualManager.render();
}

//wird von der game loop aufgerufen
public void update(double dt) {
	if (drawable != null) {
		glContext.makeCurrent();
		drawable.display();
	} else {
		System.err.println("display not called");
	}
}
```

display wird laut consolenausgaben genau 1x aufgerufen

der Code vom VisualManager (render Methode) wurde nicht geändert seit er funktioniert hat und wenn ich debugge verlässt der Debugger die display Methode ganz normal und wandert über

GLDrawableHelper.display(GLAutoDrawable drawable)
GLCanvas.DisplayAction.run()
GLDrawableHelper
GLCanvas.maybeDoSingleThreadedWorkaround(...)
RepaintArea.paintComponent(...)

wo ich dann nicht weiter debuggen kann weil er den source nicht findet.


----------



## Woron (15. Jun 2009)

*grml*

Mehr Kaffee bringt die Lösung 


```
public void update(double dt) {
    if (drawable != null) {
        glContext.makeCurrent();
        //drawable.display();
        drawable.repaint();
    } else {
        System.err.println("display not called");
    }
}
```

repaint() statt display() und nichts hängt mehr (seh zwar immer noch nicht das gewünschte Bild von davor, aber zumindest hängts nicht mehr).


----------



## Evil-Devil (16. Jun 2009)

Das du nichts siehst könnte am Viewport liegen. Wie ist denn die aktuelle Translation. Wenn du auf 0/0/0 zeichnest und die Kamera auch auf 0/0/0 ist, wirst du nichts sehen


----------



## Woron (24. Jun 2009)

Lange rede kurzer sinn, verwende wieder den Animator für die Spielschleife und alles ist wieder wie vorher (ich seh alles, alles funktioniert,....)


----------

