Ite*_*tor 12 window highdpi scale sdl-2
我正在开发一个OpenGL应用程序.我使用高dpi屏幕,Windows GUI缩放到125%,使程序看起来像在常规屏幕上.
如果我使用SDL2创建一个800*600的窗口,它看起来与常规屏幕相同,但它是1000*750像素.由于我使用延迟渲染,我必须创建与可绘制区域大小相同的缓冲区,所以我想找出窗口的实际大小(以像素为单位)
如果我打电话给SDL_GL_GetDrawableSize我错误地得到800*600而不是1000*750.我SDL_WINDOW_ALLOW_HIGHDPI在窗口创建时添加了标志.
我错了什么?
编辑:
如果我将Visual Studio中的DPI Awareness更改为Per Monitor High DPI Aware,那么窗口实际上是800*600,但它看起来很小.它应该是1000*750,因为Windows设置中的缩放系数是125%
您的帖子来自 2017 年 12 月,您的 SDL 版本 (2.0.7) 评论来自 2018 年 1 月。您的赏金是最新的,但没有更新的信息。
主要问题是,SDL2.0.7在Windows上无法正确支持HighDPI。2017年5月,他们准备了一个更大的补丁,但在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 值,并根据该值计算大小。
glViewPort由于您使用的是带有延迟着色的 OpenGL:请确保为每个渲染通道设置正确。