Skip to content

Commit 47dfd6d

Browse files
[Rendering] WIP;
[Utilities] Added StringID;
1 parent c8b98df commit 47dfd6d

File tree

20 files changed

+702
-711
lines changed

20 files changed

+702
-711
lines changed

Engine/Staple.Core/MessagePackGenerated/MessagePackGenerated.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3933,15 +3933,17 @@ public void Serialize(ref global::MessagePack.MessagePackWriter writer, global::
39333933
}
39343934

39353935
global::MessagePack.IFormatterResolver formatterResolver = options.Resolver;
3936-
writer.WriteArrayHeader(8);
3936+
writer.WriteArrayHeader(10);
39373937
writer.Write(value.vertexShader);
39383938
writer.Write(value.fragmentShader);
39393939
writer.Write(value.computeShader);
39403940
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.VertexFragmentShaderMetrics>().Serialize(ref writer, value.vertexMetrics, options);
39413941
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.VertexFragmentShaderMetrics>().Serialize(ref writer, value.fragmentMetrics, options);
39423942
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ComputeShaderMetrics>().Serialize(ref writer, value.computeMetrics, options);
39433943
formatterResolver.GetFormatterWithVerify<global::Staple.VertexAttribute[]>().Serialize(ref writer, value.vertexAttributes, options);
3944-
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Serialize(ref writer, value.uniforms, options);
3944+
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Serialize(ref writer, value.vertexUniforms, options);
3945+
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Serialize(ref writer, value.fragmentUniforms, options);
3946+
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Serialize(ref writer, value.computeUniforms, options);
39453947
}
39463948

