hi leute,
ich programmier ein spiel. auf der suche nach mehr performance hab ich nun zahlreiche buffer erzeugt, die z.t auch recht groß sind (4000x4000 pixel). da ich aber beim konkreten rendern nur noch diese buffer kopieren muss sollte das eigentlich klar gehen. nun gibt es auch eine zoom-funktion. ich zoome rein, lösche den inhalt des buffers (immerhin schon 29 ms, kann man sicher noch drücken), schreibe den neuen inhalt rein (stolze 12 ms!) und kopiere das dann auf den buffer den ich am anfang mit getBufferStrategy erzeugt habe.
nun bekomme ich das folgende merkwürdige verhalten: nach dem löschen dauert der nächste kopiervorgang (wohlgemerkt: nur kopieren, nix skalieren o.ä.) 300-400 ms! die nächsten 1-2 durchläufe sind dann ebenfalls grottenlangsam, bevor ich wieder auf 15µs herunter komme. da das ja hardware-beschleunigt sein sollte ist eigentlich nur der zweite wert wirklich realistisch.
messen tu ich direkt vor und nach der folgenden zeile:
g.drawImage(image, vs.boardOffsetX, vs.boardOffsetY, null);
g ist die Graphics2D die ich von der strategy bekomme, die offsets integerwerte. nun würde man natürlich denken es liegt an image:
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
GraphicsConfiguration config = device.getDefaultConfiguration();
image = config.createCompatibleImage(width, height,Transparency.TRANSLUCENT);
also ein BufferedImage. Wenn ich versuche das zu beschleunigen und ein volatileimage nehme bricht die performance völlig in den keller, hardwarebeschleunigung kann ich da nicht erzwingen. schade. trotzdem: was zur hölle geht da vor sich? ich hab mich schon durch die ganzen jre-flags gewühlt (ddforcevram=true,ddscale=true,...), aber es ist kein bisschen schneller als vorher. was zur hölle?!?!?!
danke für eure hilfe!