SDL2渲染可缩放窗口

问题描述

背景:使用一个已有的窗口句柄,传入SDL2进行渲染视频。
问题:当缩放窗口大小时,渲染区域不会改变,一直都是初始大小,没有跟随实际的窗口大小。

SDL渲染流程SDL2渲染可缩放窗口

获取窗口实际大小

由流程可以看出,问题的关键在于如何获取窗口的实际大小。

windows系统

在Windows下可通过Windows的API获取

    RECT	rect;
    GetWindowRect((HWND)hWnd, &rect);
    *nWidth = rect.right - rect.left;
    *nHeight = rect.bottom - rect.top;

linux操作系统

linux下我试过SDL_GetWindowSize, SDL_GetWindowBordersSize, 获取到的都不是实际窗口的大小。
并且SDL2并没有一个接口给我调用可以获得窗口实际大小。

不过没关系,没有枪没有炮我们自己造。

首先,我们只传给了SDL2一个窗口句柄,SDL2能正确的渲染出来,说明SDL2在创建窗口的时候一定获取到了窗口的实际大小。 好嘞,我们看SDL2的源码。

进入SDL_video.c 种的CreateWindowFrom.

SDL2渲染可缩放窗口

没有什么有用的信息,SDL_CreateWindowFrom 只是一个接口函数,我们还得进入红框框住的真正函数里面。
由于我们知道linux 一般都是X11做的界面。我们直接找到SDL_x11windows.c 的 X11_CreateSDLWindowFrom就好了。

SDL2渲染可缩放窗口
SDL2渲染可缩放窗口

最终我们找到了X11获取实际窗口大小的代码是
SDL2渲染可缩放窗口

将这个代码替换X11_SDL_GetWindowSize
SDL2渲染可缩放窗口

这样当我们调用X11_SDL_GetWindowSize的时候,获取的就是实际的窗口大小了。

上一篇:minix3.2.1安装x11需要更换软件源


下一篇:linux安装wkhtmltox