Наше приложение 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, указанное выше)