SDL3和QT的结合

SDL3和Qt的组合

sdl作为简单的媒体库,简单易用,对图片操作有API硬件加速,可以高效的操作大量的图片。
并且,SDL可以作为库,和Qt界面库并存,并作为硬件加速的图片处理器来使用。
但是想要做离屏渲染,不方便。

sdl的Renderer创建,必须依赖Window,否则就会使用software渲染,不能使用硬件加速功能。

幸运的是

SDL2中,可以提供了一个专有API可以绑定到windows

核心代码:

Label *imgLabel;
...
SDL_Window *window= SDL_CreateWindowFrom((void *)imgLabel->winId());

SDL3中,并没有提供专有的API,而是把这个功能合并到一个通用的API上,需要填充对应的参数,才能正常工作。

核心代码:

// SDL 3.2.16
Label *imgLabel;

SDL_PropertiesID props = SDL_CreateProperties();
SDL_SetPointerProperty(props, SDL_PROP_WINDOW_CREATE_WIN32_HWND_POINTER, (void *)imgLabel->winId());

SDL_Window *window= SDL_CreateWindowWithProperties(props);

2025年8月17日补充:
windows下,sdl3和qt组合使用的时候,SDL_RenderPresent函数调用之后,立刻读取像素SDL_RenderReadPixels,拿到的不是最新绘制的内容,而是上一帧的内容。
猜测是Qt的调度问题,等到下个绘制周期再刷新。

posted @ 2025-06-09 12:24  Xdesigner  阅读(286)  评论(0)    收藏  举报