2009-08-02 8 views
0

JavaFXが画面上にシンプルなフローティングテキストを表示することによってCPUを消費するのに少し驚いています。Javafx 2dテキストレンダリングスピードアップ

私の質問には、テキストのようなノードのハードウェアアクセラレーションを有効にするオプションがありますか? GPUを使用し、2Dプリミティブをレンダリングする際にCPUを使用しないでください。

ここでは、2.53Mhzコア2デュオ+ Nvidia 9600M GTで最大40%のCPUを消費する簡単な例を示します。 OS:Mac OS X. JavaFX 1.2; JRE 1.5

編集:私はテキストのスクロールをシミュレートするだけの例でアニメーションを配置しました。リストボックスをスクロールしたり、停止していない画像を使ったりして、同じCPUを消費しようとすることができます。

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

答えて

0

タイムラインのフレームレート変数で遊んだことはありますか?下げることは助けるかもしれません。

(フレームレート説明:このアニメーションは、1秒あたりのフレーム数、実行される最大フレームレート)

おそらく影響を与えないであろうが、キーフレームが「canSkip」オプションを有しています。

+0

フレームレートが良好です。すべては、それが想定されているように滑らかです。しかし、なぜGPUではなくCPUを消費するのですか? –

+0

(WinXP実行、Java FX 1.2、Java 1.6)マウスがウィンドウ上を移動している場合、フレームレートは10の場合でもほとんど差がないようです。高いCPU。マウスがウィンドウ外にある場合、CPUは少なく実行され、フレームレートが低いほど低くなります。これは、問題は実際にフレームのレンダリングではないことを私に示唆しています。 – Refactor

+0

すべてのテキストを1つのTextノードに入れて表示すると、マウスがウィンドウの上を移動したときに同じCPUの問題が発生します(私のシステム上のイメージは、フレームレートが10であっても非常にスムーズです)。 blocksmouse:trueは違いはありません。 – Refactor

0

Sunはこれを1.5から6に開始して多くの作業をしましたが、AppleのJRE実装にどれだけのものがフィルタリングされているのかわかりません。比較のため、1.6などの新しいJREに更新することは可能ですか?最新バージョンのOSXを実行できないため、ブートキャンプなどでWindowsマシンを入手できない場合は、後で説明するSunのリファレンスを試してみる価値があります。

また、JavaFXのフォーラムにポストする価値があるかもしれません - http://forums.sun.com/forum.jspa?forumID=932

日、通常、これらへの対応ではかなり良いです。

+0

このサンプルをWinXp上で同様のハードウェア特性で実行し、テキストをマウスに置くとほぼ同じ結果になりました。 –

0

VBox { キャッシュ:true 内容:textNodes transforms:bind Transform.translate(0、yoffset); ...

-

キャッシュ:システムへのパフォーマンスのヒントこのノードは、ビットマップとしてキャッシュされるべきであることを示すために。

+0

いいです!しかし、サンプルをテキストスクロールをシミュレートするためだけに述べたので、テキストがスクロールしている間は、テキスト要素は常に変更されます。 –