Qt widgetgallery总结

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

      上个礼拜的工作主要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会有一部分出自小女子

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值