Canvas更新系统

简介

Canvas 更新系统采用了脏标记模式, 该模式能够捕捉变化的UI元素,并进行最小程度的更新。
Canvas 类会在每次渲染之前 执行 CanvasUpdateRegistry 类中的 PerformUpdate() 方法
该方法会分别取出 布局重建队列 和 图像重建队列里面的元素,执行其中的 Rebuild方法对其进行更新。

重建队列是由 具体的UI元素加上去的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Graphic
// 标记具体的布局
public virtual void SetVerticesDirty()
{
if (!IsActive())
return;
m_VertsDirty = true;
// 将本身传入到registery 中进行注册
CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
if (m_OnDirtyVertsCallback != null)
m_OnDirtyVertsCallback();
}
// 每类UI元素可能会有不同的更新自身的UI策略
public virtual void Rebuild(CanvasUpdate update)
{
if (canvasRenderer == null || canvasRenderer.cull)
return;

switch (update)
{
case CanvasUpdate.PreRender:
if (m_VertsDirty)
{ UpdateGeometry();
m_VertsDirty = false;
} if (m_MaterialDirty)
{ UpdateMaterial();
m_MaterialDirty = false;
} break;
}
}

Canvas更新系统
https://chenhongjun.top/2022/09/07/Canvas更新系统/
作者
Delightening
发布于
2022年9月7日
许可协议