2017-05-07 4 views
-2

Ich habe einige Probleme in Bezug auf AWT und Verarbeitung (die sie nicht empfehlen), kann ich nicht einen klaren Start die meiste Zeit und die Verarbeitung Schleife Schleife funktioniert, die Probleme sind vielfältig, aber sie scheint hauptsächlich verbunden mit der Grafikmatrixtiefe.OpenGL Zustand zurückgesetzt

Sehen, wie dieses Problem auf Startbedingungen verwandt scheint (wenn es gestartet wird, wird es später nicht fehlschlagen, oder es wird nicht gestartet). Ich habe mich gefragt, ob es eine Möglichkeit gäbe, den Grafikzustand vollständig zu unterbinden, selbst auf Kosten der Anwendung im Vollbildmodus.

Also die Frage ist hauptsächlich, wie kann ich (wenn möglich) pro grammatisch einen Neuanfang bei Grafiken erreichen? Natürlich ist jede andere Lösung oder Eingabe willkommen und könnte für die Verarbeitung selbst von Nutzen sein.

+0

Können Sie bitte ein [mcve] posten? –

+0

Ich denke, was Kevin sagt, ist wahr. Der Punkt ist, dass es vielleicht einen anderen Weg gibt, zu tun, was Sie tun, und die Lösung könnte von dort kommen, anstatt OpenGL zurückzusetzen. Ein wichtiger Punkt. Wie greifen Sie von AWT auf OpenGL zu? Es ist Ihre eigene Entwicklung oder verwenden Sie eine andere Bibliothek wie JOGL? Ich habe mehrere Probleme mit Swing/AWT/JOGL gefunden, die ich nach der Suche mit der NEWT-Implementierung gelöst habe, zumindest für MAC. –

+0

Was nun geschieht, ist die Instanziierung von N Komponenten, einige davon, die dem PApplet als Komponenten hinzugefügt werden, und einige davon sind benutzerdefinierte Komponenten, die sich während der Zeichenschleife mit der PApplet-Instanz zeichnen. Die Art der benutzerdefinierten Komponenten ist zusammengesetzt, also schieben sie Matrix und Clips/Noclips (mit Sorgfalt über Matrix-Stack-Tiefe). Nach dem DatumWolf lead fand ich GL GL = ((PJOGL) beginPGL()). gl.getGL(); endPGL(); über OpenGL-Kontexte. und ich berichte es für alle Fälle. Ich bin wirklich nur ein Bibliotheksbenutzer, wenn es um Grafiken geht, deshalb habe ich mich für die Verarbeitung entschieden. – Yggdrasil

Antwort

1

Es gibt keine Möglichkeit zum Zurücksetzen eines OpenGL-Kontexts den Standardstatus. Und selbst wenn dies der Fall wäre, würde dies Ihr Problem nicht lösen, denn Ihre Probleme scheinen auf der Tatsache zu beruhen, dass der OpenGL-Kontext in dem Zustand, in dem er beim Eingeben gefunden wurde, nicht zurückbleibt. Das ist sicherlich nicht der Standardzustand.

Aber was möglich ist, ist, dass Sie OpenGL-Kontext nur für Ihren Code erstellen und vorübergehend zu diesem wechseln, um Ihre Sache zu tun und dann wieder auf die ursprüngliche zurück. Windows ist nicht an OpenGL-Kontexte gebunden, und OpenGL-Kontexte sind nicht an Fenster gebunden; es ist pick und mischen Sie, wie Sie wünschen (solange Pixelformate kompatibel sind, die sie für die Mehrheit der Fenster/Kontext-Setups sind).

Wenn Sie Zugriff auf OpenGL-Objekte (Texturen, Pufferobjekte) haben möchten, die von Processing erstellt wurden, können Sie Kontextdaten freigeben (die keinen Status haben, so dass Sie sicher sind). Ändern oder löschen Sie nicht einfach Dinge, die Ihr Code nicht besitzt.

Das einzige Problem, mit dem Sie konfrontiert werden, ist all das mit JOGL/AWT. Bei einem kurzen Blick auf die Bibliotheksreferenz fand ich keinen offensichtlichen Weg herauszufinden, welcher Zeichensatz der momentan aktive OpenGL Kontext ist; es ist einfach genug, um den aktuellen Kontext zu bekommen. Allerdings ist JOGL selbst Open Source, also sollte es, wenn es keine leicht verfügbare Methode gibt, leicht zu implementieren sein (auch eine sinnvolle Ergänzung der Bibliothek).

Verwandte Themen