Interface IShapeWide<TShape>
- Namespace
- BepuPhysics.Collidables
- Assembly
- BepuPhysics.dll
Defines a widely vectorized bundle representation of a shape.
public interface IShapeWide<TShape> where TShape : IShape
Type Parameters
TShape
Scalar type of the shape.
Properties
AllowOffsetMemoryAccess
Gets whether this type supports accessing its memory by lane offsets. If false, WriteSlot must be used instead of WriteFirst.
bool AllowOffsetMemoryAccess { get; }
Property Value
InternalAllocationSize
Gets the number of bytes required for allocations within the wide shape.
int InternalAllocationSize { get; }
Property Value
MinimumWideRayCount
Gets the lower bound on the number of rays to execute in a wide fashion. Ray bundles with fewer rays will fall back to the single ray code path.
public static abstract int MinimumWideRayCount { get; }
Property Value
Methods
Broadcast(in TShape)
Broadcasts a scalar shape into a bundle containing the same shape in every lane.
void Broadcast(in TShape shape)
Parameters
shape
TShapeScalar shape to broadcast.
GetBounds(ref QuaternionWide, int, out Vector<float>, out Vector<float>, out Vector3Wide, out Vector3Wide)
Computes the bounds of all shapes in the bundle.
void GetBounds(ref QuaternionWide orientations, int countInBundle, out Vector<float> maximumRadius, out Vector<float> maximumAngularExpansion, out Vector3Wide min, out Vector3Wide max)
Parameters
orientations
QuaternionWideOrientations of the shapes in the bundle.
countInBundle
intNumber of lanes filled in the bundle.
maximumRadius
Vector<float>Computed maximum radius of the shapes in the bundle.
maximumAngularExpansion
Vector<float>Computed maximum bounds expansion that can be caused by angular motion.
min
Vector3WideMinimum bounds of the shapes.
max
Vector3WideMaximum bounds of the shapes.
Initialize(in Buffer<byte>)
For types with a nonzero internal allocation size, provides memory to the shape for internal allocations. Memory should be assumed to be stack allocated.
void Initialize(in Buffer<byte> memory)
Parameters
memory
Buffer<byte>Memory to use for internal allocations in the wide shape.
RayTest(ref RigidPoseWide, ref RayWide, out Vector<int>, out Vector<float>, out Vector3Wide)
Tests a ray against the shape.
void RayTest(ref RigidPoseWide poses, ref RayWide rayWide, out Vector<int> intersected, out Vector<float> t, out Vector3Wide normal)
Parameters
poses
RigidPoseWidePoses of the shape bundle during the ray test.
rayWide
RayWideRay to test against the shape bundle.
intersected
Vector<int>Mask representing hit state in each lane. -1 means the ray in that lane hit, 0 means a miss.
t
Vector<float>Distance along the ray direction to the hit point, if any, in units of the ray direction's length. In other words, hitLocation = origin + direction * t.
normal
Vector3WideNormal of the impact surface, if any.
WriteFirst(in TShape)
Places the specified AOS-formatted shape into the first lane of the wide 'this' reference.
void WriteFirst(in TShape source)
Parameters
source
TShapeAOS-formatted shape to gather from.
Remarks
Note that we are effectively using the TShapeWide as a stride. The base address is offset by the user of this function, so the implementation only ever considers the first slot.
WriteSlot(int, in TShape)
Places the specified AOS-formatted shape into the selected slot of the wide 'this' reference.
void WriteSlot(int index, in TShape source)
Parameters
index
intIndex of the slot to put the data into.
source
TShapeSource of the data to insert.