当前位置: 首页 > news >正文

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 参数无效的直接原因。 原始代码中:

if (!SDL_SetPointerProperty(renderer_props, SDL_PROP_RENDERER_WINDOW_POINTER, p_sdl_window)) {

修正后:

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

http://www.xdnf.cn/news/752977.html

相关文章:

  • Maven概述,搭建,使用
  • leetcode-hot-100 (矩阵)
  • 设计模式——组合设计模式(结构型)
  • Android第十一次面试补充篇
  • 读《Go语言圣经记录》(二):深入理解Go语言的程序结构
  • NodeJS全栈开发面试题讲解——P10微服务架构(Node.js + 多服务协作)
  • VMware Tools 手动编译安装版
  • qwen-0.5b小模型的用处和显存要求
  • Unity Mono与IL2CPP比较
  • 大模型备案中语料安全详细说明
  • 开源库免费API服务平台 ALLBEAPI
  • unix/linux source 命令,其内部结构机制
  • unix/linux source 命令,其高级使用
  • 通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代
  • 【前端】html2pdf实现用前端下载pdf
  • Python Django完整教程与代码示例
  • Vue3 + Element Plus 防止按钮重复点击的解决方案
  • LabVIEW多按键自动化检测系统
  • 03 APP 自动化-定位元素工具元素定位
  • LabVIEW双光子显微镜开发
  • lidar和imu的标定(四)小结
  • Rust 学习笔记:自定义构建和发布配置
  • Linux 内核中 skb_dst_drop 的深入解析:路由缓存管理与版本实现差异
  • MySql(十三)
  • 测量3D翼片的距离与角度
  • Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲
  • MATLAB实战:传染病模型仿真实现
  • 刚出炉热乎的。UniApp X 封装 uni.request
  • 鸿蒙OSUniApp离线优先数据同步实战:打造无缝衔接的鸿蒙应用体验#三方框架 #Uniapp
  • 一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (一)