其他分享
首页 > 其他分享> > SDL2渲染可缩放窗口

SDL2渲染可缩放窗口

作者:互联网

问题描述

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

SDL渲染流程(img-8dQSmBFe-1630932504583)(en-resource://database/2167:1)]

获取窗口实际大小

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

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.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

在这里插入图片描述
在这里插入图片描述

最终我们找到了X11获取实际窗口大小的代码是
在这里插入图片描述

将这个代码替换X11_SDL_GetWindowSize
在这里插入图片描述

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

标签:缩放,窗口,SDL2,渲染,大小,SDL,X11,rect
来源: https://blog.csdn.net/Thank_T_F/article/details/120144468