2009-08-02 8 views
0

Ich bin ein wenig überrascht, dass JavaFX meine CPU konsumieren, indem Sie einfachen Fließtext auf einem Bildschirm zeigen.Javafx 2d Text-Rendering beschleunigen

Meine Frage gibt es eine Option zwickt, Hardwarebeschleunigung für Knoten wie Text einzuschalten? Verwenden Sie GPU und nicht CPU beim Rendern von 2D-Primitiven?

Hier ist das einfache Beispiel, dass bis zu 40% CPU auf meinem 2,53Mhz Core 2 Duo + Nvidia 9600M GT verbrauchen. Betriebssystem: Mac OS X. JavaFX 1.2; JRE 1.5

Bearbeiten: Ich legte Animation in das Beispiel nur Text Scrollen zu simulieren. Sie können versuchen, den gleichen CPU-Verbrauch zu erzielen, indem Sie ListBox oder ein Bild ohne Unterbrechung durchblättern.

package text2dacceleration; 

import javafx.stage.Stage; 

import javafx.scene.Scene; 
import javafx.scene.layout.VBox; 
import javafx.scene.transform.Transform; 
import javafx.scene.text.Text; 
import javafx.animation.*; 

def longLine = for (i in [1..45]) "{i}"; 
def textNodes = for (i in [1..64]) Text{content: "{longLine} line number {i}"}; 
var yoffset = 0.0; 

Timeline { 
    repeatCount: Timeline.INDEFINITE 
    autoReverse: true 
    keyFrames: [ 
     KeyFrame { time: 0s values: [yoffset => 0.0]} 
     KeyFrame { time: 1s values: [yoffset => 10.0]}] 
}.play(); 

Stage { 
    title: "Text nodes" 
    width: 800 
    height: 600 
    resizable: false 
    scene: Scene { 
     content: [ 
     VBox { 
      content: textNodes 
      transforms: bind Transform.translate(0, yoffset); 
     }]}} 

Antwort

0

Haben Sie mit der Timeline-Framerate-Variable gespielt? Senken könnte das helfen.

(Die Framerate Beschreibung:. Die maximale Bildrate, bei der diese Animation, in Bildern pro Sekunde laufen)

Wahrscheinlich wird keine Auswirkungen haben, aber KeyFrame hat eine „canSkip“ -Option.

+0

Bildrate ist gut. Alles ist glatt wie es sein sollte. Aber warum CPU verbrauchen und nicht GPU? –

+0

(WinXP run, Java FX 1.2, Java 1.6) Wenn sich die Maus über das Fenster bewegt, scheint die Bildrate, sogar von 10, wenig zu ändern. Hohe CPU. Wenn die Maus aus dem Fenster ist, läuft CPU weniger und niedriger mit niedrigeren Frameraten. Dies deutet darauf hin, dass das Problem wirklich nicht das Rendering der Frames ist. – Refactor

+0

Setzen Sie den gesamten Text in einen einzelnen Textknoten und zeigen Sie an, dass immer noch das gleiche CPU-Problem auftritt, wenn Sie mit der Maus über das Fenster fahren (obwohl das Bild auf meinem System sogar bei einer Framerate von 10 glatter ist). blocksmouse: true macht keinen Unterschied. – Refactor

0

Sun hat viel Arbeit an diesem beginnend bei 1.5 und durch 6, aber ich weiß nicht, wie viel davon durch Apple JRE-Implementierung gefiltert. Zum Vergleich ist es möglich, dass Sie auf eine neuere JRE wie 1.6 aktualisieren? Wenn Sie die neueste Version von OSX nicht ausführen können und deshalb nicht über einen Windows-Rechner im Bootcamp verfügen können oder was auch immer es wert ist, versuchen Sie es mit einer der späteren Sun-Referenz, um zu sehen, wie Sie weiterkommen. http://forums.sun.com/forum.jspa?forumID=932

Sun ist in der Regel ziemlich gut reagiert auf diesen -

Es könnte auch einen Beitrag zum JavaFX Forum wert sein.

+0

Ich habe dieses Beispiel auf der WinXp mit ähnlichen Hardware-Eigenschaften ausgeführt und erreiche fast das gleiche Ergebnis, wenn man die Maus auf den Text setzt. –

0

VBox { cache: true Gehalt: textNodes transformiert: bind Transform.translate (0, yoffset); ...

-

Cache: Ein Performance-Hinweis auf das System, um anzuzeigen, dass dieser Knoten als Bitmap zwischengespeichert werden soll.

+0

Gute Eins! Aber wie ich das Beispiel erwähnt habe, nur um das Scrollen von Text zu simulieren, werden Textelemente während des Scrollens des Textes ständig verändert. –