Cocos2dx接入Qt后,Text使用TTF显示异常

简介: Cocos2dx接入Qt后,Text使用TTF显示异常

最近将Cocos2dx接入到了QT中,刚开始渲染挺正常的,后来发现只要项目中使用的Text设置了TTF字体,当点击按钮创建这样的Text时,直接不显示,比如这里的登录账号

网络异常,图片无法展示
|

于是就开始写测试例,因为项目中有部分hack Text组件的代码,在排查这个问题的过程中,还顺便修复了一个多语言文本编码的bug。

首先排查节点渲染信息,各方面属性完全正常没有问题,甚至排查了顶点数据,都没发现任何问题。

一个更加奇怪的问题是,代码中自动创建这种Text是完全正常的,而通过按钮创建的Text就异常。

首先要明确一点,游戏代码和引擎代码是没有任何问题的,因为win32版本是可以正常运行的,而且已经运行了好久,如果有问题,早就反馈修复了。

当然也有可能是在某种特定情况下,产生的新bug,而刚开始我的排查思路也是在这个方向,费了好大劲,剥离了一个稳定复现的测试例,事实证明,浪费了好多时间,虽然有了测试例,但是仍旧不知道为什么会导致异常。

后来思考了下,应该是QOpenGLWidget的设置导致的,于是排查方向转向这个地方,再次仔细review了win32的代码,一开始怀疑是frameSize,后来有怀疑是DesignResolution,结果都没有发现任何问题,于是开始在Cocos论坛、GitHub上再次搜索Cocos2dx,基本上也没有找到自己想要的结果。

期间使用gDebugger查看有问题的demo,发现TextureAtlas的size竟然不是512x512(cocos的设定,不要问为什么,问就是没有看源码),本以为找到了突破口,后来发现是gDebugger的问题,不知道为啥,有时会显示一个异常尺寸,刷新下就正常了。

后来看到这个仓库,抱着试试看的态度,竟然好使了,但是图片竟然不显示了,frameBuffer的问题?看着不像是啊!

反正最终折腾了一圈,最终定位到应该是可能跟上下文有关系,试了下,最终全部正常了,猜了一圈,对重猜对了。

这也解释了为啥点击游戏按钮创建的Text异常,因为源头来自MousePressEvent,此时是在QT的ui线程里面,需要设置下makeCurrent,把OpenGL的上下文切换过来,才能保证之后的渲染不发生异常,暂且这么解释。



目录
相关文章
|
11月前
|
API Windows
Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”
Qt-解决异常报错“QAxBase::setControl: requested control XXX could not be instantiated”
223 0
|
编译器 C语言
QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件
QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件
1034 0
QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件
|
前端开发 Windows
Qt之字体文件(TTF)
简述 TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。 在一些特殊的场合,系统字符集不包含你要用的字体,这时候,如甲骨文等古文字处理,一般在“系统盘\WINDOWS\Fonts”里,直接双击能查看是什么样的字体。 简述 Font Awesome 使
2318 0
|
2月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
129 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
27天前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
38 0
|
9天前
|
14天前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
49 2
|
24天前
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
24天前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
24天前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03