mgpuWriteUint64 function

void mgpuWriteUint64(
  1. MGPUBuffer buffer,
  2. Uint64List inputData,
  3. int size
)

Implementation

void mgpuWriteUint64(MGPUBuffer buffer, Uint64List inputData, int size) {
  final int elementsRequested = size > 0 ? size : inputData.length;
  final int actualElements = elementsRequested <= inputData.length
      ? elementsRequested
      : inputData.length;
  final int byteSize = actualElements * Uint64List.bytesPerElement;
  final JSNumber ptr = _malloc(byteSize.toJS);
  final int startByteIndex = ptr.toDartInt;
  try {
    if (startByteIndex % 8 != 0) {
      throw StateError('Uint64 pointer not 8-byte aligned');
    }
    final startElementIndex = startByteIndex ~/ Uint64List.bytesPerElement;
    final heapUint64 = _heapU8.buffer.asUint64List();
    if (startElementIndex + actualElements > heapUint64.length) {
      throw StateError('Uint64 write would exceed heap bounds');
    }
    heapUint64.setRange(
      startElementIndex,
      startElementIndex + actualElements,
      inputData.sublist(0, actualElements),
    );
    _mgpuWriteUint64(buffer, ptr, byteSize.toJS);
  } finally {
    _free(ptr);
  }
}