2009-08-02 4 views
0

JavaFX가 화면에 간단한 부동 텍스트를 표시하여 CPU를 소비한다는 것에 약간 놀랐습니다.Javafx 2d 텍스트 렌더링 속도 향상

내 질문 텍스트와 같은 노드에 대해 하드웨어 가속을 사용하도록 설정하는 옵션이 있습니까? GPU을 사용하고 2D 프리미티브를 렌더링 할 때 CPU를 사용하지 않으시겠습니까?

여기 내 2.53Mhz 코어 2 듀오 + Nvidia 9600M GT에서 CPU를 최대 40 %까지 소비하는 간단한 예가 나와 있습니다. OS : 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

타임 라인의 프레임 속도 변수를 사용 했습니까? 낮추면 도움이 될 것입니다.

(프레임 속도 설명 :.이 애니메이션은 초당 프레임에서 실행되는 최대 프레임 속도)

아마 영향을 미칠되지 않지만 키 프레임은 "canSkip"옵션이 있습니다.

+0

프레임 속도가 좋습니다. 모든 것이 매끄럽습니다. 하지만 GPU가 아닌 CPU를 왜 소비합니까? –

+0

(WinXP 실행, Java FX 1.2, Java 1.6) 마우스가 창에서 움직이는 경우, 10의 프레임 율로도 약간의 차이가있는 것처럼 보입니다. 높은 CPU. 마우스가 창에서 꺼져 있으면 CPU가 적게 실행되고 프레임 속도가 낮을수록 낮아집니다. 이것은 나에게 그 문제가 정말로 프레임의 렌더링이 아니라는 것을 암시합니다. – Refactor

+0

모든 텍스트를 하나의 텍스트 노드에 넣고 마우스를 창 위로 움직일 때 동일한 CPU 문제가 생깁니다 (시스템의 이미지는 분명히 부드럽고 10 프레임 라하더라도). blocksmouse : true는 아무런 차이를 만들지 않습니다. – Refactor

0

Sun은 1.5에서 6까지 시작하여 많은 작업을 수행했지만 Apple의 JRE 구현으로 얼마나 많이 필터링되었는지는 알지 못합니다. 비교를 위해 1.6과 같은 새로운 JRE로 업데이트 할 수 있습니까? 최신 버전의 OSX를 실행할 수 없으므로 부트 캠프에서 사용할 수있는 Windows 컴퓨터가 없어도 나중에 일어나는 일을 볼 수있는 최신 Sun 설명서 중 하나를 시도해 볼 가치가 있습니다.

또한 자바 FX 포럼에 게시 가치가있을 수도 있습니다 - http://forums.sun.com/forum.jspa?forumID=932

일이 보통 이러한 응답 꽤 좋다.

+0

비슷한 하드웨어 특성을 가진이 샘플을 WinXp에서 실행했으며 마우스를 텍스트 위에 올려 놓으면 거의 동일한 결과를 얻었습니다. –

0

캐시 : true 내용 : textNodes 변환 : bind Transform.translate (0, yoffset); ...

-

캐시 : 시스템에 대한 성능 힌트가이 노드는 비트 맵으로 캐시해야 함을 표시합니다.

+0

좋습니다! 그러나 텍스트 스크롤을 시뮬레이션하기 위해 샘플을 언급 했으므로 텍스트가 스크롤되는 동안 텍스트 요소는 항상 변경됩니다. –