Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.12.2015, 07:21

Wie benutzt man VolatileImages?

Ich hab echt lang überlegt was die Formulierung des Titels betrifft dehalb nehmt es mir nich übel wenn er nicht aussagekräftig genug ist.

Ich arbeite seit einiger Zeit an einem kleinen Programm und möchte es so performant wie möglich gestalten. Ich hab mir dazu einmal die Standard Klassen für Images unter Java angeschaut und bin dabei auf VolatileImage gestoßen (ein Image welches vom Grafikspeicher aufgenommen wird und demnach schneller verarbeitet werden kann wenn ich es richtig verstanden hab) Nun hörte sich das alles sehr gut und ich hab mir überlegt alle meine BufferedImage Instanzen volatile zu machen. Leider musste ich feststellen dass diese Umstellung die Performance aber eher gesenkt hat (von 22ms pro update auf ~219ms pro Update).
Nun hab ich mich damit weiter beschäftigt und hab in diversen anderen Beiträgen zu diesem Thema gelesen man soll ein VImage haben, welches man als Puffer benutzt und welches die Größe des Fensters hat. Dann rendert man da alle BufferedImages drauf die man haben will. Das erschien mir logisch, also hab ich es einfach versucht. Nun hab ich aber die gleiche Performance wie übers direkte rendern auf meine BufferStrategy.
Die Frage die ich mir nun stelle ist: "Wie benutze ich ein VolatileImage sodass es den Zweck erfüllt für den es geschaffen wurde?" und
"Welche Umsetzung ist nun richtig?"
Danke fürs lesen :thumbsup:

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

17.12.2015, 08:06

Was Performance in Java2D angeht musst du hauptsächlich darauf achten das du nicht an der Hardwarebeschleunigung vorbei arbeitest. Zeichnen auf den Screen, in einen Backbuffer oder in ein VolatileImage wird spätestens seit Java 6 in Hardware erledigt. Daher wirst du keine großen Unterschiede bekommen. Nur in ein normales BufferedImage solltest du nicht zeichnen. Als Quelle habe ich gerade nur http://www.oracle.com/technetwork/java/j…ktop-150005.pdf. Ich hatte damals mal noch einen guten Artikel von Sun, in dem stand welche Zeichenoperationen potentiell kritisch in bezug auf Hardwarebeschleunigung sind, finde den aber gerade auf Anhieb nicht. Ich bin damals auf jeden Fall auf Slick 2D (http://slick.ninjacave.com/) umgestiegen, weil es einen ähnlichen Funktionsumfang hat, aber zuverlässig mit Hardwarebeschleunigung.

3

17.12.2015, 16:02

Was Performance in Java2D angeht musst du hauptsächlich darauf achten das du nicht an der Hardwarebeschleunigung vorbei arbeitest. Zeichnen auf den Screen, in einen Backbuffer oder in ein VolatileImage wird spätestens seit Java 6 in Hardware erledigt. Daher wirst du keine großen Unterschiede bekommen. Nur in ein normales BufferedImage solltest du nicht zeichnen. Als Quelle habe ich gerade nur http://www.oracle.com/technetwork/java/j…ktop-150005.pdf. Ich hatte damals mal noch einen guten Artikel von Sun, in dem stand welche Zeichenoperationen potentiell kritisch in bezug auf Hardwarebeschleunigung sind, finde den aber gerade auf Anhieb nicht. Ich bin damals auf jeden Fall auf Slick 2D (http://slick.ninjacave.com/) umgestiegen, weil es einen ähnlichen Funktionsumfang hat, aber zuverlässig mit Hardwarebeschleunigung.

Damit ich das jetzt richtig verstehe: Ein VolatileImage ist also sowas wie eine BufferStrategy? Das sagt zumindest die verlinkte pdf aus (Zitat: "Hardware-accelerated rendering to an “accelerated” destination. Examples of rendering destinations which can be hardware-accelerated are VolatileImage, screen, and BufferStrategy.") Das würde bedeuten ich kann entweder ein VImage oder BufferStrategy benutzen aber beides wäre schon wieder unnütz?

Werbeanzeige