Qt widgetgallery总结

在修复Qt WidgetGallery中遇到的“System Modal dialog”问题时,发现背景Widget创建导致Graphics Context混乱。经过深入源码调试,发现Drawable Buffer映射问题,glXDestroyContext导致纹理资源错误删除。通过修改代码并推迟unmap操作解决问题。此修改影响到Mesa库,增加了自信心,并对Linux图形调试有了更深的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      上个礼拜的工作主要focus在Qt widgetgallery 的bug上,“System Modal dialog”item会导致子目录无法返回,花费了很多时间从Qt 的source code方面缩小问题的范围,当时发现background的widget创建会导致graphics context的使用混乱。

 

      唉,debug进行了3,4天以后,几乎失去了所有的方向,能试的方式基本上都试过了,包括怀疑gc的混乱导致texture出了问题,直接从driver的角度关闭texture,结果显示会导致所有的字体都显示不了,跟子目录的退出没有直接关系。

 

      绝望之后卷土重来,发现一个drawable buffer的映射出了问题,glXDestroyContext会注销上下文资源(纹理,3D buffers等),然后DestroyDrawable,包括先unmap,有一个pBuffer在unmap的时候binding的texture refcount不是0,这点比较奇怪,不知道是不是跟处在multiple context环境下有关,窃以为纹理的refcount不为0就表示它还会被用到,不该删除。glx 扩展texture_from_pixmap真是问题多多。

 

      于是改code,加了条件判定,DestroyDrawable的时候如果texture from pixmap refcount 还没消减到0就保留,推迟unmap操作,在app调用ReleaseTexImage脱开pBuffer绑定的时候unmap. 大功告成。这部分修改包括upstream mesa,以后各位3D同仁从mesa repository拿到的code会有一部分出自小女子之手。 嗯,小得意下。

 

      现在关于这个问题还有一点疑问, DRI context free以后为什么还会有3D rendering task?所有的render不是都要在上下文中做吗?随着工作积累慢慢找答案吧。

 

       最后总结一下体会,每一个critical 的bug都要经历一个过程,迷茫,探索,解决,我经历过很多很多这样的过程,解决过一个又一个问题,但是每一次新的debug还是会怀疑自己,还是会想寻找帮助。sophia,要相信自己,其实你已经有很深厚的linux graphics debug功底了,你只是缺少信心。加油!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值