Двойная буферизация Java - рисуется только каждый второй кадр
Я пытаюсь разработать полноэкранное приложение, но у меня проблемы с двойными буферами.
public void create ()
{
window = new JWindow ();
window.setIgnoreRepaint (true);
GraphicsEnvironment.getLocalGraphicsEnvironment ().getDefaultScreenDevice ().setFullScreenWindow (window);
window.setVisible (true);
window.createBufferStrategy (2);
}
public void renderCycle ()
{
BufferStrategy strategy = window.getBufferStrategy ();
while (true)
{
render ((Graphics2D) strategy.getDrawGraphics ());
strategy.show ();
}
}
public void render (Graphics2D g)
{
g.setColor (Color.WHITE);
g.drawString ("Veikia", 100, 100);
}
Я вижу сильное мерцание - кажется, что текст рисуется только на каждом другом буфере, а оставшиеся буферы содержат белый фон. В чем может быть проблема?
1 ответ
Решение
Я только что попробовал это MultiBufferTest
, Я не видел артефакт рендеринга, пока lag
период упал ниже соответствующей частоты обновления монитора. Ваш пример, кажется, не имеет задержки между кадрами.
Я добавил несколько строк, чтобы показать период кадра:
...
g.fillRect(0, 0, bounds.width, bounds.height);
g.setColor(Color.black); // added
g.drawString(String.valueOf(lag), 100, 100); // added
bufferStrategy.show();
...