Skip to content

Commit bb9301e

Browse files
[Rendering] Fixes to Shaders, Materials, and SDL GPU;
1 parent c6b8a40 commit bb9301e

File tree

5 files changed

+31
-19
lines changed

5 files changed

+31
-19
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,17 @@ public void Submit()
165165
/// <param name="lighting">The lighting type</param>
166166
public void ApplyMaterialLighting(Material material, MaterialLighting lighting)
167167
{
168-
if(Enabled == false)
168+
if(Enabled == false || true) //TODO
169169
{
170170
material.DisableShaderKeyword(Shader.LitKeyword);
171171
material.DisableShaderKeyword(Shader.HalfLambertKeyword);
172172

173173
return;
174174
}
175175

176+
//TODO
177+
return;
178+
176179
switch (lighting)
177180
{
178181
case MaterialLighting.Lit:
@@ -214,6 +217,9 @@ public void ApplyLightProperties(Material material, Vector3 cameraPosition,
214217
return;
215218
}
216219

220+
//TODO
221+
return;
222+
217223
var targets = Lights;
218224

219225
var lightCount = targets.Length;

Engine/Staple.Core/Rendering/Material.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,8 @@ internal void ApplyProperties(ApplyMode applyMode, ref RenderState state)
11231123
foreach (var parameter in parameters.Values)
11241124
{
11251125
if((applyMode == ApplyMode.IgnoreTextures && parameter.type == MaterialParameterType.Texture) ||
1126-
(applyMode == ApplyMode.TexturesOnly && parameter.type != MaterialParameterType.Texture))
1126+
(applyMode == ApplyMode.TexturesOnly && parameter.type != MaterialParameterType.Texture) ||
1127+
parameter.shaderHandle.IsValid == false)
11271128
{
11281129
continue;
11291130
}
@@ -1144,25 +1145,25 @@ internal void ApplyProperties(ApplyMode applyMode, ref RenderState state)
11441145

11451146
case MaterialParameterType.Float:
11461147

1147-
shader.SetVector4(ShaderVariantKey, parameter.shaderHandle, new Vector4(parameter.floatValue, 0, 0, 0));
1148+
shader.SetFloat(ShaderVariantKey, parameter.shaderHandle, parameter.floatValue);
11481149

11491150
break;
11501151

11511152
case MaterialParameterType.Int:
11521153

1153-
shader.SetVector4(ShaderVariantKey, parameter.shaderHandle, new Vector4(parameter.intValue, 0, 0, 0));
1154+
shader.SetFloat(ShaderVariantKey, parameter.shaderHandle, (float)parameter.intValue);
11541155

11551156
break;
11561157

11571158
case MaterialParameterType.Vector2:
11581159

1159-
shader.SetVector4(ShaderVariantKey, parameter.shaderHandle, new Vector4(parameter.vector2Value, 0, 0));
1160+
shader.SetVector2(ShaderVariantKey, parameter.shaderHandle, parameter.vector2Value);
11601161

11611162
break;
11621163

11631164
case MaterialParameterType.Vector3:
11641165

1165-
shader.SetVector4(ShaderVariantKey, parameter.shaderHandle, new Vector4(parameter.vector3Value, 0));
1166+
shader.SetVector3(ShaderVariantKey, parameter.shaderHandle, parameter.vector3Value);
11661167

11671168
break;
11681169

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ public void Update(IRendererBackend rendererBackend)
2121
return;
2222
}
2323

24+
backend.FinishPasses();
25+
2426
backend.viewData.renderTarget = target;
2527
backend.viewData.clearMode = clearMode;
2628
backend.viewData.clearColor = clearColor;
2729
backend.viewData.viewport = viewport;
2830
backend.viewData.renderData.view = view;
2931
backend.viewData.renderData.projection = projection;
3032

31-
backend.FinishPasses();
32-
3333
var texture = nint.Zero;
3434
var width = 0;
3535
var height = 0;

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/SDLGPURendererBackend.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,9 @@ instance.program is not SDLGPUShaderProgram shader ||
10621062

10631063
if (attributeIndex < 0)
10641064
{
1065-
continue;
1065+
Log.Error($"Failed to render: vertex attribute {shader.vertexAttributes[i]} was not declared in the vertex layout!");
1066+
1067+
return false;
10661068
}
10671069

10681070
shaderAttributes.Add(new()

Engine/Staple.Core/Rendering/Shader/Shader.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Numerics;
5+
using System.Runtime.CompilerServices;
56
using System.Runtime.InteropServices;
67
using System.Text.RegularExpressions;
7-
using static System.Runtime.InteropServices.JavaScript.JSType;
88

99
namespace Staple.Internal;
1010

@@ -182,11 +182,7 @@ private static string NormalizeUniformName(string name, ShaderUniformType type)
182182
name = name.Replace(uniformCountRegex.Match(name).Value, string.Empty);
183183
}
184184

185-
return type switch
186-
{
187-
ShaderUniformType.Int or ShaderUniformType.Float or ShaderUniformType.Vector2 or ShaderUniformType.Vector3 => $"{name}_uniform",
188-
_ => name
189-
};
185+
return name;
190186
}
191187

192188
private static int NormalizeUniformCount(string name)
@@ -376,6 +372,13 @@ internal bool TryGetUniformData(string variantKey, ShaderHandle handle, out Unif
376372
return vertexData != null || fragmentData != null;
377373
}
378374

375+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
376+
internal static bool CanStoreUniformData(byte[] array, int offset, int size)
377+
{
378+
//Logic: If we have an array of 1 element, 0 + 1 < 1 fails, so must be <=
379+
return offset >= 0 && offset + size <= array.Length;
380+
}
381+
379382
private void SetValue<T>(string variantKey, ShaderHandle handle, T value) where T: unmanaged
380383
{
381384
if (TryGetUniformData(variantKey, handle, out var uniform, out var offset, out var vertexData, out var fragmentData) == false)
@@ -389,14 +392,14 @@ private void SetValue<T>(string variantKey, ShaderHandle handle, T value) where
389392
{
390393
var source = new Span<byte>(&value, size);
391394

392-
if (vertexData != null && vertexData.Length == size)
395+
if (vertexData != null && CanStoreUniformData(vertexData, offset, size))
393396
{
394397
var target = new Span<byte>(vertexData, offset, size);
395398

396399
source.CopyTo(target);
397400
}
398401

399-
if (fragmentData != null && fragmentData.Length == size)
402+
if (fragmentData != null && CanStoreUniformData(fragmentData, offset, size))
400403
{
401404
var target = new Span<byte>(fragmentData, offset, size);
402405

@@ -420,14 +423,14 @@ private void SetValue<T>(string variantKey, ShaderHandle handle, ReadOnlySpan<T>
420423
var size = Marshal.SizeOf<T>() * count;
421424
var source = new Span<byte>(ptr, size);
422425

423-
if (vertexData != null && vertexData.Length >= size && vertexData.Length % size == 0)
426+
if (vertexData != null && CanStoreUniformData(vertexData, offset, size))
424427
{
425428
var target = new Span<byte>(vertexData, offset, size);
426429

427430
source.CopyTo(target);
428431
}
429432

430-
if (fragmentData != null && fragmentData.Length >= size && fragmentData.Length % size == 0)
433+
if (fragmentData != null && CanStoreUniformData(fragmentData, offset, size))
431434
{
432435
var target = new Span<byte>(fragmentData, offset, size);
433436

0 commit comments

Comments
 (0)