Двойная буферизация Java - рисуется только каждый второй кадр - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь разработать полноэкранное приложение, но у меня проблемы с двойными буферами.

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 Ответ

1 голос
/ 03 декабря 2011

Я только что попробовал это 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();
...
...