【问题标题】:Java Efficiency: Fullscreen Exclusive ModeJava 效率:全屏独占模式
【发布时间】:2012-08-16 00:45:35
【问题描述】:

最近我遇到了 Java 的全屏独占模式。当我自己尝试时,我遇到了一些问题:在全屏模式下在 JFrame 或 Frame 中渲染完全相同的内容需要更长的时间(40 fps),而不是在未装饰和最大化的窗口(150-200 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);
}

基本上就是这样,而且仍然:所谓的高效全屏模式太慢了。

【问题讨论】:

  • Eww。不要停顿。跳过和插值。
  • 您介意给我一个关键字来搜索吗?从来没有听说过 - 猜猜这会发生,当你在学校学习 java..
  • 一般来说delta不是用来判断暂停的,而是用来判断模型更新多少。当然,这并不总是有效(例如,DVD/电影播放需要非常精确的绘制时间,否则人们会对不均匀的帧感到恼火),但对于游戏,尤其是“非谨慎”运动,一种降低 FPS 的方法,其中FPS“相对较高”(例如> 60),只是在需要时“跳过”绘制到下一个重绘周期(但不要阻塞线程)。

标签: java performance fullscreen draw


【解决方案1】:

尝试按照此处的建议设置系统属性-Dsun.java2d.d3d=falseWhy does my Java application run so slowly in full-screen mode? (and fine when windowed)

【讨论】:

  • 该死,为什么我没有找到那个.. 谢谢:)
  • 我相信那会让这个重复,不是吗。
【解决方案2】:

如果上述答案不起作用,则以不同的方式将窗口变为全屏。

代替:

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

执行此操作(假设您使用的是JFrame):

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

【讨论】:

  • 它的缺陷是它不会在全屏独占模式下显示您的JFrame,而是在窗口模式下显示。它只是看起来全屏。
  • @ThePyroEagle 是的,如果正常的 FSEM 不起作用,这应该是个技巧
  • 即使系统不支持FSEM,将窗口设置为全屏仍然会emulate全屏,所以你真正要检查的是设备是否是无头的。
猜你喜欢
  • 2012-02-26
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多