Java 2D перелистывание страниц в Linux - PullRequest
0 голосов
/ 20 сентября 2011

Наше приложение Java 2D демонстрирует разрыв экрана при работе в Linux.Это не показывает разрыв при работе на Windows.Мы потратили много времени на анализ нашего кода и пока не нашли там причины.Хотя я никогда не решаю, что это не мой код ошибки, я также интересуюсь возможностью того, что проблема связана с конвейером рендеринга Java 2D в Linux.Кстати, обратите внимание, что мы видим разрыв как с Java 6, так и с Java 7. При работе на Java 7 мы видим разрыв, независимо от того, включаем ли мы конвейер XRender или нет.

Мы, конечно,используя двойную буферизацию через BufferStrategy.Реализация BufferStrategy, которую мы получаем при вызове Frame.createBufferStrategy(2), является java.awt.Component$FlipSubRegionBufferStrategy.Кроме того, вызов isPageFlipping() для BufferStrategy BufferCapabilities возвращает значение true, а вызов isFullScreenRequired() для возможностей возвращает значение false.Мы не работаем в полноэкранном монопольном режиме, хотя мы пытались это сделать, и это не решило проблему.BufferCapabilities.getFlipContents() возвращает FlipContents.UNDEFINED (но я подозреваю, что это не имеет отношения к делу).

Поскольку предполагается, что перелистывание страниц поддерживается, и мы получаем перелистывание страниц BufferStrategy (а не блит-стратегия),Я не ожидал бы, что конвейер рендеринга будет вызывать разрыв.Тем не менее, я нашел сообщение в списке рассылки, написанное Chet Haase в 2006 году, в котором говорится о проблеме разрыва экрана, которая гласит: «Возможно, стратегия Flip на вашей конкретной платформе на самом деле делает копию за кулисами, которая будет такой же, какBltBufferStrategy, который запускает smack в артефакт обновления. "

Как я могу определить, является ли стратегия переворачивания, которую мы получаем, на самом деле листанием страниц?

Чет такжезаявляет: «Запуск полноэкранного режима с помощью BufferStrategy - достойный способ обойти это; в зависимости от платформы и ситуации, мы обычно даем вам стратегию Flip, которая (обычно) синхронизируется с вертикальным обновлением дисплея, чтобы избежать разрывов. "

Как определить, синхронизирована ли стратегия с вертикальным обновлением дисплея?

(см. http://www.mail -archive.com / java2d-Interest@capra.eng.sun.com/msg03743.html за полное сообщение от Chet Haase, указанное выше)

Ответы [ 2 ]

0 голосов
/ 22 мая 2014

Считаете ли вы, что проблема может заключаться в том, что в Windows вы используете Oracle JDK, а в Linux вы используете Open JDK?

Его легко узнать. Установите oracle jdk на свой Linux-компьютер и запустите oracle jre.

Инструкция по установке здесь

Подробности о том, как переключаться между установленными версиями jre здесь

0 голосов
/ 20 сентября 2011

В зависимости от дистрибутива, многие системы Linux теперь поставляют рабочие столы, которые по умолчанию отображаются в 3D.Если у вас есть одна из видеокарт, которая имеет низкое (или отсутствует) ускорение 3d с драйверами с открытым исходным кодом, вам может потребоваться установить проприетарный драйвер 3d, чтобы обеспечить рендеринг рабочего стола в пределах допустимых допусков для обычного использования рабочего стола.

Помните, что если ваш код выглядит правильно на других платформах и работает там превосходно;Скорее всего, это правильно в Linux.Просто у Linux гораздо больше различий в «архитектуре рендеринга», как и следовало ожидать, учитывая историю X и цели дизайна.Скорее всего, ваша графическая информация отправляется своевременно, но конвейер конфигурации просто не успевает (поэтому он немного падает, что приводит к разрыву).

Теперь по конкретным вопросам

Как я могу определить, является ли стратегия переворота, которую мы получаем, на самом деле переворотом страницы?

Вызывая методы, которые вы уже вызвали.

Как я могу определить, синхронизирована ли стратегия с вертикальным обновлением дисплея?

Трудно сказать, потому что весь смысл стратегии состоит в том, чтобы скрыть неприятные детали от пользователя API.Я не тот человек, чтобы погружаться под этими прикрытиями;но у меня есть хорошее представление о вещах со стороны X.

Мой вопрос к вам: «Этот разрыв проявляется в любом другом приложении, кроме вашего собственного?»

...