更改屏幕分辨率,无需调整窗口大小或使用全屏(LWJGL 2)

问题描述:

我有一个简单的游戏,使用LWJGL 2,我希望它能够获得给定窗口大小的最佳分辨率。

看来,这与DisplayMod有关,但如果我不在FullScreen mod中,它不会改变游戏分辨率,它只是调整窗口大小。

我能够通过以下方式在FullScreen中执行我想要的操作:Display.setDisplayMode(DisplayMode),但正如我所说,如果显示器不是全屏模式,它只是更改窗口大小,而不是分辨率。

所以我的问题是,如何在没有全屏/调整窗口大小的情况下获得更好的分辨率?

编辑(2017年4月8日):
为了帮助你理解我的问题,我有一个条记录短片时,切换到全屏/窗口化:https://www.mediafire.com/file/j9t06qa3aaw9e59/Resolution%20bug.mov更改屏幕分辨率,无需调整窗口大小或使用全屏(LWJGL 2)

为了设置分辨率,您将需要使用帧缓冲区。您将需要渲染到帧缓冲区,然后当您准备好将正确分辨率的帧缓冲区发送到屏幕时,您将帧缓冲区闪烁到窗口的后台缓冲区。这是一个tutorial,虽然在C++中。这应该让你指出正确的方向!

要更改全屏游戏分辨率当您创建框架中庸之道把

Display.setFullscreen(true); 

,并创建DISPLAYMODE

ArrayList<DisplayMode> Mode = new ArrayList<DisplayMode>(); 

的一个新的ArrayList后,后创建新的ArrayList得到所有的屏幕尺寸支持by your graphic cards

try { 
    DisplayMode[] modes; 
     modes = Display.getAvailableDisplayModes(); //get all resolution 
    for (int i=0;i<modes.length;i++) { 
     DisplayMode current = modes[i]; //add all DisplaMode to arraylist 
     Resolutions.add(current); 
    } 
    } catch (LWJGLException e) { 
     e.printStackTrace(); 
    } 
    for (DisplayMode mode : Resolutions) { //optional just to see all resolution 
     System.out.println(mode.getWidth() + "x" + mode.getHeight() + "x"+mode.getBitsPerPixel() + " " + mode.getFrequency() + "Hz"); 
    } 

并加载DisplayMode

Display.setDisplayMode(Mode.get(int)); 
+0

但是,如果我设置由Display.getAvailableDisplayModes()给出的最佳可能的解决方案;但没有FullScreen,我会得到窗口模组的分辨率? (我现在无法测试) –

+0

If Fullscreen = true如果Fullscreen = false,将调整所有屏幕的大小,只调整窗口大小[Like This(By me)](https://www.youtube.com/watch?v = -vw8QlHUHtI)我希望这会帮助你如果你只想要一个完整的大小理由 Display.setResizable(true); 并点击全屏按钮 – Blackoutburst

+0

因此,没有办法通过固定的窗口显示大小获得更好/更改的分辨率? –