Hallo zusammen!
Ich hätte da eine Frage, die mir langsam die Nerven aufreibt (wie so oft).
Ich habe ein Frame in den Fullscreen-Modus gebracht und einige Volatile-Images in einem Threads auf einen Backbuffer (ebenfalls Volatile) gedrawt. Das passiert nun alle 20 Millisekunden und die CPU wird so gut wie nicht beansprucht. Selbst der zweite Thread, der zur Berechnung zuständig ist (alle 10 Millisekunden) beansprucht die CPU noch überhaupt nicht...
Nun muss das ganze natürlich noch auf den Bildschirm, also wird das Graphic-Object per dispose gesperrt und:
frame.getGraphics.drawImage(backbuffer, null, null);
aufgerufen. Es läuft auch nicht schlecht. Der "nanoTime"er macht die Darstellung recht flüssig (1024*768) aber so RICHTIG flüssig, wie ich es mit C++ und DirectX gewohnt war ist es nicht.
Offensichtlicher Grund: Das Malen auf den Bildschirm - und nur das! - führt dazu, das die CPU von 1-2% Beanspruchung auch 70% und mehr steigt -> Also wird es NICHT von der Grafikkarte erledigt...
Nun kann ich mir nur vorstellen, dass der oben genannte Aufruf nicht mehr mit der Grafikkarte arbeitet oder das der Frame (AWT) nebenbei noch einen Backbuffer hat, der nicht gebraucht wird.
Ich habe es vorher übrigens mit createBufferStrategy (Also AWT-DoubleBufferung ) probiert, was im Grunde das gleiche Ergebnis brachte...
Also die Frage an Euch: Hat jemand eine Idee wie schaffe ich es, den Backbuffer auf den Bildschirm zu schicken, ohne das die CPU anfängt so stark zu rotieren?
Wenn ich Code schicken soll kann ich das nachholen - aber ich frage erst einmal so, weil ich stark vermute, das es (wie so oft) eine recht einfache Lösung gibt... Vielleicht ja auch irgendwas, was Java 1.6 nun hat... oder Vielleicht sollte ich irgendeine andere Lib benutzen...
Vielen Dank für Antworten
Gruß, Ley
Ich hätte da eine Frage, die mir langsam die Nerven aufreibt (wie so oft).
Ich habe ein Frame in den Fullscreen-Modus gebracht und einige Volatile-Images in einem Threads auf einen Backbuffer (ebenfalls Volatile) gedrawt. Das passiert nun alle 20 Millisekunden und die CPU wird so gut wie nicht beansprucht. Selbst der zweite Thread, der zur Berechnung zuständig ist (alle 10 Millisekunden) beansprucht die CPU noch überhaupt nicht...
Nun muss das ganze natürlich noch auf den Bildschirm, also wird das Graphic-Object per dispose gesperrt und:
frame.getGraphics.drawImage(backbuffer, null, null);
aufgerufen. Es läuft auch nicht schlecht. Der "nanoTime"er macht die Darstellung recht flüssig (1024*768) aber so RICHTIG flüssig, wie ich es mit C++ und DirectX gewohnt war ist es nicht.
Offensichtlicher Grund: Das Malen auf den Bildschirm - und nur das! - führt dazu, das die CPU von 1-2% Beanspruchung auch 70% und mehr steigt -> Also wird es NICHT von der Grafikkarte erledigt...
Nun kann ich mir nur vorstellen, dass der oben genannte Aufruf nicht mehr mit der Grafikkarte arbeitet oder das der Frame (AWT) nebenbei noch einen Backbuffer hat, der nicht gebraucht wird.
Ich habe es vorher übrigens mit createBufferStrategy (Also AWT-DoubleBufferung ) probiert, was im Grunde das gleiche Ergebnis brachte...
Also die Frage an Euch: Hat jemand eine Idee wie schaffe ich es, den Backbuffer auf den Bildschirm zu schicken, ohne das die CPU anfängt so stark zu rotieren?
Wenn ich Code schicken soll kann ich das nachholen - aber ich frage erst einmal so, weil ich stark vermute, das es (wie so oft) eine recht einfache Lösung gibt... Vielleicht ja auch irgendwas, was Java 1.6 nun hat... oder Vielleicht sollte ich irgendeine andere Lib benutzen...
Vielen Dank für Antworten
Gruß, Ley