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

相关推荐
Database_Cool_9 小时前
alibabacloud-polardb-ai-assistant:让大模型成为你的数据库运维搭档
ffmpeg
ximu_polaris12 小时前
ffmpeg6.1 Windows编译支持drawtext滤镜功能
ffmpeg
_oP_i1 天前
FFmpeg 如何与ai结合剪辑出效果好的视频
人工智能·ffmpeg·音视频
四方云2 天前
电销系统中FreeSWITCH桥接播放自定义振铃:被叫接听后振铃持续问题解决
ffmpeg
花花鱼3 天前
将 MP4 转为 886×1920(竖屏)使用ffmpeg处理
ffmpeg
杨云龙UP3 天前
Oracle RAC/ODA环境下如何准确查询PDB表空间已分配大小?一次说清Oracle表空间逻辑大小和ASM三副本实际占用_2026-05-19
linux·运维·数据库·sql·oracle·ffmpeg
DogDaoDao3 天前
Android 播放器开发:从零构建全功能视频播放器
android·ffmpeg·音视频·播放器·mediacodec·编解码
学Linux的语莫4 天前
FFmpeg和流媒体服务器
ffmpeg
太阳风暴5 天前
fftools/graph-FFmpeg Filtergraph 打印系统文档
ffmpeg·滤镜图
!chen5 天前
Oracle Deep Data Security (Deep Sec) 初体验
数据库·oracle·ffmpeg