2009-08-02 88 views
0

我有點驚訝,JavaFX通過在屏幕上顯示簡單的浮動文本來消耗我的CPU。Javafx 2d文本渲染加速

我的問題是否有任何選項調整來打開像文本節點的硬件加速?使用GPU而不是CPU渲染2D基元時?

這是一個簡單的例子,在我的2.53Mhz核心2 duo + Nvidia 9600M GT上消耗高達40%的cpu。操作系統:Mac Os X. JavaFX 1.2; JRE 1.5

編輯:我把動畫中的例子只是模擬文本滾動。您可以嘗試通過滾動ListBox或某些圖片而不停止來實現相同的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

你玩過Timeline的framerate變量嗎?降低這可能有幫助。

(幀率描述:在此動畫將運行,以每秒幀數的最大幀率)

可能不會產生影響,但關鍵幀具有「canSkip」選項。

+0

幀率很好。一切都很順利,因爲它應該是。但爲什麼要消耗CPU而不是GPU? – 2009-08-03 05:20:15

+0

(WinXP運行,Java FX 1.2,Java 1.6)如果鼠標在窗口上移動,幀速率甚至爲10,似乎沒什麼區別。高cpu。如果鼠標關閉窗口,則cpu運行較少,而較低的幀率則會降低。這表明這個問題實際上不是框架的渲染。 – Refactor 2009-08-03 17:50:17

+0

當鼠標移動到窗口上時,將所有文本放入單個文本節點並顯示相同的CPU問題(儘管在我的系統中,即使幀速率爲10,我的系統上的圖像也一定比較平滑)。 blocksmouse:true沒有區別。 – Refactor 2009-08-03 18:18:32

0

Sun在1.5到6之間做了很多工作,但我不知道它通過蘋果的JRE實現過濾了多少。爲了進行比較,您可以更新到更新的JRE,例如1.6?如果您無法運行最新版本的OSX,因此無法在啓動訓練營中安裝Windows機器,或者可能需要嘗試其中一種Sun參考版本,以瞭解您的工作方式。

它也可能是值得一後到了JavaFX論壇 - http://forums.sun.com/forum.jspa?forumID=932

太陽通常在應對這些相當不錯。

+0

我在具有類似硬件特性的WinXp上運行此示例,並將鼠標放在文本上時獲得幾乎相同的結果。 – 2009-08-03 12:54:29

0

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

-

緩存:一個性能提示系統,以表明該節點應作爲位圖緩存。

+0

好的!但正如我剛剛提到的示例只是爲了模擬文本滾動,所以文本元素將在文本滾動時隨時更改。 – 2009-08-04 07:14:48