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

相关推荐
活捉一个坏小孩5 天前
Nvidia FFmpeg安装说明
ffmpeg
WF_YL6 天前
如何删除 Oracle 过期 key / 数据,删除目的的key
ffmpeg
浩瀚之水_csdn6 天前
avcodec_find_decoder函数详解
ffmpeg
浩瀚之水_csdn9 天前
avcodec_parameters_copy详解
linux·人工智能·ffmpeg
不吃鱼的猫74813 天前
【ffplay 源码解析系列】02-核心数据结构详解
c++·ffmpeg·音视频
不吃鱼的猫74813 天前
【ffplay 源码解析系列】01-开篇-ffplay整体架构与启动流程
c++·架构·ffmpeg·音视频
REDcker15 天前
FFmpeg开发者快速入门
ffmpeg
不吃鱼的猫74815 天前
【从零手写播放器:FFmpeg 音视频开发实战】04-封装格式与多媒体容器
c++·ffmpeg·音视频
REDcker16 天前
FFmpeg完整文档
linux·服务器·c++·ffmpeg·音视频·c·后端开发
硬汉嵌入式16 天前
QEMU & FFmpeg作者Fabrice Bellard推出MicroQuickJS,一款面向嵌入式系统JavaScript引擎,仅需10K RAM
javascript·ffmpeg·microquickjs