UNPKG

2.89 kBJavaScriptView Raw
1import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2import _createClass from "@babel/runtime/helpers/createClass";
3import { isSafari } from '@antv/g-webgpu-core';
4import * as WebGPUConstants from '@webgpu/types/dist/constants';
5
6var WebGPUBuffer = /*#__PURE__*/function () {
7 function WebGPUBuffer(engine, options) {
8 _classCallCheck(this, WebGPUBuffer);
9
10 this.engine = engine;
11 this.options = options;
12 this.buffer = void 0;
13 var _options = options,
14 data = _options.data,
15 usage = _options.usage,
16 type = _options.type;
17 this.buffer = this.createBuffer(data instanceof Array ? new Float32Array(data) : data, // TODO: WebGL 和 WebGPU buffer usage 映射关系
18 usage || WebGPUConstants.BufferUsage.Vertex | WebGPUConstants.BufferUsage.CopyDst);
19 }
20
21 _createClass(WebGPUBuffer, [{
22 key: "get",
23 value: function get() {
24 return this.buffer;
25 }
26 }, {
27 key: "destroy",
28 value: function destroy() {
29 this.buffer.destroy();
30 }
31 }, {
32 key: "subData",
33 value: function subData(_ref) {
34 var data = _ref.data,
35 offset = _ref.offset;
36 this.setSubData(this.buffer, offset, data instanceof Array ? new Float32Array(data) : data);
37 }
38 }, {
39 key: "createBuffer",
40 value: function createBuffer(view, flags) {
41 // @ts-ignore
42 var padding = view.byteLength % 4;
43 var verticesBufferDescriptor = {
44 // @ts-ignore
45 size: view.byteLength + padding,
46 usage: flags
47 };
48 var buffer = this.engine.device.createBuffer(verticesBufferDescriptor);
49 this.setSubData(buffer, 0, view);
50 return buffer;
51 }
52 /**
53 * 不同于 Babylon.js 的版本,使用最新的 GPUQueue.writeBuffer 方法
54 * @see https://gpuweb.github.io/gpuweb/#dom-gpuqueue-writebuffer
55 * 已废弃创建一个临时的 mapped buffer 用于拷贝数据 @see https://gpuweb.github.io/gpuweb/#GPUDevice-createBufferMapped
56 * @see https://github.com/gpuweb/gpuweb/blob/master/design/BufferOperations.md#updating-data-to-an-existing-buffer-like-webgls-buffersubdata
57 */
58
59 }, {
60 key: "setSubData",
61 value: function setSubData(destBuffer, destOffset, srcArrayBuffer) {
62 // deprecated API setSubData
63 // destBuffer.setSubData(0, srcArrayBuffer);
64 // deprecated API createBufferMapped
65 // use createBuffer & getMappedRange instead
66 // const [srcBuffer, arrayBuffer] = this.engine.device.createBufferMapped({
67 // size: byteCount,
68 // usage: WebGPUConstants.BufferUsage.CopySrc,
69 // });
70 var queue = isSafari ? // @ts-ignore
71 this.engine.device.getQueue() : this.engine.device.defaultQueue; // @ts-ignore
72
73 queue.writeBuffer(destBuffer, destOffset, srcArrayBuffer);
74 }
75 }]);
76
77 return WebGPUBuffer;
78}();
79
80export { WebGPUBuffer as default };
81//# sourceMappingURL=WebGPUBuffer.js.map
\No newline at end of file