2009-08-02 6 views
0

Je suis un peu surpris que JavaFX consomme mon processeur en affichant un simple texte flottant sur un écran.Le rendu du texte Javafx 2d s'accélère

Ma question existe-t-il des options pour activer l'accélération matérielle pour les nœuds comme le texte? Pour utiliser GPU et non CPU lors du rendu des primitives 2D?

Voici l'exemple simple qui consomme jusqu'à 40% de cpu sur mon core 2 duo 2.53Mhz + Nvidia 9600M GT. OS: Mac OS X. JavaFX 1.2; JRE 1.5

Editer: Je mets de l'animation dans l'exemple pour simuler le défilement du texte. Vous pouvez essayer d'atteindre le même CPU en faisant défiler ListBox ou une image sans arrêt.

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); 
     }]}} 

Répondre

0

Avez-vous joué avec la variable de framerate de Timeline? Abaisser cela pourrait aider.

(La description framerate. Le framerate maximum auquel cette animation se déroulera, en images par seconde)

ne sera probablement pas d'impact mais KeyFrame a une option "canSkip".

+0

La fréquence d'images est bonne. Tout est lisse comme prévu. Mais pourquoi consommer CPU et pas GPU? –

+0

(exécution WinXP, Java FX 1.2, Java 1.6) Si la souris se déplace sur la fenêtre, le framerate, même de 10, semble faire peu de différence. Haute cpu. Si la souris est hors de la fenêtre, cpu fonctionne moins, et plus bas avec des framerate plus bas. Cela suggère à moi que le problème n'est pas vraiment le rendu des cadres. – Refactor

+0

Placer tout le texte dans un seul nœud Texte et l'affichage qui a toujours le même problème de CPU lorsque la souris se déplace sur la fenêtre (bien que l'image, sur mon système est nettement plus lisse, même au framerate de 10.). blocksmouse: true ne fait aucune différence. – Refactor

0

Sun a fait beaucoup de travail sur cela à partir de 1,5 et 6 mais je ne sais pas combien cela a filtré jusqu'à l'implémentation JRE d'Apple. Pour comparaison, est-il possible de mettre à jour un JRE plus récent tel que 1.6? Si vous ne pouvez pas exécuter la dernière version d'OSX et que vous ne pouvez pas avoir une machine Windows disponible sur le camp d'amorçage ou quoi que ce soit, essayez l'une des versions de Sun plus récentes pour voir comment vous allez.

Il pourrait également être utile un message au forum JavaFX - http://forums.sun.com/forum.jspa?forumID=932

Sun sont généralement assez bien à répondre à ces derniers.

+0

J'ai exécuté cet exemple sur le WinXp avec des caractéristiques matérielles similaires et obtenir presque le même résultat lorsque vous placez la souris sur le texte. –

0

VBox { cache: véritable contenu : transforme nœuds texte: lier Transform.translate (0, yoffset); ...

-

cache: Un indice de performance au système pour indiquer que ce nœud doit être mis en cache sous forme de bitmap.

+0

Un bon! Mais comme j'ai mentionné l'échantillon juste pour simuler le défilement du texte, les éléments du texte seront changés tout le temps pendant que le texte défile. –

Questions connexes