Как исправить ошибку SDL_CreateWindow "Окно слишком большое" - PullRequest
0 голосов
/ 24 мая 2019

В настоящее время я создаю класс окна для своего игрового движка.Когда я вызываю SDL_CreateWindow, он возвращает ошибку «Окно слишком большое».Как мне решить эту проблему?Для того, чтобы отобразить окно для моего игрового движка.

Я попытался установить флаг создания окна в SDL_WINDOW_ALLOW_HIGHDPI, и ошибка все еще возвращается.Я также установил DPI Awareness в инструменте манифеста на High DPI Aware.Я все еще не могу решить проблему.Фрагмент кода функции окна инициализации приведен ниже.

SDL_DisplayMode displayMode;
for (int32_t i = 0; i < SDL_GetNumVideoDisplays(); i++)
{
    int32_t displayModeCount = SDL_GetCurrentDisplayMode(i, &displayMode);
    if (displayModeCount != 0)
    {
        std::printf("Could not get display mode for video display %d: %s", i, SDL_GetError());
    }
    else
    {
        m_width = displayMode.w;
        m_height = displayMode.h;
        std::printf("Display %d current display mode is %dx%dpx", i, displayMode.w, displayMode.h);

        float DPI;
        SDL_GetDisplayDPI(displayModeCount, nullptr, &DPI, nullptr);
        x = static_cast<int32_t>(m_width * DPI / DPI);
        y = static_cast<int32_t>(m_height * DPI / DPI);
    }
}

uint32_t windowFlags = SDL_WINDOW_ALLOW_HIGHDPI;
m_pWindow = SDL_CreateWindow(m_title.c_str(), x, y, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, windowFlags);
if (m_pWindow == nullptr)
{
    std::printf("Could not create window: %s", SDL_GetError());
}

Даже с установленным флагом SDL_WINDOW_ALLOW_HIGHDPI он все равно выводит сообщение об ошибке и не отображает окно.Любая помощь по этому вопросу высоко ценится.

1 Ответ

0 голосов
/ 24 мая 2019

Решил эту проблему, передав значения x и y в функцию SDL_CreateWindow вместо SDL_WINDOWPOS_CENTERED.Решено keltar, см. Комментарий.

...