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 驱动。

相关推荐
智能直播1 天前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
八月的雨季 最後的冰吻2 天前
FFmepg-- 42-ffplay.c 线程安全机制深度分析
c语言·安全·ffmpeg
开开心心就好2 天前
把手机变成电脑麦克风,WiFi连接就能用
智能手机·ffmpeg·计算机外设·电脑·word·音视频
@嵌入式扫地僧3 天前
FFmpeg 解码 H.264 流提取 SEI 用户数据实战
ffmpeg·h.264·流媒体开发·sei 解析·自定义 sei
VimorphTech3 天前
ffmpeg.wasm 实战:浏览器提取视频音频,如何处理进度、取消和资源释放?
ffmpeg
小小龙学IT3 天前
FFmpeg 开源多媒体处理框架深度解析:从命令行到 libav* 全家桶
c语言·ffmpeg·开源
ofoxcoding4 天前
Gemini TTS 与 ElevenLabs 语音合成实测:同一段视频旁白效果对比
ai·ffmpeg·音视频
_大峰_4 天前
索尼 A7M4 误删视频恢复实战:基于原始卡镜像重建 MP4 数据
ffmpeg·数据恢复·音视频·mp4·exfat
Anhty5 天前
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
功能测试·ffmpeg·音视频
VidDown6 天前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频