Unity 6.3
0 онлайн 90 гостей 3 в системе
Вход

BufferSlice<T0>.SafeReinterpret

Declaration

public BufferSlice<U> SafeReinterpret();

Возвращаемое значение

BufferSlice<U> Псевдоним того же слоя, но переинтерпретируемый как тип целевого объекта.

Описание

Переинтерпретация слоя как имеющего иной тип данных (типовая путаница), выполнение проверок для обеспечения действительности переинтерпретации.

Безопасно переинтерпретирует фрагмент буфера, чтобы просмотреть ту же память как другой тип. Этот метод выполняет проверку, чтобы убедиться, что преобразование типа является действительным:

Правила проверки:

  • Размер целевого типа должен быть кратным размеру текущего типа.
  • Требования к выравниванию памяти должны быть выполнены.
  • Реинтерпретация не должна выходить за пределы буферных границ.

Это полезно для просмотра одних и тех же данных через линзы разных типов, например, для рассмотрения буфера с плавающей запятой как буфера Vector3.

Дополнительные ресурсы: UnsafeReinterpret для непроверенной реинтерпретации.

// Create a buffer of floats
BufferID buffer = context.CreateBuffer(300, sizeof(float)); // 300 floats
var floatSlice = new BufferSlice<float>(buffer, 0);

// Safely reinterpret as Vector3 (3 floats = 1 Vector3) var vectorSlice = floatSlice.SafeReinterpret<Vector3>(); // Now views 100 Vector3s

// Write Vector3 data through the reinterpreted slice var vectorData = new NativeArray<Vector3>(100, Allocator.Temp); for (int i = 0; i < 100; i++) vectorData[i] = new Vector3(i, i + 0.5f, i + 1.0f);

context.WriteBuffer(vectorSlice, vectorData);

// The same memory can still be read as floats var floatData = new NativeArray<float>(300, Allocator.Temp); context.ReadBuffer(floatSlice, floatData);