我正在开发一个 OpenGL 应用程序。我使用高 dpi 屏幕,Windows GUI 缩放到 125%,以使程序看起来像在常规屏幕上一样。
如果我使用 SDL2 创建一个 800*600 的窗口,它看起来与普通屏幕的大小相同,但它是 1000*750 像素。由于我使用延迟渲染,我必须创建与可绘制区域大小相同的缓冲区,所以我想找出窗口的实际大小(以像素为单位)
如果我打电话SDL_GL_GetDrawableSize
我错误地得到 800*600 而不是 1000*750。
我添加了标志 SDL_WINDOW_ALLOW_HIGHDPI
关于窗口创建。
我怎么了?
编辑 :
如果我改变 DPI 意识 在 Visual Studio 中发送至 每台显示器高 DPI 感知 那么窗口真的是800*600,但是看起来很小。它应该是 1000*750 因为 Windows 设置中的缩放因子是 125%
最佳答案
您的帖子来自 2017 年 12 月,您的 SDL 版本 (2.0.7) 评论来自 2018 年 1 月。您的赏金是最新的,但没有更新的信息。
主要问题是,SDL2.0.7 在 Windows 上没有正确支持 HighDPI。 2017年5月,他们prepared一个更大的补丁,但它是 merged 2018年2月,所以在SDL2.0.7版本之后。在我看来,它是在 SDL2.0.8 中引入的。主要更改在文件 src/video/windows/SDL_windowswindow.c
中进行。 .我比较了来源和变更日志。它绝对是上游,但有人忘记在 WhatIsNew.txt 中写下它,这很烦人。
我强烈建议将 SDL 升级到至少 2.0.8,更好的 2.0.10。
顺便提一句。补丁作者提到,你需要使用新提示SDL_HINT_VIDEO_HIGHDPI_ENABLED
.
在最坏的情况下,如果您仍然遇到问题,您可以使用 GLFW 代替 SDL。
编辑:
提问者今天提供了新信息。
您可以通过 GetDpiForMonitor 在 Windows 上查询每个监视器的 DPI 值并从中计算出大小。
由于您使用的是带有延迟着色的 OpenGL:确保您正在设置 glViewPort
每个渲染 channel 都正确。
关于window - 如何确定 Windows 10 上窗口的正确可绘制大小? (SDL2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979639/