Java效率:全屏独占模式

时间:2012-08-16 00:45:35

标签: java performance fullscreen draw

最近我遇到了Java的全屏独占模式。正如我自己尝试的那样,我遇到了一些问题:在全屏模式下在JFrame或Frame中渲染完全相同的内容比在未修饰和最大化的窗口(150-200 fps)中花费更长的时间(40 fps)。 我的屏幕设置为50 fps,即每帧20毫秒,我看不到,这个时间丢失了。我唯一的想法是,Jave - 出于某种原因 - 决定在全屏时使用我的板载显卡。

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    try {
        gd.setFullScreenWindow(window);
    } finally {
        gd.setFullScreenWindow(null);
    }
} else {
    this.fullscreen = false;
}

我使用一个框架管理重新绘制,通过暂停计算的时间来尝试将帧速率保持在一定水平。

int delta = (int) (System.currentTimeMillis() - timestamp); //timestamp: start of this round
if(animated - delta > 0)
    pause(animated - delta);

最后我使用双缓冲绘制框架:

public void render(Graphics2D a) { //window graphics are passed
    Graphics2D g = (Graphics2D) backBuffer.getGraphics();
    //Adjusting some rendering hints here...
    //Then drawing some stuff...
    g.dispose();
    a.drawImage(backBuffer, 0, 0, null);
}

基本上就是这样,并且仍然是:所谓的高效全屏模式非常慢。

2 个答案:

答案 0 :(得分:0)

尝试按Why does my Java application run so slowly in full-screen mode? (and fine when windowed)

中的建议设置系统属性-Dsun.java2d.d3d=false

答案 1 :(得分:0)

如果上述答案无效,请以不同方式将窗口设置为全屏。

而不是:

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    gd.setFullScreenWindow(window);
}

这样做(假设你正在使用JFrame):

myFrame.setUndecorated(true);
myFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);