Skip to content

Commit 297db34

Browse files
[Rendering] WIP;
1 parent e39fdad commit 297db34

29 files changed

+1139
-2399
lines changed

BuiltinResources/Hidden/Shaders/Default/Standard.shader

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ End Instancing
3737
Begin Common
3838

3939
/*
40-
[[vk::binding(1, StapleUniformBufferSet)]]
40+
[[vk::binding(StapleBufferIndexCount, StapleUniformBufferSet)]]
4141
cbuffer Uniforms
4242
{
4343
float3 viewPosition;

BuiltinResources/Hidden/Shaders/Sprite/Sprite.shader

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ End Input
1717
Begin Common
1818

1919
/*
20-
[[vk::binding(1, StapleUniformBufferSet)]]
20+
[[vk::binding(StapleBufferIndexCount, StapleUniformBufferSet)]]
2121
cbuffer Uniforms
2222
{
2323
float4 mainColor;

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

Lines changed: 38 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Staple.Internal;
1010
/// </summary>
1111
public class SkinnedMeshRenderSystem : IRenderSystem
1212
{
13-
private const int SkinningBufferIndex = 15;
13+
private const int SkinningBufferIndex = 1;
1414

1515
/// <summary>
1616
/// Info for rendering
@@ -159,45 +159,29 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
159159
transform = transform,
160160
});
161161
}
162-
}
163162

164-
public void Submit(ushort viewID)
165-
{
166-
if (renderers.TryGetValue(viewID, out var content) == false)
163+
foreach (var (entity, instance, transform) in instances.Contents)
167164
{
168-
return;
169-
}
170-
171-
Material lastMaterial = null;
172-
173-
var lastMeshAsset = 0;
174-
var lastLighting = MaterialLighting.Unlit;
175-
var lastTopology = MeshTopology.Triangles;
176-
177-
//bgfx.discard((byte)bgfx.DiscardFlags.All);
178-
179-
foreach(var (entity, instance, transform) in instances.Contents)
180-
{
181-
if(instance.mesh?.MeshAssetMesh is null)
165+
if (instance.mesh?.MeshAssetMesh is null)
182166
{
183167
var animator = entity.GetComponent<SkinnedMeshAnimator>();
184168

185-
if(animator?.mesh is not null)
169+
if (animator?.mesh is not null)
186170
{
187171
instance.mesh = animator.mesh;
188172
}
189173

190174
var renderers = entity.GetComponentsInChildren<SkinnedMeshRenderer>();
191175

192-
foreach(var renderer in renderers)
176+
foreach (var renderer in renderers)
193177
{
194-
if(renderer.mesh is not null)
178+
if (renderer.mesh is not null)
195179
{
196180
instance.mesh = renderer.mesh;
197181
}
198182
}
199183

200-
if(instance.mesh is null)
184+
if (instance.mesh is null)
201185
{
202186
continue;
203187
}
@@ -221,19 +205,15 @@ public void Submit(ushort viewID)
221205
boneMatrices = instance.boneMatrices;
222206
}
223207

224-
/*
225208
if ((instance.boneBuffer?.Disposed ?? true))
226209
{
227-
instance.boneBuffer = VertexBuffer.Create(VertexLayoutBuilder.CreateNew()
210+
instance.boneBuffer = VertexBuffer.Create(boneMatrices.AsSpan(), VertexLayoutBuilder.CreateNew()
228211
.Add(VertexAttribute.TexCoord0, VertexAttributeType.Float4)
229212
.Add(VertexAttribute.TexCoord1, VertexAttributeType.Float4)
230213
.Add(VertexAttribute.TexCoord2, VertexAttributeType.Float4)
231214
.Add(VertexAttribute.TexCoord3, VertexAttributeType.Float4)
232-
.Build(), RenderBufferFlags.ComputeRead, true, (uint)boneMatrices.Length);
233-
234-
instance.boneBuffer.Update(boneMatrices.AsSpan(), 0, true);
215+
.Build(), RenderBufferFlags.ComputeRead);
235216
}
236-
*/
237217

238218
instance.transformUpdateTimer += Time.deltaTime;
239219

@@ -247,9 +227,9 @@ public void Submit(ushort viewID)
247227

248228
instance.animator ??= new(entity, EntityQueryMode.Self, false);
249229

