官方能否优化一下Label在cacheMode=Bitmap的性能浪费?

  • Creator 版本: 3.7.1 到 3.8.2

  • 目标平台: 全平台

  • 重现方式:把一个Label设cacheMode为bitmap,对label节点设置active=false,再设置active=true

  • 主要问题:当label没有修改过,单纯的node.active=false 再 node.active=true时,label节点重新执行了一遍渲染运算。详细如下:

  • Fig 1.1 onEnable时执行了_applyFontTexture函数
    image

  • Fig 1.2 _applyFontTexture里执行了markForUpdateRenderData
    image

  • Fig 1.3 markForUpdateRenderData里执行了dirty操作
    image

  • Fig 1.4 导致了在ttUtils.ts 中的updateRenderData里又重新运算处理一遍label的图片
    image

官方能否后面优化这部分, 现在的情况白白浪费了性能。或者能否解释一下为何要这様处理?

确实 :joy: :joy: :joy:

我的理解是,node的active是一个节点整体的激活和休眠开关,所以从设计上来说,一个节点开关一下之后,是要强制刷新的。
如果你要要做一个label的显示隐藏操作,应该操作渲染组件enabled开关

因为这样bug概率最小 ,文字虽然没变,其它参数不一定,那么就得全判断,现在就很省心,全给你刷一次,逻辑还说得过去

使用node.layer = xxx 来控制照相机渲染或不渲染,来实现显示隐藏 ,性能会不会好一些

但引擎里其他属性其实都有get set函数, 直接在set里做dirty标记不就行了吗?需然代码处理上很麻烦, 但是作为一个引擎提供方,引擎性能不是应该最优先保证吗,要知道引擎上的偷赖,就是变相增加使用引擎方的压力。
image