sdl - 如何修复 SDL_CreateWindow 错误“窗口太大”
问题描述
我目前正在为我的游戏引擎创建一个窗口类。当我调用 SDL_CreateWindow 时,它返回错误“窗口太大”。我该如何解决这个问题?为了显示我的游戏引擎的窗口。
我已经尝试将窗口创建标志设置为 SDL_WINDOW_ALLOW_HIGHDPI 并且仍然报告错误。我还将清单工具中的 DPI Awareness 设置为 High DPI Aware。我仍然无法解决问题。下面包含了 Initialise Window 函数的代码片段。
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 标志,它仍然会打印出错误消息并且不显示窗口。非常感谢有关此问题的任何帮助。
解决方案
通过将 x 和 y 值传递给 SDL_CreateWindow 函数而不是关闭 SDL_WINDOWPOS_CENTERED 解决了这个问题。由keltar解决,见评论。
推荐阅读
- java - 通过调用 org.hibernate.Session 类型的对象的方法调用来确定被操作的类
- javascript - GET 请求没有完整的信息
- c - Apple Event 发送 Activate 给出错误
- javascript - 为什么我的 var 变为未定义但在前一个函数中设置?
- amazon-web-services - 通过控制台创建 sam 应用程序时,在 template.yml 文件中附加一个预先存在的角色
- amazon-s3 - 将媒体卸载到 Amazon S3 + Cloudflare CDN + LE SSL + Siteground
- ios - 如何在不连接到真正的蓝牙设备的情况下创建“EAAccessory”对象?
- data-management - 我的超级账本锯齿验证器存储空间不足
- angular - 使用 ng2-file-upload 获取图像的宽度和高度
- php - DynamoDb 中的事务在 put 方法上返回错误