openGL - Funktionen in untersch. Threads

Cromon

Erfahrenes Mitglied
Hallo zusammen!

Nachdem ich jetzt alle Basisfunktionen meiner 3D-Anwendung (dazu gehört eben auch die Bewegung) implementiert habe bin ich nun dabei meine Welt dynamisch zu gestalten.

Überlegt habe ich mir folgendes:
Die Dateien sind immer Terrainblöcke. Es sollten konstant 9 dieser Blöcke gerendert werden (ein 3 x 3 Gitter). Bewegt man sich in einen nächsten Block (von der Mitte aus gesehen) werden die 3 hinteren entfernt und die 3 nächsten geladen. Dies geschieht in einem eigenen Thread um den Rendervorgang nicht zu pausieren.

Allerdings besteht da ein Problem: Ich lade bisher nur einen Block neu in einem separaten Thread. Allerdings gibt es immer bei der ersten auftretenden openGL-Funktionen eine Meldung des Debuggers mit einer Zugriffsverletzung.

Kann ich die Funktionen aus openGL nur in dem Thread verwenden in dem das Fenster "läuft"?

/edit:
Gerade bei google gelesen, dass das Probleme bereitet da die openGL-Funktionen nicht wirklich synchron sind! Gibt es da eine gute Möglichkeit, wie ich diese Probleme lösen könnte? Ich möchte nur ungern das Laden im selben Thread laufen lassen!

Gruss
Cromon
 
Zuletzt bearbeitet:
Hallo Matthias,

Gut zu wissen, dass es bereits eine ausgereifte Methode in der Bibliothek implementiert gibt. Ich habe gestern noch eine andere Methode implementiert, da es im Wesentlichen nur um glBindBufferARB und glBufferDataARB geht. Der Ladethread legt den GLuint und einen Zeiger auf die Daten mit Verweis auf das Modell, das geladen werden soo in eine Queue beim Hauptthread und dieser arbeitet die Aufgaben dann ab und benachrichtigt das Modell, wenn er fertig ist. Ab dann wird das Modell gezeichnet.

Ich werde mir mal wglCreateContext und wglShareLists anschauen, was vermutlich etwas mehr Stabilität in die Sache bringen wird.

Gruss,
Cromon
 
Zurück