BufferSlice<T>
Represents a typed view into a portion of a device buffer, enabling efficient memory management and type-safe buffer operations.
Read time 2 minutesLast updated 12 days ago
Definition
- Type: Struct
- Namespace: UnityEngine.LightTransport
- Assembly: UnityEditor
- Implements: IEquatable<BufferSlice<T>>
public struct BufferSlice<T> : IEquatable<BufferSlice<T>> where T : struct
Remarks
Unity uses the BufferSlice struct to split one large buffer allocation into smaller buffers, each with explicit types. This provides efficient memory management by allowing multiple logical buffers to share a single physical allocation while maintaining type safety.
BufferSlice is commonly used with:
- IDeviceContext.ReadBuffer and IDeviceContext.WriteBuffer for data transfers.
- IProbeIntegrator methods for input/output buffer specifications.
- Memory-efficient batching of related data structures.
The slice maintains a reference to the underlying BufferID and specifies an offset measured in elements of type T.
Examples
// Create a large buffer for multiple data typesBufferID sharedBuffer = context.CreateBuffer(1000, sizeof(float));// Create different views into the same buffervar floatSlice = new BufferSlice<float>(sharedBuffer, 0); // Elements 0-499var vectorSlice = new BufferSlice<Vector3>(sharedBuffer, 500); // Elements 500-998// Write data through different slicesvar floatData = new NativeArray<float>(500, Allocator.Temp);var vectorData = new NativeArray<Vector3>(166, Allocator.Temp);context.WriteBuffer(floatSlice, floatData);context.WriteBuffer(vectorSlice, vectorData);
Fields
Value | Description |
|---|---|
| Id | Buffer ID. |
| Offset | The number of elements to offset, measured from the beginning of the buffer. The value must not exceed the end of the buffer allocation. |
Constructors
Constructor | Description |
|---|---|
| BufferSlice`1(UnityEngine.LightTransport.BufferID,System.UInt64) | Construct a new BufferSlice struct by defining an offset from the beginning of a buffer. The buffer is defined by the BufferID. |
Methods
Method | Description |
|---|---|
| SafeReinterpret | Reinterpret the slice as having a different data type (type punning), performing checks to ensure the reinterpret is valid. |
| UnsafeReinterpret | Reinterpret the slice as having a different data type (type punning), but does not check if the reinterpret is valid. |