Skip to content

Commit 958f07e

Browse files
committed
per-id differencing
1 parent dfd5950 commit 958f07e

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

Source/DynamicProperties/MaterialPropertyManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private IEnumerator<YieldInstruction> Co_propsLateUpdate()
107107
if (props.NeedsEntriesUpdate) {
108108
props.OnEntriesChanged(props);
109109
} else if (props.NeedsValueUpdate) {
110-
props.OnValueChanged(props);
110+
props.OnValueChanged(props, null);
111111
}
112112

113113
props.SuppressEagerUpdate =

Source/DynamicProperties/MpbCompiler.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ private void RebuildManagerMap()
8484
}
8585
}
8686

87-
private void OnPropsValueChanged(Props props)
87+
private void OnPropsValueChanged(Props props, int? id)
8888
{
89-
WriteMpb(props);
89+
WriteMpb(props, id);
9090
ApplyAll();
9191
}
9292

@@ -102,15 +102,24 @@ private void OnPropsEntriesChanged(Props props)
102102
#region Apply
103103

104104
[MethodImpl(MethodImplOptions.AggressiveInlining)]
105-
private void WriteMpb(Props props)
105+
private void WriteMpb(Props props, int? id)
106106
{
107-
foreach (var id in idManagerMap[props]) props.Write(id, mpb);
107+
if (id.HasValue) {
108+
props.Write(id.GetValueOrDefault(), mpb);
109+
} else {
110+
foreach (var managedId in idManagerMap[props]) props.Write(managedId, mpb);
111+
}
108112
}
109113

114+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
110115
private void RewriteMpb()
111116
{
112117
mpb.Clear();
113-
foreach (var props in idManagerMap.Keys) WriteMpb(props);
118+
foreach (var (props, managedIds) in idManagerMap) {
119+
foreach (var managedId in managedIds) {
120+
props.Write(managedId, mpb);
121+
}
122+
}
114123
}
115124

116125
[MethodImpl(MethodImplOptions.AggressiveInlining)]

Source/DynamicProperties/Props.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ public sealed class Props(int priority) : IDisposable
2727

2828
internal IEnumerable<int> ManagedIds => props.Keys;
2929

30-
internal delegate void PropsUpdateHandler(Props props);
30+
internal delegate void ValueChangedHandler(Props props, int? id);
3131

32-
internal PropsUpdateHandler OnValueChanged = delegate { };
33-
internal PropsUpdateHandler OnEntriesChanged = delegate { };
32+
internal delegate void EntriesChangedHandler(Props props);
33+
34+
internal ValueChangedHandler OnValueChanged = delegate { };
35+
internal EntriesChangedHandler OnEntriesChanged = delegate { };
3436

3537
internal bool SuppressEagerUpdate = false;
3638
internal bool NeedsValueUpdate = false;
@@ -50,7 +52,7 @@ private void _internalSet<T, TProp>(int id, T value) where TProp : Prop<T>
5052
if (!typedProp.UpdateIfChanged(value)) return;
5153

5254
if (!SuppressEagerUpdate) {
53-
OnValueChanged(this);
55+
OnValueChanged(this, id);
5456
} else {
5557
NeedsValueUpdate = true;
5658
}

0 commit comments

Comments
 (0)