BufferStrategy与视网膜显示器一起使用

时间:2015-04-07 01:36:30

标签: java graphics retina-display graphics2d bufferstrategy

让我先从这个小例子应用程序开始:

public class Main extends Canvas{
    public static void main(String[] args) {
        new Main();
    }

    private BufferStrategy buffstrat;

    public Main() {
        JFrame frame = new JFrame();
        frame.add(this);
        this.setPreferredSize(new Dimension(800, 600));
        frame.setVisible(true);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        createBufferStrategy(2);
        buffstrat = getBufferStrategy();

        while(true) {
            paint();
        }
    }

    public void paint() {
        Graphics g = buffstrat.getDrawGraphics();
        g.setColor(Color.black);
        Image image = createImage(100, 100);
        Graphics g2 = image.getGraphics();
        g2.setColor(Color.white);
        g2.fillRect(0, 0, 100, 100);
        g2.setColor(Color.black);
        g2.drawOval(10, 10, 80, 80);
        g.drawImage(image, 0, 0, null);
        buffstrat.show();
    }
}

我的目的是让这个应用程序在视网膜分辨率上绘制一个圆圈,但我发现的是buffstrat中的缓冲区具有非视网膜分辨率的宽度。考虑到这一点,我创建了一个单独的图像来绘制圆圈然后缩小它。但是,似乎这也无济于事。

我在这里不知所措,因为我想使用BufferStrategy或类似的东西。现在,我目前使用自己的形式的可变超大缓冲区,使用repaint()重新渲染。事实证明这有偶然的vsync错误,所以我想切换到缓冲策略,但如果我失去了视网膜支持,那就不行了。关于如何同时完成正确的vsync和视网膜显示的任何想法都将非常感激!

0 个答案:

没有答案