mgpuReadBufferSync function

Future<void> mgpuReadBufferSync(
  1. MGPUBuffer buffer,
  2. Float32List outputData, {
  3. int readElements = 0,
  4. int elementOffset = 0,
  5. int readBytes = 0,
  6. int byteOffset = 0,
})

Implementation

Future<void> mgpuReadBufferSync(
  MGPUBuffer buffer,
  Float32List outputData, {
  int readElements = 0,
  int elementOffset = 0,
  int readBytes = 0,
  int byteOffset = 0,
}) async {
  // Determine the number of elements to read.
  final int sizeToRead =
      (readElements > 0)
          ? readElements * Float32List.bytesPerElement
          : (readBytes > 0 ? readBytes : (outputData.length - elementOffset));

  // If readElements is provided, calculate the effective byte offset based on element count.
  final int effectiveByteOffset =
      (readElements > 0)
          ? elementOffset * Float32List.bytesPerElement
          : byteOffset;

  final JSNumber ptr = _malloc(sizeToRead.toJS);
  final int startIndex = ptr.toDartInt ~/ Float32List.bytesPerElement;

  try {
    await ccall(
      "mgpuReadBufferSync".toJS,
      "number".toJS,
      ["number", "number", "number", "number"].toJSDeep,
      [buffer, ptr, sizeToRead.toJS, effectiveByteOffset.toJS].toJSDeep,
      {"async": true}.toJSDeep,
    ).toDart;

    final int elementsToRead = sizeToRead ~/ Float32List.bytesPerElement;

    final output = _heapF32.sublist(startIndex, startIndex + elementsToRead);
    outputData.setAll(elementOffset, output);
  } finally {}
}