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

时间:2017-08-04 10:23:38

标签: java lwjgl screen-resolution

我有一个用 LWJGL 2 制作的简单游戏,我想让它获得给定窗口大小可能达到的最佳分辨率。

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

我可以通过:Display.setDisplayMode(DisplayMode)在FullScreen中做我想要的,但正如我所说,如果显示器不是全屏模式,它只是改变窗口大小,但不是决议。

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

编辑(04/08/2017):
为了帮助您理解我的问题,我在切换到FullScreen / Windowed时录制了一段短视频:https://www.mediafire.com/file/j9t06qa3aaw9e59/Resolution%20bug.mov

2 个答案:

答案 0 :(得分:1)

在创建框架juste put时,在全屏模式下更改游戏分辨率

Display.setFullscreen(true);

并在创建DisplayMode的新ArrayList

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

创建新的ArrayList后,通过图形卡获得所有屏幕尺寸支持

    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));

答案 1 :(得分:0)

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