AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7

Status
Nicht offen für weitere Antworten.

0xdeadbeef

Top Contributor
Seit dem Update auf einen Quadcore (Core i7-920) habe ich ein merkwürdiges Problem: der Redraw in Java-Anwendungen funktioniert allgemein nicht mehr so ganz richtig, aber speziell Graphics2D.drawImage() scheint nicht mehr in einem Rutsch zu kopieren, sondern die Fläche zerfällt in rechteckige Teilbereiche, die unsynchron gezeichnet werden und teils auch an der völlig falschen Stelle erscheinen.

Mit meinem vorherigen Dualcore (AMD X2 4200+) hatte ich diese Problem mit der gleichen Grafikkarte (Nvidia GTS 8800 640MB) und dem gleichen Betriebssystem (Xp 32bit SP3) nicht. Inzwischen habe ich eine neue Grafikkarte (GTX 285), neue Grafikkartentreiber und eine neue JRE (6, Update 16), aber das Verhalten bleibt unverändert.

Die Probleme treten ausschließlich mit Java-Programmen auf, da aber praktisch immer. Besonders auffällig wird es wie gesagt, wenn man größere Bitmaps mit drawImage in der Grafikkontext der Anwendung kopiert.

Mal als Beispiel ein Screenshot der ColorChooserDemo aus der im JDK6 enthaltenen SwingSet2 Demo:

Sllg.png


Wie gesagt: mit nativen Windows-Anwendungen habe ich keinerlei Probleme, egal ob Spiele, Videoplayer oder was auch immer. Habe auch schon so ziemlich alles probiert (Multithreading im GPU-Treiber ausgestellt, Javaw.exe auf CPU0 beschränkt, /USEPMTIMER in Boot.ini, PAE ausgeschaltet), aber leider ohne Erfolg.

Habe auch schon vor mehreren Wochen einen Bug in Suns Bugtracker eingetragen, aber leider gab es bislang keinerlei Feedback, ob zumindest mal eine Bewertung stattgefunden hat.

Also versuche ich's mal hier: Hat irgendjemand mit einem QuadCore und einer NVidia-Karte ähnliche Phänomene beobachtet? Kommt AWT mit 4 Cores nicht zurecht oder ist das am Ende ein Problem mit der PAE, wenn man mehr als 3GB RAM unter WinXP hat (von denen man natürlich nicht mehr als 3GB benutzen kann).
 
Hast Du mal die DirectDraw-Unterstützung ausgestellt? Ich habe mich schon eine Weile nicht mehr mit Windowsen beschäftigen müssen, und weiß daher nicht, ob das heute noch Relevanz hat. Wenn der Schalter aber hilft, dann würde es zumindest erklären, warum Du bei anderen Programmen keine Probleme hast. Wie gesagt: Nur ein Schuss ins Blaue.

Ich glaube, Java-System-Property "sun.java2d.noddraw" war's:
Code:
java -Dsun.java2d.noddraw=true

Ebenius
 
Zuletzt bearbeitet:
Ich bin gerade zur selben Erkenntnis gekommen 😉

Habe allerdings "-Dsun.java2d.d3d=false" benutzt. Damit stimmt der Redraw wieder. Wäre natürlich trotzdem schön, wenn sich ein paar Quadcore-Nutzer melden könnten und wenn Sun diesen Bug wenigstens mal in den Bugtracker eintragen würde.

Per Umgebungsvariable "_JAVA_OPTIONS" mit dem Wert "-Dsun.java2d.d3d=false" läßt sich der Workaround aber zumindest auch global einstellen. Soweit ich das verstehe, schaltet das auch nur die Direct3D-Erweiterung aus, nicht DirectDraw. Man verliert also nicht die gesamte Hardwarebeschleunigung.
 
Zuletzt bearbeitet:
Ich gehe davon aus, dass das kein Java-Problem ist, sondern ein Problem mit dem Graphikkartentreiber, Board-Treiber oder weiß der Teufel was. Und ich denke nicht, dass das direkt mit dem Quad-Core zu tun hat, sondern eher mit dem speziellen Board... Ist aber auch nur ein Gefühl.

Ebenius
 
Das würde ich mal für SEHR, SEHR, SEHR unwahrscheinlich halten angesichts der Tatsache, daß native Anwendungen/Spiele keinerlei Probleme machen und daß es völlig unabhängig von der PAE-Einstellung auftritt.

Nach menschlichem Ermessen ist das ein Bug in der D3D-Schnittstelle der JRE, vermutlich im Zusammenhang mit dem Zugriff auf BufferedImages, die ins RAM der Grafikkarte ausgelagert wurden. Wäre ja auch nicht das erste Mal, daß sowas auftritt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben