2D-Grafik Java2D mit Hardware-Unterstützung?

K

Knecht Purpecht

Gast
Hallo,

ich bin zur Zeit gezwungen, mich ein wenig mit dem Java2D-Kram zu beschäftigen. Dabei muss ich auf ein BufferedImage sehr viele Primitiven (Linien, Kreise etc.) in möglichst kurzer Zeit zeichnen. Allerdings findet das Zeichnen (soweit ich weiß) per Prozessor statt und ist somit vergleichsweise langsam. Nach kurzem Suchmaschinen habe ich herausgefunden, dass man das Ganze (mit der Sun / Oracle VM) wohl auch mit Hardwareunterstützung (über OpenGL) zeichnen könnte - was mir sehr entgegen käme, da das doch sehr viel schneller gehen sollte. Der entsprechende Schalter für die Java-VM ist -Dsun.java2d.opengl=true (setzt natürlich auch die Sun / Oracle VM voraus).

Dabei tritt jedoch ein Problem auf:
Ich sehe nichts mehr. Es wird lediglich der Fensterrahmen meiner Swing-Anwendung gezeichnet und sonst nichts - Der Inhalt des Fensters ist dann der letzte Bildinhalt vor Starten der Anwendung. Beim Starten der Anwendung wird auch noch gar nicht mit BufferedImages gearbeitet, das geschieht erst nach Betätigen eines Buttons. Schon alleine deswegen irritiert mich das Ganze ein wenig, da zum Zeitpunkt des Startens im Grunde die HW-Unterstützung noch gar nicht stattfindet (stattfinden muss).

Zu dem Problem habe ich leider auch nichts weiter finden können, ich weiß auch gar nicht, ob der Schalter überhaupt noch aktuell ist oder andere Einschränkungen gelten. Vielleicht kann mir ja jemand weiter helfen.
 

Marco13

Top Contributor
Erstmal zur Klärung: Ein BufferedImage und OpenGL haben nicht direkt was miteinander zu tun. Man kann in ein BufferedImage reinzeichnen, ohne, dass der PC überhaupt einen Monitor oder eine Grafikkarte hat. Wenn das in ein BufferedImage gezeichnet werden MUSS, fallen mir spontan nicht viele Optimierungsmöglichkeiten ein (mag aber auch an der Uhrzeit liegen...)
 

Kr0e

Gesperrter Benutzer
Hmm, nur als spontane Idee:

Verwende doch einfach ein VolatileImage, zeichne dort hinein (Sehr schnell, da hardware beschleunigt, allerdings flüpchtig.. hmm) und wenn du fertig bist, zeichne das image in ein bufferedimage. Sollte schneller sein, als alle Operationen im Buffered auszuführen..
 
S

Spacerat

Gast
Unter Windows macht's eh' nicht viel Sinn, OpenGL einzuschalten, weil dort standardmässig DirectDraw aktiviert ist. Beides gleichzeitig geht wohl nicht.
 
K

Knecht Purpecht

Gast
Hallo,

zum "BufferedImage hat nichts mit OpenGL zu tun": Ich dachte halt, dass die Zeichenoperationen bei Aktivierung des VM-Schalters über OpenGL abgewickelt werden - das Bild eben nur in diesem Fall von der Grafikkarte gezeichnet wird. Dass die beiden Dinge grundsätzlich erst einmal nichts miteinander zu tun haben, war mir schon klar.

Die Sache mit dem VolatileImage sieht vielversprechend aus. Erste Tests haben zwar gezeigt, dass die Verwendung von VolatileImage langsamer zu sein scheint, aber das kann auch auf falsche Handhabung zurückzuführen sein - war eben nur ein ganz schneller, hingeklatschter Test. Denn das sollte ja eigentlich gerade nicht passieren.

Danke für die Antworten.
 

Kr0e

Gesperrter Benutzer
VolatileImages sind im schlimmsten Fall gleichschnell und im besten Fall um ein paar Faktoren besser ;)
Hier wird je nach OS hart optimiert und bei Win z.b. dürfte dies mit DirectX implementiert sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java2d mit GLG2D beschleunigen AWT, Swing, JavaFX & SWT 0
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
X JInternalFrame vor Java2D-Zeichnung langsam bzw. Gui friert ein AWT, Swing, JavaFX & SWT 1
B Java2D - Zeichenreihenfolge AWT, Swing, JavaFX & SWT 3
M Swing + Java2D Sichtfeld bewegen verhält sich träge AWT, Swing, JavaFX & SWT 4
T Java2D and SVG vs PNG AWT, Swing, JavaFX & SWT 12
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
C Java2D Transparenz geht bei einfärben verloren AWT, Swing, JavaFX & SWT 7
J Stufenlos vergrösserbare Fonts in Java2D? AWT, Swing, JavaFX & SWT 5
M java2D/jogl interoperability AWT, Swing, JavaFX & SWT 22
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
S Transformationen in Java2D..? AWT, Swing, JavaFX & SWT 4
MrMilti Gezeichnete Java2D Elemente mit Events versehen AWT, Swing, JavaFX & SWT 3
D Zeichen ein Pixel mit Java2D AWT, Swing, JavaFX & SWT 15
L Java2D AWT, Swing, JavaFX & SWT 2
K Java2D auf Knopfdruck weiterzeichnen AWT, Swing, JavaFX & SWT 4
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
K noob braucht unterstützung AWT, Swing, JavaFX & SWT 2
B GridBagLayout Unterstützung AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen


Oben