'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var Buffer = require('../../shared/buffer/Buffer.js');
var _const = require('../../shared/buffer/const.js');

function GpuReadBuffer(buffer, renderer) {
  const bufferSize = buffer.descriptor.size;
  const device = renderer.gpu.device;
  const stagingBuffer = new Buffer.Buffer({
    data: new Float32Array(24e5),
    usage: _const.BufferUsage.MAP_READ | _const.BufferUsage.COPY_DST
  });
  const stagingGPUBuffer = renderer.buffer.createGPUBuffer(stagingBuffer);
  const commandEncoder = device.createCommandEncoder();
  commandEncoder.copyBufferToBuffer(
    renderer.buffer.getGPUBuffer(buffer),
    0,
    // Source offset
    stagingGPUBuffer,
    0,
    // Destination offset
    bufferSize
  );
  device.queue.submit([commandEncoder.finish()]);
  void stagingGPUBuffer.mapAsync(
    GPUMapMode.READ,
    0,
    // Offset
    bufferSize
    // Length
  ).then(() => {
    stagingGPUBuffer.getMappedRange(0, bufferSize);
    stagingGPUBuffer.unmap();
  });
}

exports.GpuReadBuffer = GpuReadBuffer;
//# sourceMappingURL=GpuReadBuffer.js.map
