2009-08-02 87 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