250-
foreach(var (t, modifier) in instance.modifiers.Contents)
230+
foreach (var (t, modifier) in instance.modifiers.Contents)
251231
{
252-
if(instance.animator.Content?.evaluator != null)
232+
if (instance.animator.Content?.evaluator != null)
253233
{
254234
continue;
255235
}
@@ -259,9 +239,25 @@ public void Submit(ushort viewID)
259239

260240
UpdateBoneMatrices(instance.mesh.meshAsset, instance.boneMatrices, instance.transformCache);
261241

262-
//instance.boneBuffer.Update(instance.boneMatrices.AsSpan(), 0, true);
242+
instance.boneBuffer.Update(instance.boneMatrices.AsSpan());
263243
}
264244
}
245+
}
246+
247+
public void Submit(ushort viewID)
248+
{
249+
if (renderers.TryGetValue(viewID, out var content) == false)
250+
{
251+
return;
252+
}
253+
254+
Material lastMaterial = null;
255+
256+
var lastMeshAsset = 0;
257+
var lastLighting = MaterialLighting.Unlit;
258+
var lastTopology = MeshTopology.Triangles;
259+
260+
var renderState = new RenderState();
265261

266262
var l = content.Length;
267263

@@ -315,59 +311,40 @@ void SetupMaterial()
315311
lastLighting = lighting;
316312
lastTopology = renderer.mesh.MeshTopology;
317313

318-
//bgfx.discard((byte)bgfx.DiscardFlags.All);
319-
320314
SetupMaterial();
321315

322-
//if (material.ShaderProgram.Valid == false)
316+
if (material.ShaderProgram == null)
323317
{
324-
//bgfx.discard((byte)bgfx.DiscardFlags.All);
325-
326318
continue;
327319
}
328320

329-
//material.ApplyProperties(Material.ApplyMode.All, ref renderState);
321+
material.ApplyProperties(Material.ApplyMode.All, ref renderState);
330322
}
331323

332324
SetupMaterial();
333325

334-
//if (material.ShaderProgram.Valid == false)
326+
if (material.ShaderProgram == null)
335327
{
336-
//bgfx.discard((byte)bgfx.DiscardFlags.All);
337-
338328
continue;
339329
}
340330

341-
unsafe
342-
{
343-
var transform = item.transform.Matrix;
344-
345-
//_ = bgfx.set_transform(&transform, 1);
346-
}
331+
renderState.world = item.transform.Matrix;
347332

348-
//renderer.mesh.SetActive(j);
333+
renderer.mesh.SetActive(ref renderState, j);
349334

350335
lightSystem?.ApplyLightProperties(material, RenderSystem.CurrentCamera.Item2.Position, lighting);
351336

352-
//var program = material.ShaderProgram;
353-
354-
/*
355-
bgfx.set_state((ulong)(material.shader.StateFlags |
356-
renderer.mesh.PrimitiveFlag() |
357-
material.CullingFlag), 0);
358-
359-
var flags = bgfx.DiscardFlags.State;
337+
var program = material.ShaderProgram;
360338

361339
var buffer = instance.boneBuffer;
362340

363-
buffer?.SetBufferActive(SkinningBufferIndex, Access.Read);
341+
renderState.program = program;
364342

365-
RenderSystem.Submit(viewID, program, flags, renderer.mesh.SubmeshTriangleCount(j), 1);
366-
*/
343+
renderState.readOnlyBuffers = [(SkinningBufferIndex, buffer)];
344+
345+
RenderSystem.Submit(viewID, renderState, renderer.mesh.SubmeshTriangleCount(j), 1);
367346
}
368347
}
369-
370-
//bgfx.discard((byte)bgfx.DiscardFlags.All);
371348
}
372349

373350
/// <summary>

Engine/Staple.Core/Rendering/Graphics.cs

Lines changed: 26 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ public static void RenderGeometry(VertexBuffer vertex, IndexBuffer index,
8585
}
8686

