Получение текущего режима отображения всегда ноль

Я пытаюсь получить текущий режим отображения с видеокарты пользователя, чтобы моя игра могла воспроизводиться в полноэкранном режиме. Однако каждый раз, когда я ищу совместимый режим отображения, мой метод возвращает ноль, что, конечно, означает, что я не могу ничего рисовать на экране, потому что нечего рисовать. Итак, мой вопрос, как исправить этот метод, чтобы он возвращал соответствующий режим отображения? Я работаю на Macbook Pro 15" Retina, что заставляет меня поверить, что это может быть мой компьютер. Я напечатал ширину и высоту моего экрана:

 `Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();`

Который выводит 1440 ширину, 900 высоту. Один из моих совместимых режимов - 1440x900, поэтому я не совсем уверен, почему он не будет работать. Вот соответствующий код (плохой режим печатается каждый раз):

//Find the first displaymode that is supported by the video card
public DisplayMode findFirstCompatibleDisplayMode(DisplayMode allDisplayModes[])
{
    DisplayMode goodDisplayModes[] = video_card.getDisplayModes();

    for (int i = 0; i < allDisplayModes.length; i++)
        for (int j = 0; j < goodDisplayModes.length; j++)
            if (displayModesMatch(allDisplayModes[i], goodDisplayModes[j]))
            {
                System.out.println("good mode");
                return goodDisplayModes[j];
            }

    System.out.println("bad mode");
    return null;
}

Параметр allDisplayModes[] инициализируется и передается следующим образом:

private static DisplayMode possibleDisplayModes[] = {
    new DisplayMode(1440, 900, 32, 0),
    new DisplayMode(1440, 900, 24, 0), new DisplayMode(1440, 900, 16, 0),
    new DisplayMode(800, 600, 24, 0), new DisplayMode(800, 600, 16, 0),
    new DisplayMode(640, 480, 32, 0), new DisplayMode(640, 480, 24, 0),
    new DisplayMode(640, 480, 16, 0)};
}

Метод displayModesMatch():

//Return trues when the video cards supported display mode is found
public boolean displayModesMatch(DisplayMode firstMode, DisplayMode secondMode)
{
    //Return true if both modes have the same resolution, bit depth, and refresh rate
    return firstMode.getWidth() == secondMode.getWidth() 
        && firstMode.getHeight() == secondMode.getHeight()
        && firstMode.getBitDepth() == secondMode.getBitDepth()
        && firstMode.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI
        && secondMode.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI
        && firstMode.getRefreshRate() == secondMode.getRefreshRate()
        && firstMode.getRefreshRate() == DisplayMode.REFRESH_RATE_UNKNOWN
        && secondMode.getRefreshRate() == DisplayMode.REFRESH_RATE_UNKNOWN;
}

0 ответов

Другие вопросы по тегам