39473949
public global::Staple.Internal.SerializableShaderData Deserialize(ref global::MessagePack.MessagePackReader reader, global::MessagePack.MessagePackSerializerOptions options)
@@ -3982,7 +3984,13 @@ public void Serialize(ref global::MessagePack.MessagePackWriter writer, global::
39823984
____result.vertexAttributes = formatterResolver.GetFormatterWithVerify<global::Staple.VertexAttribute[]>().Deserialize(ref reader, options);
39833985
break;
39843986
case 7:
3985-
____result.uniforms = formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Deserialize(ref reader, options);
3987+
____result.vertexUniforms = formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Deserialize(ref reader, options);
3988+
break;
3989+
case 8:
3990+
____result.fragmentUniforms = formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Deserialize(ref reader, options);
3991+
break;
3992+
case 9:
3993+
____result.computeUniforms = formatterResolver.GetFormatterWithVerify<global::Staple.Internal.ShaderUniformContainer>().Deserialize(ref reader, options);
39863994
break;
39873995
default:
39883996
reader.Skip();

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ public void Process(Span<(Entity, Transform, IComponent)> entities, Camera activ
117117
continue;
118118
}
119119

120-
if(renderer.instance == null)
120+
renderer.mesh.UploadMeshData();
121+
122+
if (renderer.instance == null)
121123
{
122124
var rootTransform = FindRootTransform(transform, renderer.mesh.meshAsset.nodes.FirstOrDefault());
123125

Engine/Staple.Core/Rendering/Material.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -937,15 +937,15 @@ public void SetTexture(string name, Texture value)
937937

938938
if (value == null)
939939
{
940-
if (string.IsNullOrEmpty(parameter.shaderHandle.DefaultValue) == false)
940+
if (string.IsNullOrEmpty(handle.DefaultValue) == false)
941941
{
942-
if (parameter.shaderHandle.DefaultValue == WhiteTexture.Guid.Guid)
942+
if (handle.DefaultValue == WhiteTexture.Guid.Guid)
943943
{
944944
value = WhiteTexture;
945945
}
946946
else
947947
{
948-
value = ResourceManager.instance.LoadTexture(parameter.shaderHandle.DefaultValue);
948+
value = ResourceManager.instance.LoadTexture(handle.DefaultValue);
949949
}
950950
}
951951
else

Engine/Staple.Core/Rendering/Mesh/Mesh+Internal.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,12 +877,16 @@ internal bool SetActive(ref RenderState state, int submeshIndex = 0)
877877

878878
if(submeshes.Count == 0)
879879
{
880+
state.vertexBuffer = vertexBuffer;
881+
state.indexBuffer = indexBuffer;
880882
state.indexCount = indices.Length;
881883
}
882884
else if(submeshIndex >= 0 && submeshIndex < submeshes.Count)
883885
{
884886
var submesh = submeshes[submeshIndex];
885887

888+
state.vertexBuffer = vertexBuffer;
889+
state.indexBuffer = indexBuffer;
886890
state.startVertex = submesh.startVertex;
887891
state.startIndex = submesh.startIndex;
888892
state.indexCount = submesh.indexCount;

Engine/Staple.Core/Rendering/Mesh/MeshRenderSystem.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,6 @@ public static void RenderMesh(Mesh mesh, Vector3 position, Quaternion rotation,
7878
depthWrite = true,
7979
primitiveType = mesh.MeshTopology,
8080
cull = material.CullingMode,
81-
indexBuffer = mesh.indexBuffer,
82-
vertexBuffer = mesh.vertexBuffer,
83-
indexCount = mesh.IndexCount,
8481
world = matrix,
8582
};
8683

@@ -351,8 +348,6 @@ public void Submit()
351348
{
352349
var content = contents.instanceInfos.Contents[i];
353350

354-
renderState.vertexBuffer = content.mesh.vertexBuffer;
355-
renderState.indexBuffer = content.mesh.indexBuffer;
356351
renderState.primitiveType = content.mesh.MeshTopology;
357352
renderState.world = content.transform.Matrix;
358353

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void BeginRenderPass(RenderTarget target, CameraClearMode clear, Color clearColo
3030

3131
IShaderProgram CreateShaderVertexFragment(byte[] vertex, byte[] fragment,
3232
VertexFragmentShaderMetrics vertexMetrics, VertexFragmentShaderMetrics fragmentMetrics,
33-
VertexAttribute[] vertexAttributes, ShaderUniformContainer uniforms);
33+
VertexAttribute[] vertexAttributes, ShaderUniformContainer vertexUniforms, ShaderUniformContainer fragmentUniforms);
3434

3535
IShaderProgram CreateShaderCompute(byte[] compute, ComputeShaderMetrics computeMetrics, ShaderUniformContainer uniforms);
3636

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderCommand.cs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
namespace Staple.Internal;
77

88
internal class SDLGPURenderCommand(RenderState state, nint pipeline, SDL.SDL_GPUTextureSamplerBinding[] samplers,
9-
Dictionary<byte, byte[]> uniformData, SDLGPUShaderProgram program) : IRenderCommand
9+
Dictionary<byte, byte[]> vertexUniformData, Dictionary<byte, byte[]> fragmentUniformData, SDLGPUShaderProgram program) : IRenderCommand
1010
{
1111
public RenderState state = state;
1212
public nint pipeline = pipeline;
1313
public SDL.SDL_GPUTextureSamplerBinding[] samplers = samplers;
14-
public Dictionary<byte, byte[]> uniformData = uniformData;
14+
public Dictionary<byte, byte[]> vertexUniformData = vertexUniformData;
15+
public Dictionary<byte, byte[]> fragmentUniformData = fragmentUniformData;
1516
public SDLGPUShaderProgram program = program;
1617

1718
public void Update(IRendererBackend rendererBackend)
@@ -84,28 +85,22 @@ state.indexBuffer is not SDLGPUIndexBuffer index ||
8485
SDL.SDL_BindGPUFragmentSamplers(renderPass, 0, samplers.AsSpan(), (uint)samplers.Length);
8586
}
8687

87-
backend.viewData.renderData.world = state.world;
88-
backend.viewData.renderData.time = Time.unscaledTime;
89-
9088
unsafe
9189
{
92-
if(uniformData.TryGetValue(0, out var data) &&
93-
Marshal.SizeOf<SDLGPURendererBackend.StapleRenderData>() == data.Length)
90+
foreach(var pair in vertexUniformData)
9491
{
95-
fixed (void* ptr = &backend.viewData.renderData)
92+
fixed (void* ptr = pair.Value)
9693
{
97-
var source = new Span<byte>(ptr, data.Length);
98-
var target = new Span<byte>(data);
99-
100-
source.CopyTo(target);
94+
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
95+
(uint)pair.Value.Length);
10196
}
10297
}
10398

104-
foreach (var pair in uniformData)
99+
foreach (var pair in fragmentUniformData)
105100
{
106-
fixed(void *ptr = pair.Value)
101+
fixed (void* ptr = pair.Value)
107102
{
108-
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
103+
SDL.SDL_PushGPUFragmentUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
109104
(uint)pair.Value.Length);
110105
}
111106
}

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderTransientCommand.cs

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
using SDL3;
22
using System;
33
using System.Collections.Generic;
4-
using System.Runtime.InteropServices;
54

65
namespace Staple.Internal;
76

87
internal class SDLGPURenderTransientCommand(RenderState state, nint pipeline,
9-
SDL.SDL_GPUTextureSamplerBinding[] samplers, Dictionary<byte, byte[]> uniformData,
8+
SDL.SDL_GPUTextureSamplerBinding[] samplers, Dictionary<byte, byte[]> vertexUniformData, Dictionary<byte, byte[]> fragmentUniformData,
109
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
1110
{
1211
public RenderState state = state;
1312
public nint pipeline = pipeline;
1413
public SDL.SDL_GPUTextureSamplerBinding[] samplers = samplers;
1514
public SDLGPURendererBackend.TransientEntry entry = entry;
16-
public Dictionary<byte, byte[]> uniformData = uniformData;
15+
public Dictionary<byte, byte[]> vertexUniformData = vertexUniformData;
16+
public Dictionary<byte, byte[]> fragmentUniformData = fragmentUniformData;
1717
public SDLGPUShaderProgram program = program;
1818

1919
public void Update(IRendererBackend rendererBackend)
@@ -80,33 +80,22 @@ program is not SDLGPUShaderProgram shader ||
8080
SDL.SDL_BindGPUFragmentSamplers(renderPass, 0, samplers.AsSpan(), (uint)samplers.Length);
8181
}
8282

83-
backend.viewData.renderData.world = state.world;
84-
backend.viewData.renderData.time = Time.unscaledTime;
85-
8683
unsafe
8784
{
88-
if (uniformData.TryGetValue(0, out var data) &&
89-
Marshal.SizeOf<SDLGPURendererBackend.StapleRenderData>() == data.Length)
85+
foreach (var pair in vertexUniformData)
9086
{
91-
fixed (void* ptr = &backend.viewData.renderData)
87+
fixed (void* ptr = pair.Value)
9288
{
93-
var source = new Span<byte>(ptr, data.Length);
94-
var target = new Span<byte>(data);
95-
96-
source.CopyTo(target);
89+
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
90+
(uint)pair.Value.Length);
9791
}
9892
}
9993

100-
foreach (var pair in uniformData)
94+
foreach (var pair in fragmentUniformData)
10195
{
102-
if (pair.Key == 0) //Staple Render Data
103-
{
104-
continue;
105-
}
106-
10796
fixed (void* ptr = pair.Value)
10897
{
109-
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
98+
SDL.SDL_PushGPUFragmentUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
11099
(uint)pair.Value.Length);
111100
}
112101
}

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderTransientUIntCommand.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
namespace Staple.Internal;
77

88
internal class SDLGPURenderTransientUIntCommand(RenderState state, nint pipeline,
9-
SDL.SDL_GPUTextureSamplerBinding[] samplers, Dictionary<byte, byte[]> uniformData,
9+
SDL.SDL_GPUTextureSamplerBinding[] samplers, Dictionary<byte, byte[]> vertexUniformData, Dictionary<byte, byte[]> fragmentUniformData,
1010
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
1111
{
1212
public RenderState state = state;
1313
public nint pipeline = pipeline;
1414
public SDL.SDL_GPUTextureSamplerBinding[] samplers = samplers;
1515
public SDLGPURendererBackend.TransientEntry entry = entry;
16-
public Dictionary<byte, byte[]> uniformData = uniformData;
16+
public Dictionary<byte, byte[]> vertexUniformData = vertexUniformData;
17+
public Dictionary<byte, byte[]> fragmentUniformData = fragmentUniformData;
1718
public SDLGPUShaderProgram program = program;
1819

1920
public void Update(IRendererBackend rendererBackend)
@@ -80,28 +81,22 @@ program is not SDLGPUShaderProgram shader ||
8081
SDL.SDL_BindGPUFragmentSamplers(renderPass, 0, samplers.AsSpan(), (uint)samplers.Length);
8182
}
8283

83-
backend.viewData.renderData.world = state.world;
84-
backend.viewData.renderData.time = Time.unscaledTime;
85-
8684
unsafe
8785
{
88-
if (uniformData.TryGetValue(0, out var data) &&
89-
Marshal.SizeOf<SDLGPURendererBackend.StapleRenderData>() == data.Length)
86+
foreach (var pair in vertexUniformData)
9087
{
91-
fixed (void* ptr = &backend.viewData.renderData)
88+
fixed (void* ptr = pair.Value)
9289
{
93-
var source = new Span<byte>(ptr, data.Length);
94-
var target = new Span<byte>(data);
95-
96-
source.CopyTo(target);
90+
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
91+
(uint)pair.Value.Length);
9792
}
9893
}
9994

100-
foreach (var pair in uniformData)
95+
foreach (var pair in fragmentUniformData)
10196
{
10297
fixed (void* ptr = pair.Value)
10398
{
104-
SDL.SDL_PushGPUVertexUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
99+
SDL.SDL_PushGPUFragmentUniformData(backend.commandBuffer, pair.Key, (nint)ptr,
105100
(uint)pair.Value.Length);
106101
}
107102
}

0 commit comments

Comments
 (0)