8787
public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<ushort> indices, Material material, Vector3 position,
88-
Matrix4x4 transform, MeshTopology topology, MaterialLighting lighting, ushort viewID, Action materialSetupCallback = null) where T: unmanaged
88+
Matrix4x4 transform, MeshTopology topology, MaterialLighting lighting, ushort viewID, Action materialSetupCallback = null)
89+
where T: unmanaged
8990
{
9091
if (vertices.Length == 0||
9192
indices.Length == 0 ||
@@ -95,38 +96,19 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
9596
throw new Exception("Invalid arguments passed");
9697
}
9798

98-
/*
99-
bgfx.discard((byte)bgfx.DiscardFlags.All);
100-
101-
var vertexBuffer = VertexBuffer.CreateTransient(vertices, layout);
102-
var indexBuffer = IndexBuffer.CreateTransient(indices);
103-
104-
if(vertexBuffer == null || indexBuffer == null)
105-
{
106-
return;
107-
}
108-
109-
unsafe
99+
var renderState = new RenderState()
110100
{
111-
_ = bgfx.set_transform(&transform, 1);
112-
}
113-
114-
bgfx.StateFlags state = material.shader.StateFlags |
115-
(bgfx.StateFlags)topology |
116-
material.CullingFlag;
117-
118-
bgfx.set_state((ulong)state, 0);
119-
120-
vertexBuffer.SetActive(0, 0, (uint)vertices.Length);
121-
indexBuffer.SetActive(0, (uint)indices.Length);
101+
primitiveType = topology,
102+
world = transform,
103+
};
122104

123105
if (materialSetupCallback != null)
124106
{
125107
materialSetupCallback();
126108
}
127109
else
128110
{
129-
material.ApplyProperties(Material.ApplyMode.All);
111+
material.ApplyProperties(Material.ApplyMode.All, ref renderState);
130112

131113
material.DisableShaderKeyword(Shader.SkinningKeyword);
132114

@@ -139,21 +121,19 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
139121

140122
var program = material.ShaderProgram;
141123

142-
if (program.Valid)
124+
if (program == null)
143125
{
144-
lightSystem?.ApplyLightProperties(material, RenderSystem.CurrentCamera.Item2.Position, lighting);
145-
146-
RenderSystem.Submit(viewID, program, bgfx.DiscardFlags.All, Mesh.TriangleCount(topology, indices.Length), 1);
147-
}
148-
else
149-
{
150-
bgfx.discard((byte)bgfx.DiscardFlags.All);
126+
return;
151127
}
152-
*/
128+
129+
lightSystem?.ApplyLightProperties(material, RenderSystem.CurrentCamera.Item2.Position, lighting);
130+
131+
RenderSystem.Instance.RenderSimple(vertices, layout, indices, viewID, renderState);
153132
}
154133

155134
public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<uint> indices, Material material, Vector3 position,
156-
Matrix4x4 transform, MeshTopology topology, MaterialLighting lighting, ushort viewID, Action materialSetupCallback = null) where T : unmanaged
135+
Matrix4x4 transform, MeshTopology topology, MaterialLighting lighting, ushort viewID, Action materialSetupCallback = null)
136+
where T : unmanaged
157137
{
158138
if (vertices.Length == 0 ||
159139
indices.Length == 0 ||
@@ -163,38 +143,19 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
163143
throw new Exception("Invalid arguments passed");
164144
}
165145

166-
/*
167-
bgfx.discard((byte)bgfx.DiscardFlags.All);
168-
169-
var vertexBuffer = VertexBuffer.CreateTransient(vertices, layout);
170-
var indexBuffer = IndexBuffer.CreateTransient(indices);
171-
172-
if (vertexBuffer == null || indexBuffer == null)
173-
{
174-
return;
175-
}
176-
177-
unsafe
146+
var renderState = new RenderState()
178147
{
179-
_ = bgfx.set_transform(&transform, 1);
180-
}
181-
182-
bgfx.StateFlags state = material.shader.StateFlags |
183-
(bgfx.StateFlags)topology |
184-
material.CullingFlag;
185-
186-
bgfx.set_state((ulong)state, 0);
187-
188-
vertexBuffer.SetActive(0, 0, (uint)vertices.Length);
189-
indexBuffer.SetActive(0, (uint)indices.Length);
148+
primitiveType = topology,
149+
world = transform,
150+
};
190151

191152
if (materialSetupCallback != null)
192153
{
193154
materialSetupCallback();
194155
}
195156
else
196157
{
197-
material.ApplyProperties(Material.ApplyMode.All);
158+
material.ApplyProperties(Material.ApplyMode.All, ref renderState);
198159

199160
material.DisableShaderKeyword(Shader.SkinningKeyword);
200161

@@ -207,17 +168,14 @@ public static void RenderSimple<T>(Span<T> vertices, VertexLayout layout, Span<u
207168

208169
var program = material.ShaderProgram;
209170

210-
if (program.Valid)
171+
if (program == null)
211172
{
212-
lightSystem?.ApplyLightProperties(material, RenderSystem.CurrentCamera.Item2.Position, lighting);
213-
214-
RenderSystem.Submit(viewID, program, bgfx.DiscardFlags.All, Mesh.TriangleCount(topology, indices.Length), 1);
215-
}
216-
else
217-
{
218-
bgfx.discard((byte)bgfx.DiscardFlags.All);
173+
return;
219174
}
220-
*/
175+
176+
lightSystem?.ApplyLightProperties(material, RenderSystem.CurrentCamera.Item2.Position, lighting);
177+
178+
RenderSystem.Instance.RenderSimple(vertices, layout, indices, viewID, renderState);
221179
}
222180
}
223181
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Staple.Internal;
2+
3+
internal interface IRenderCommand
4+
{
5+
void Update(IRendererBackend rendererBackend);
6+
}

Engine/Staple.Core/Rendering/RenderSystem/Backend/IRenderPass.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)