Skip to content

Commit bb74bab

Browse files
johang88Eideren
authored andcommitted
fix: Regression in mesh bounds calculation introduced through #2858 (#2952)
Co-authored-by: Eideren <contact@eideren.com>
1 parent 1e5254b commit bb74bab

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

sources/engine/Stride.Graphics/VertexBufferHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public bool Read<TSemantic, TDest, TReader>(Span<TDest> destination, TReader rea
241241
IConverter<Color, TDest>,
242242
ISemantic
243243
where TDest : unmanaged
244-
where TReader : IReader<TDest>
244+
where TReader : IReader<TDest>, allows ref struct
245245
{
246246
if (Binding.Declaration.TryGetElement(TSemantic.Name, semanticIndex, out var elementData))
247247
{
@@ -267,7 +267,7 @@ public bool Read<TSemantic, TDest, TReader>(Span<TDest> destination, TReader rea
267267
private unsafe void InnerRead<TConverter, TReader, TSource, TDest>(Span<TDest> destination, TReader reader, VertexElementWithOffset element)
268268
where TConverter : IConverter<TSource, TDest>
269269
where TSource : unmanaged
270-
where TReader : IReader<TDest>
270+
where TReader : IReader<TDest>, allows ref struct
271271
{
272272
if (sizeof(TSource) != element.Size)
273273
throw new ArgumentException($"{typeof(TSource)} does not match element size ({sizeof(TSource)} != {element.Size})");

sources/engine/Stride.Rendering/Extensions/BoundingExtensions.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ public static BoundingBox ComputeBounds(this VertexBufferBinding vertexBufferBin
1616
{
1717
var helper = new VertexBufferHelper(vertexBufferBinding, vertexBufferBinding.Buffer.GetSerializationData().Content, out _);
1818

19-
var computeBoundsStruct = new ComputeBoundsStruct
19+
var box = BoundingBox.Empty;
20+
boundingSphere = BoundingSphere.Empty;
21+
var computeBounds = new ComputeBoundsHelper
2022
{
21-
Box = BoundingBox.Empty,
22-
Sphere = new BoundingSphere(),
23+
Box = ref box,
24+
Sphere = ref boundingSphere,
2325
Matrix = matrix
2426
};
25-
helper.Read<PositionSemantic, Vector3, ComputeBoundsStruct>(default, computeBoundsStruct);
26-
27-
boundingSphere = computeBoundsStruct.Sphere;
28-
return computeBoundsStruct.Box;
27+
helper.Read<PositionSemantic, Vector3, ComputeBoundsHelper>(default, computeBounds);
28+
return box;
2929
}
3030

31-
struct ComputeBoundsStruct : VertexBufferHelper.IReader<Vector3>
31+
ref struct ComputeBoundsHelper : VertexBufferHelper.IReader<Vector3>
3232
{
33-
public required BoundingBox Box;
34-
public required BoundingSphere Sphere;
33+
public required ref BoundingBox Box;
34+
public required ref BoundingSphere Sphere;
3535
public required Matrix Matrix;
3636

3737
public unsafe void Read<TConverter, TSource>(byte* startPointer, int elementCount, int stride, Span<Vector3> destination) where TConverter : IConverter<TSource, Vector3> where TSource : unmanaged

0 commit comments

Comments
 (0)