Hallo,
ich beschäftige mich im Moment mit der Programmierung eines 2D-Spieles.
Bisher habe ich für die Grafische Ausgabe Java2D benutzt.
Ich habe ein BufferedImage mit dem Typ INT_RGB erstellt, dann via ((DataBufferInt)image.getRaster().getDataBuffer()).getData() ein int[] besorgt und dort dann die Pixel gesetzt. Anschliesend habe ich das BufferedImage mit BufferStrategy in ein Canvas gerendert.
Dies funktionierte auch super (ich erhielt eine Bildwiederholrate von mehr als 200 FPS), jedoch nahm die Performance mit einer Erhöhung der Auflösung ab.
Deshalb habe ich LWJGL ausprobiert, da man sich damit den Umweg über Java2D spart und direkt auf OpenGL zugreifen kann.
In Java2D habe ich bisher meine Sprites mit ImageIO geladen, dann die Pixel besorgt und gespeichert. Diese Bilder enthielten aber nur verschiedene Graustufen. Beim Rendern eines Sprites habe ich dann die einzelnen Pixel manipuliert und "eingefärbt" (z.B mit einem &-Operator und einem Farbwert) und dann in das int[] Array des Hauptsbildes geschrieben. So konnte ich viele verschieden farbige Sprites zeichen ohne viel Speicher zu verbrauchen. Nun habe ich dies versucht in LWJGL umzusetzen, leider vergebens. Ich habe ein DataBuffer erzeugt es versucht mit glDrawPixels zu rendern. Dies hat zwar funktioniert, war aber viel zu langsam.
Und nun meine Frage : Wie schafft es Java2D die BufferedImages relativ schnell zu rendern und gleichzeitig einen Zugriff auf die Pixel zu erlauben. Ich meine, wenn man jederzeit die Pixel verändern kann, dann müssten die Daten doch im Haupspeicher liegen, oder ?
Habe schon überall nach einer Antwort gesucht und im OpenJDK-Quellcode gestöbert.
Ich hoffe ihr könnt mir helfen. Danke.
ich beschäftige mich im Moment mit der Programmierung eines 2D-Spieles.
Bisher habe ich für die Grafische Ausgabe Java2D benutzt.
Ich habe ein BufferedImage mit dem Typ INT_RGB erstellt, dann via ((DataBufferInt)image.getRaster().getDataBuffer()).getData() ein int[] besorgt und dort dann die Pixel gesetzt. Anschliesend habe ich das BufferedImage mit BufferStrategy in ein Canvas gerendert.
Dies funktionierte auch super (ich erhielt eine Bildwiederholrate von mehr als 200 FPS), jedoch nahm die Performance mit einer Erhöhung der Auflösung ab.
Deshalb habe ich LWJGL ausprobiert, da man sich damit den Umweg über Java2D spart und direkt auf OpenGL zugreifen kann.
In Java2D habe ich bisher meine Sprites mit ImageIO geladen, dann die Pixel besorgt und gespeichert. Diese Bilder enthielten aber nur verschiedene Graustufen. Beim Rendern eines Sprites habe ich dann die einzelnen Pixel manipuliert und "eingefärbt" (z.B mit einem &-Operator und einem Farbwert) und dann in das int[] Array des Hauptsbildes geschrieben. So konnte ich viele verschieden farbige Sprites zeichen ohne viel Speicher zu verbrauchen. Nun habe ich dies versucht in LWJGL umzusetzen, leider vergebens. Ich habe ein DataBuffer erzeugt es versucht mit glDrawPixels zu rendern. Dies hat zwar funktioniert, war aber viel zu langsam.
Und nun meine Frage : Wie schafft es Java2D die BufferedImages relativ schnell zu rendern und gleichzeitig einen Zugriff auf die Pixel zu erlauben. Ich meine, wenn man jederzeit die Pixel verändern kann, dann müssten die Daten doch im Haupspeicher liegen, oder ?
Habe schon überall nach einer Antwort gesucht und im OpenJDK-Quellcode gestöbert.
Ich hoffe ihr könnt mir helfen. Danke.