cocos creator 2.1的文本渲染分析。为什么创建标签的性能很差?
发现在微信游戏里打开就会卡。对页面的创建过程进行计时,发现主要时间都花在了创建标签上。然后分析cocos creator 2.1的文本渲染过程。
唉,看到源代码真好~ ~
求教,厦门有哪些好的游戏开发交流渠道?群体大多停滞不前,现实中没有共同的兴趣和交流的空间。感觉太封闭了。
回到主题...
cocos creator有两种文本呈现方式:
其中,系统字体应该也属于ttf。
涉及的文件有:
还有其他相关文件也和文本渲染有关,但本文重点介绍2d、webgl和ttf渲染,忽略其他。
标签组件充当属性的容器,并在属性更改时调用_updateRenderData。
标签的_assembler的定义可以在core/renderer/web GL/Label/index . js中找到。
根据类型,在core/renderer/web GL/label/2d/TTF . js中找到_assembler的实现。
core/renderer/web GL/label/2d/TTF . js继承了core/renderer/utils/label/TTF . js。
根据_ getassembledata,所有标签组件* * *共享同一个canvs元素。
UpdateRenderData执行实际的文本计算(字体、宽度、高度、基线等。)并绘制纹理。
_updateTexture首先清空画布(注意这个画布是全局唯一的,由所有TTF标签*** * *)共享。
然后画笔画,必要时画文字和下划线,最后调用_texture.handleLoadedTexture将画布提交给gpu纹理。
从上面可以看出,每个标签的创建都要经历清空重绘画布,然后提交纹理的步骤。每个标签的纹理都是独立的,不能重复使用。
当时在微信游戏上测试,平均创建一个标签需要30ms左右,创建了十几二十个标签,让人感觉明显卡顿。最后放弃了ttf标签,使用了bmfont标签来避免这个问题。感觉这里有优化的空间?
一直很好奇cocos creator的笔画实现,也一直在想shader,什么纹理扩展,卷积。
实际上:
在文件core/renderer/utils/label/TTF . js的第255行中: