首页 > 解决方案 > SDL_GetCurrentDisplayMode 未返回正确的窗口大小

问题描述

我的问题是如何获取当前的窗口大小?

它需要能够获得全屏或窗口的窗口大小。

我正在使用 SDL2、Glad、OpenGL #ver 130。在窗口 10 上进行缩放。

我将窗口初始化为 1280x720。

SDL_CreateWindow(window, title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        1280, 720, SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL |
        SDL_WINDOW_RESIZABLE);

它是一个 OpenGL 上下文启用窗口。

SDL_GL_CreateContext
gladLoadGL

我想要的只是获取当前的窗口大小。我预计它是 1280x720。

        SDL_DisplayMode dm;
        if( SDL_GetCurrentDisplayMode( 0, &dm ) != 0 ) {
            //save log
        }
        printf("%dx%d\n", dm.h, dm.w);

终端输出。

960x1707

然而我得到一个奇数,1707x960。我不认为这是正确的。

标签: c++windowsopenglsdlhidpi

解决方案


SDL_GetCurrentDisplayMode()返回给定显示器/监视器的当前分辨率,而不是窗口的大小。

您希望SDL_GetWindowSize()将窗口大小和SDL_GL_GetDrawableSize()非 HiDPI 缩放的尺寸传递到glViewport().


推荐阅读