Ускорение рендеринга текста Javafx 2d

Я немного удивлен, что JavaFX потребляет мой процессор, показывая простой плавающий текст на экране.

Мой вопрос: есть ли какие-либо настройки для включения аппаратного ускорения для таких узлов, как Text? Использовать GPU, а не CPU при рендеринге 2D-примитивов?

Вот простой пример, который потребляет до 40% процессора на моем дуэте Core 2 2,53 МГц + Nvidia 9600M GT. ОС: Mac Os X. JavaFX 1.2; JRE 1.5

Редактировать. Я добавил в пример анимацию, чтобы просто имитировать прокрутку текста. Вы можете попытаться добиться того же потребления процессора, прокручивая ListBox или какое-либо изображение без остановки.

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

person Mykola Golubyev    schedule 02.08.2009    source источник


Ответы (3)


Вы играли с переменной частоты кадров Timeline? Снижение этого может помочь.

(Описание частоты кадров: максимальная частота кадров, с которой будет работать эта анимация, в кадрах в секунду.)

Вероятно, это не повлияет, но в KeyFrame есть опция «canSkip».

person Refactor    schedule 03.08.2009
comment
Частота кадров хорошая. Все гладко, как и должно быть. Но зачем потреблять CPU, а не GPU? - person Mykola Golubyev; 03.08.2009
comment
(Запуск WinXP, Java FX 1.2, Java 1.6) Если мышь перемещается по окну, частота кадров, даже равная 10, не имеет большого значения. Высокий процессор. Если мышь находится вне окна, процессор работает меньше и меньше с меньшей частотой кадров. Это наводит меня на мысль, что проблема действительно не в рендеринге кадров. - person Refactor; 03.08.2009
comment
Помещение всего текста в один узел Text и его отображение по-прежнему имеют ту же проблему с процессором, когда мышь перемещается по окну (хотя изображение в моей системе определенно более плавное, даже при частоте кадров 10). blockmouse: true не имеет значения. - person Refactor; 03.08.2009
comment
Замена текста метками немного снижает нагрузку на ЦП. Вероятно, из-за шрифта по умолчанию или настроек шрифта, которые используют ярлыки. Очень быстрое перемещение мыши по текстовым узлам потребляет до 100% ресурсов ЦП (одно ядро) в Windows XP. - person Mykola Golubyev; 03.08.2009

Sun проделала большую работу над этим, начиная с версии 1.5 и заканчивая версией 6, но я не знаю, сколько из этого было отфильтровано для реализации Apple JRE. Для сравнения, можете ли вы обновиться до более новой версии JRE, такой как 1.6? Если вы не можете запустить последнюю версию OSX и, следовательно, не можете сделать так, чтобы у вас была машина с Windows, доступная в учебном лагере или что-то еще, возможно, стоит попробовать одну из более поздних эталонных версий Sun, чтобы посмотреть, как у вас дела.

Также стоит опубликовать сообщение на форуме JavaFX — http://forums.sun.com/forum.jspa?forumID=932

Sun обычно довольно хорошо реагирует на них.

person Community    schedule 03.08.2009
comment
Я запускал этот пример на WinXp с аналогичными аппаратными характеристиками и получил почти такой же результат, когда навел мышь на текст. - person Mykola Golubyev; 03.08.2009

VBox {кэш: истинное содержимое: преобразование textNodes: bind Transform.translate (0, yoffset); ...

--

cache: подсказка производительности для системы, указывающая, что этот Node должен быть кэширован как растровое изображение.

person Community    schedule 03.08.2009
comment
Хороший! Но, как я упомянул пример, только для имитации прокрутки текста, поэтому текстовые элементы будут изменяться все время, пока текст прокручивается. - person Mykola Golubyev; 04.08.2009