2009-03-27 17 views
2

Wenn Sie OpenGL in Java verwenden (in Bindungen wie jogl), müssen Sie sich um die Speicherverwaltung kümmern? Führt die JVM eine Garbage-Collection mit den erstellten OpenGL-Objekten durch? Wenn ja, wie kann man am besten aufräumen?OpenGL, Java und Speicherverwaltung

Antwort

1

In den unteren Bindings für OpenGL wie JOGL (aber wahrscheinlich nicht so sehr für Bibliotheken wie Java3D), müssen Sie Ressourcen wie Texturen und Puffer selbst verwalten, indem Sie die Funktionen aufrufen.

OpenGL Dinge wie Verschieben von Texturen zum und vom Videospeicher, wenn für das Rendern erforderlich. Es gibt keinen praktischen Weg für den Java-Garbage Collector, diese Ressourcen zu sammeln, da sie nicht als Java-Objekte dargestellt werden, sobald sie an OpenGL übergeben wurden. Ja, das bedeutet, dass Sie Listen mit Ressourcen verwalten müssen, die von OpenGL verwendet werden.

Die gute Nachricht ist, dass Sie wahrscheinlich mehr Ressourcen in OpenGL laden können, als Sie vielleicht denken, da es dafür sorgen wird, sie bei Bedarf in den Videospeicher und wenn nicht in den Hauptspeicher zu tauschen. Die schlechte Nachricht ist, dass es immer noch eine praktische Grenze für die Größe und Anzahl von Ressourcen (z. B. Texturen) gibt, die verwendet werden können, um einen Frame ohne dieses "Thrashing" zu rendern.

0

Ich denke, das ist ein bisschen abhängig von der "Klebstoff" oder Bindung, wie es sich entscheidet, Besitz zu implementieren.

Im Allgemeinen würde ich erwarten, dass Bindungen an der OpenGL-Semantik festhalten, was bedeutet, dass die JVM nicht in den Garbage-Collector involviert ist und die Daten der OpenGL-Bibliothek sammelt.

In vielen Fällen, z.B. Textur-Uploads, ich denke, das ist der einzige Weg, wie es funktionieren kann.