SDL_CreateRendererWithProperties报错Parameter ‘window‘ is invalid

SDL_CreateRendererWithProperties报错Parameter 'window' is invalid

这个错误日志表明,即使你的窗口(p_sdl_window)被成功创建了,并且你尝试通过属性集(renderer_props)将其传递给渲染器,但渲染器在创建时仍然认为它没有获得一个有效的窗口。

先说明,本文使用的SDL版本是3.2.14!

SDL_PROP_RENDERER_WINDOW_POINTER -> SDL_PROP_RENDERER_CREATE_WINDOW_POINTER (核心问题解决的关键)

修改点: 这是我们经过多次验证,最终发现的导致 window 参数无效的直接原因。 原始代码中:

C++ 复制代码
if (!SDL_SetPointerProperty(renderer_props, SDL_PROP_RENDERER_WINDOW_POINTER, p_sdl_window)) {

修正后:

C++ 复制代码
if (!SDL_SetPointerProperty(renderer_props, SDL_PROP_RENDERER_CREATE_WINDOW_POINTER, p_sdl_window)) { // 修正为 CREATE_WINDOW_POINTER

原因和解决的问题: 这个是关键!SDL3 的属性系统对于"创建时设置的属性"和"获取已存在对象属性"使用了不同的命名。

  • SDL_PROP_RENDERER_WINDOW_POINTER 倾向于用于获取一个已存在渲染器的关联窗口。
  • SDL_PROP_RENDERER_CREATE_WINDOW_POINTER 才是用于在创建渲染器时,明确告知 SDL 这个渲染器应该关联哪个窗口的属性。

当你使用 SDL_PROP_RENDERER_WINDOW_POINTER 去设置时,尽管 SDL_SetPointerProperty 返回了 true(这本身可能是一个误导性的成功返回,或者说它成功地处理了"设置一个未知属性"这个操作),但实际上渲染器在创建时并没有在 renderer_props 中找到它期望的 SDL_PROP_RENDERER_CREATE_WINDOW_POINTER。所以它认为 window 参数是无效的。

通过修正为 SDL_PROP_RENDERER_CREATE_WINDOW_POINTER,我们确保了窗口指针被正确地存储在了渲染器创建函数期望的属性位置,从而解决了 Parameter 'window' is invalid 这个错误。

SDL_PROP_RENDERER_DRIVER_STRING -> SDL_PROP_RENDERER_CREATE_NAME_STRING (指定驱动名的修正)

修改点: 类似于窗口指针的属性,用于指定渲染器驱动的名称也需要使用 CREATE 前缀。 原始代码中可能尝试:

复制代码
// if (!SDL_SetStringProperty(renderer_props, SDL_PROP_RENDERER_DRIVER_STRING, "opengl")) {

修正后:

复制代码
if (!SDL_SetStringProperty(renderer_props, SDL_PROP_RENDERER_CREATE_NAME_STRING, "opengl")) { // 修正为 CREATE_NAME_STRING

原因和解决的问题: 类似,SDL_PROP_RENDERER_DRIVER_STRING 倾向于用于获取 已存在渲染器的驱动名称。SDL_PROP_RENDERER_CREATE_NAME_STRING 才是用于在创建渲染器时指定其应使用的渲染器驱动(例如 "opengl", "direct3d" 等)。这个修改确保了渲染器能够按照你的意愿尝试使用 OpenGL 驱动。

相关推荐
Rysxt_2 天前
FFmpeg 教程:从入门到精通,探索多媒体处理的瑞士军刀
ffmpeg·音频处理
小小ken3 天前
whisper-large-v3部署详细步骤,包括cpu和gpu方式,跟着做一次成功
ffmpeg·whisper·语音识别
少年白char3 天前
Music Tag Web 怎么安装 ffmpeg?
ffmpeg
feiyangqingyun4 天前
基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
android·qt·ffmpeg
骄傲的心别枯萎4 天前
RV1126 NO.30:RV1126多线程获取音频AI的PCM数据
linux·ffmpeg·音视频·pcm·视频编解码
浆果02075 天前
.h264或.264视频文件转化成mp4视频
python·ffmpeg·h.264
BIBI20495 天前
使用 Captura 和 FFmpeg 配置免费高效的录屏环境
ffmpeg·captura
浆果02075 天前
FFmpeg安装(Windows)
windows·ffmpeg
小狮子安度因5 天前
FFmpeg过滤器之crop
ffmpeg
风间琉璃•5 天前
FFmpeg视频编解码
ffmpeg·视频编解码