我目前正在为我的游戏引擎创建一个窗口类。当我调用SDL_CreateWindow时,它返回错误“窗口太大”。我该如何解决这个问题?为了显示我的游戏引擎的窗口。
我尝试将窗口创建标志设置为SDL_WINDOW_ALLOW_HIGHDPI,并且仍然报告错误。我还将清单工具中的“ DPI意识”设置为“高DPI意识”。我仍然无法解决此问题。以下包括“初始化窗口”功能的代码段。
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标志,它仍然会打印出错误消息,并且不会显示该窗口。非常感谢您对此问题的任何帮助。
答案 0 :(得分:0)
通过将x和y值传递给SDL_CreateWindow函数而不是SDL_WINDOWPOS_CENTERED解决了此问题。由keltar解决,请参阅注释。