Skip to content

Commit 7b680bb

Browse files
[Rendering] WIP on improved performance;
1 parent 1d24ec0 commit 7b680bb

27 files changed

+768
-602
lines changed

Engine/Staple.Core/Rendering/Animation/SkinnedMeshAnimatorSystem.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void Prepare()
2525
{
2626
}
2727

28-
public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
28+
public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
2929
{
3030
}
3131

@@ -34,11 +34,11 @@ public void Submit()
3434
}
3535
#endregion
3636

37-
public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
37+
public void Process(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
3838
{
39-
foreach (var (entity, transform, relatedComponent) in entities)
39+
foreach (var entry in renderQueue)
4040
{
41-
var animator = relatedComponent as SkinnedMeshAnimator;
41+
var animator = entry.component as SkinnedMeshAnimator;
4242

4343
if (animator.mesh == null ||
4444
animator.mesh.meshAsset == null ||
@@ -54,7 +54,7 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
5454
{
5555
animator.transformCache = new Transform[animator.mesh.meshAsset.nodes.Length];
5656

57-
SkinnedMeshRenderSystem.GatherNodeTransforms(transform, animator.transformCache, animator.mesh.meshAsset.nodes);
57+
SkinnedMeshRenderSystem.GatherNodeTransforms(entry.transform, animator.transformCache, animator.mesh.meshAsset.nodes);
5858
}
5959

6060
if (Platform.IsPlaying)
@@ -85,7 +85,7 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
8585

8686
if(animator.evaluator?.Evaluate() ?? false)
8787
{
88-
animator.modifiers ??= new(entity, EntityQueryMode.SelfAndChildren, false);
88+
animator.modifiers ??= new(entry.entity, EntityQueryMode.SelfAndChildren, false);
8989

9090
foreach(var (t, modifier) in animator.modifiers.Contents)
9191
{
@@ -101,7 +101,7 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
101101

102102
animator.evaluator = null;
103103

104-
animator.modifiers ??= new(entity, EntityQueryMode.SelfAndChildren, false);
104+
animator.modifiers ??= new(entry.entity, EntityQueryMode.SelfAndChildren, false);
105105

106106
foreach (var (t, modifier) in animator.modifiers.Contents)
107107
{
@@ -111,4 +111,4 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
111111
}
112112
}
113113
}
114-
}
114+
}

Engine/Staple.Core/Rendering/Animation/SkinnedMeshAttachmentSystem.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,23 @@ public void Prepare()
2424
{
2525
}
2626

27-
public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
27+
public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
2828
{
2929
}
3030

31-
public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
31+
public void Process(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
3232
{
33-
foreach(var (entity, transform, relatedComponent) in entities)
33+
foreach(var entry in renderQueue)
3434
{
35-
if (relatedComponent is not SkinnedMeshAttachment attachment ||
35+
if (entry.component is not SkinnedMeshAttachment attachment ||
3636
attachment.mesh == null ||
3737
attachment.mesh.meshAsset == null ||
3838
(attachment.boneName?.Length ?? 0) == 0)
3939
{
4040
continue;
4141
}
4242

43-
attachment.animator ??= new(entity, EntityQueryMode.Parent, false);
43+
attachment.animator ??= new(entry.entity, EntityQueryMode.Parent, false);
4444

4545
var animator = attachment.animator.Content;
4646

@@ -57,7 +57,7 @@ void Apply(bool first)
5757

5858
var node = nodes[attachment.nodeIndex];
5959

60-
node.ApplyTo(transform);
60+
node.ApplyTo(entry.transform);
6161
}
6262

6363
if (attachment.boneName != attachment.previousBoneName)

Engine/Staple.Core/Rendering/Animation/SkinnedMeshRenderSystem.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ private struct RenderInfo
3333

3434
public Type RelatedComponent => typeof(SkinnedMeshRenderer);
3535

36-
public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
36+
public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
3737
{
38-
foreach (var (_, transform, relatedComponent) in entities)
38+
foreach (var entry in renderQueue)
3939
{
40-
var renderer = relatedComponent as SkinnedMeshRenderer;
40+
var renderer = entry.component as SkinnedMeshRenderer;
4141

4242
if (renderer.mesh == null ||
4343
renderer.mesh.meshAsset == null ||
@@ -66,28 +66,29 @@ public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera ac
6666
continue;
6767
}
6868

69-
if (transform.ChangedThisFrame || renderer.localBounds.size == Vector3.Zero)
69+
if (entry.transform.ChangedThisFrame || renderer.localBounds.size == Vector3.Zero)
7070
{
71-
var localSize = Vector3.Abs(renderer.mesh.bounds.size.Transformed(transform.LocalRotation));
71+
var localSize = Vector3.Abs(renderer.mesh.bounds.size.Transformed(entry.transform.LocalRotation));
7272

73-
var globalSize = Vector3.Abs(renderer.mesh.bounds.size.Transformed(transform.Rotation));
73+
var globalSize = Vector3.Abs(renderer.mesh.bounds.size.Transformed(entry.transform.Rotation));
7474

75-
renderer.localBounds = new(transform.LocalPosition + renderer.mesh.bounds.center.Transformed(transform.LocalRotation) * transform.LocalScale,
76-
localSize * transform.LocalScale);
75+
renderer.localBounds = new(entry.transform.LocalPosition +
76+
renderer.mesh.bounds.center.Transformed(entry.transform.LocalRotation) * entry.transform.LocalScale,
77+
localSize * entry.transform.LocalScale);
7778

78-
renderer.bounds = new(transform.Position + renderer.mesh.bounds.center.Transformed(transform.Rotation) * transform.Scale,
79-
globalSize * transform.Scale);
79+
renderer.bounds = new(entry.transform.Position + renderer.mesh.bounds.center.Transformed(entry.transform.Rotation) * entry.transform.Scale,
80+
globalSize * entry.transform.Scale);
8081
}
8182
}
8283
}
8384

84-
public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
85+
public void Process(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
8586
{
8687
renderers.Clear();
8788

88-
foreach (var (entity, transform, relatedComponent) in entities)
89+
foreach (var entry in renderQueue)
8990
{
90-
var renderer = relatedComponent as SkinnedMeshRenderer;
91+
var renderer = entry.component as SkinnedMeshRenderer;
9192

9293
if (renderer.isVisible == false ||
9394
renderer.mesh?.MeshAssetMesh == null ||
@@ -118,7 +119,7 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
118119

119120
if (renderer.instance == null)
120121
{
121-
var rootTransform = FindRootTransform(transform, renderer.mesh.meshAsset.nodes.FirstOrDefault());
122+
var rootTransform = FindRootTransform(entry.transform, renderer.mesh.meshAsset.nodes.FirstOrDefault());
122123

123124
if (rootTransform != null)
124125
{
@@ -135,13 +136,13 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
135136
}
136137
}
137138

138-
renderer.instance ??= new(entity, EntityQueryMode.Parent, false);
139+
renderer.instance ??= new(entry.entity, EntityQueryMode.Parent, false);
139140
}
140141

141142
renderers.Add(new()
142143
{
143144
renderer = renderer,
144-
transform = transform,
145+
transform = entry.transform,
145146
});
146147
}
147148

Engine/Staple.Core/Rendering/CullingVolume/CullingVolumeSystem.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public void Prepare()
1313
{
1414
}
1515

16-
public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
16+
public void Process(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
1717
{
1818
}
1919

@@ -30,24 +30,24 @@ public void Submit()
3030
}
3131
#endregion
3232

33-
public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
33+
public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
3434
{
35-
foreach(var (entity, _, component) in entities)
35+
foreach(var entry in renderQueue)
3636
{
37-
if(component is not CullingVolume volume)
37+
if(entry.component is not CullingVolume volume)
3838
{
3939
continue;
4040
}
4141

42-
volume.renderers ??= new(entity, EntityQueryMode.SelfAndChildren, false);
43-
volume.children ??= new(entity, EntityQueryMode.Children, false);
42+
volume.renderers ??= new(entry.entity, EntityQueryMode.SelfAndChildren, false);
43+
volume.children ??= new(entry.entity, EntityQueryMode.Children, false);
4444

4545
volume.needsUpdate = true;
4646
}
4747

48-
foreach (var (_, transform, component) in entities)
48+
foreach (var entry in renderQueue)
4949
{
50-
if(component is not CullingVolume volume ||
50+
if(entry.component is not CullingVolume volume ||
5151
volume.needsUpdate == false)
5252
{
5353
continue;
@@ -99,7 +99,7 @@ public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera ac
9999

100100
case CullingVolume.CullingType.Bounds:
101101

102-
bounds = new AABB(transform.Position, volume.bounds * transform.Scale);
102+
bounds = new AABB(entry.transform.Position, volume.bounds * entry.transform.Scale);
103103

104104
break;
105105
}

Engine/Staple.Core/Rendering/Graphics.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
108108
}
109109
else
110110
{
111-
material.ApplyProperties(Material.ApplyMode.All, ref renderState);
112-
113111
material.DisableShaderKeyword(Shader.SkinningKeyword);
114112

115113
material.DisableShaderKeyword(Shader.InstancingKeyword);
114+
115+
material.ApplyProperties(Material.ApplyMode.All, ref renderState);
116116
}
117117

118118
var lightSystem = RenderSystem.Instance.Get<LightSystem>();

Engine/Staple.Core/Rendering/Lighting/LightSystem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,11 @@ public void Prepare()
145145
{
146146
}
147147

148-
public void Preprocess(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
148+
public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
149149
{
150150
}
151151

152-
public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activeCamera, Transform activeCameraTransform)
152+
public void Process(Span<RenderEntry> renderQueue, Camera activeCamera, Transform activeCameraTransform)
153153
{
154154
}
155155

0 commit comments

Comments
 (0)