@@ -10,6 +10,8 @@ namespace Shabby.DynamicProperties;
10
10
11
11
internal class MpbCompiler : IDisposable
12
12
{
13
+ #region Fields
14
+
13
15
/// Immutable.
14
16
internal readonly SortedSet < Props > Cascade ;
15
17
@@ -19,8 +21,13 @@ internal class MpbCompiler : IDisposable
19
21
20
22
private static readonly MaterialPropertyBlock EmptyMpb = new ( ) ;
21
23
24
+ #endregion
25
+
22
26
internal MpbCompiler ( SortedSet < Props > cascades )
23
27
{
28
+ MaterialPropertyManager . Instance ? . LogDebug (
29
+ $ "new cache entry { RuntimeHelpers . GetHashCode ( this ) } ") ;
30
+
24
31
Cascade = cascades ;
25
32
RebuildManagerMap ( ) ;
26
33
RewriteMpb ( ) ;
@@ -30,6 +37,8 @@ internal MpbCompiler(SortedSet<Props> cascades)
30
37
}
31
38
}
32
39
40
+ #region Renderer registration
41
+
33
42
internal void Register ( Renderer renderer )
34
43
{
35
44
linkedRenderers . Add ( renderer ) ;
@@ -40,8 +49,21 @@ internal void Unregister(Renderer renderer)
40
49
{
41
50
linkedRenderers . Remove ( renderer ) ;
42
51
renderer . SetPropertyBlock ( EmptyMpb ) ;
52
+ CheckLiveness ( ) ;
43
53
}
44
54
55
+ private void CheckLiveness ( )
56
+ {
57
+ if ( linkedRenderers . Count > 0 ) return ;
58
+ MaterialPropertyManager . Instance . LogDebug (
59
+ $ "dead cache entry { RuntimeHelpers . GetHashCode ( this ) } ") ;
60
+ PropsCascade . RemoveCacheEntry ( this ) ;
61
+ }
62
+
63
+ #endregion
64
+
65
+ #region Props updates
66
+
45
67
private void RebuildManagerMap ( )
46
68
{
47
69
idManagerMap . Clear ( ) ;
@@ -65,16 +87,20 @@ private void RebuildManagerMap()
65
87
private void OnPropsValueChanged ( Props props )
66
88
{
67
89
WriteMpb ( props ) ;
68
- Apply ( ) ;
90
+ ApplyAll ( ) ;
69
91
}
70
92
71
93
private void OnPropsEntriesChanged ( Props props )
72
94
{
73
95
RebuildManagerMap ( ) ;
74
96
RewriteMpb ( ) ;
75
- Apply ( ) ;
97
+ ApplyAll ( ) ;
76
98
}
77
99
100
+ #endregion
101
+
102
+ #region Apply
103
+
78
104
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
79
105
private void WriteMpb ( Props props )
80
106
{
@@ -92,7 +118,7 @@ private void RewriteMpb()
92
118
93
119
private readonly List < Renderer > _deadRenderers = [ ] ;
94
120
95
- internal void Apply ( )
121
+ private void ApplyAll ( )
96
122
{
97
123
foreach ( var renderer in linkedRenderers ) {
98
124
if ( renderer == null ) {
@@ -108,12 +134,13 @@ internal void Apply()
108
134
MaterialPropertyManager . Instance . Remove ( dead ) ;
109
135
}
110
136
111
- if ( linkedRenderers . Count == 0 ) {
112
- MaterialPropertyManager . Instance . LogDebug ( "dead cache entry" ) ;
113
- PropsCascade . RemoveCacheEntry ( this ) ;
114
- }
137
+ CheckLiveness ( ) ;
115
138
}
116
139
140
+ #endregion
141
+
142
+ #region dtor
143
+
117
144
private bool _disposed = false ;
118
145
119
146
private void UnlinkProps ( )
@@ -140,4 +167,6 @@ public void Dispose()
140
167
{
141
168
UnlinkProps ( ) ;
142
169
}
170
+
171
+ #endregion
143
172
}
0 commit comments