GPUQueue: writeBuffer() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

Phương thức writeBuffer() của giao diện GPUQueue ghi một nguồn dữ liệu được cung cấp vào một GPUBuffer được chỉ định.

Đây là hàm tiện ích, cung cấp một giải pháp thay thế cho việc thiết lập dữ liệu buffer thông qua ánh xạ buffer và sao chép buffer sang buffer. Nó cho phép tác nhân người dùng xác định cách sao chép dữ liệu hiệu quả nhất.

Cú pháp

js
writeBuffer(buffer, bufferOffset, data, dataOffset, size)

Tham số

buffer

Một đối tượng GPUBuffer đại diện cho buffer cần ghi dữ liệu vào.

bufferOffset

Một số đại diện cho độ lệch tính bằng byte để bắt đầu ghi dữ liệu vào bên trong GPUBuffer.

data

Một đối tượng đại diện cho nguồn dữ liệu cần ghi vào GPUBuffer. Có thể là ArrayBuffer, TypedArray, hoặc DataView.

dataOffset Optional

Một số đại diện cho độ lệch để bắt đầu ghi dữ liệu từ bên trong nguồn dữ liệu. Giá trị này là số phần tử nếu dataTypedArray, và là số byte trong các trường hợp khác. Nếu bỏ qua, dataOffset mặc định là 0.

size Optional

Một số đại diện cho kích thước nội dung cần ghi từ data vào buffer. Giá trị này là số phần tử nếu dataTypedArray, và là số byte trong các trường hợp khác. Nếu bỏ qua, size sẽ bằng kích thước tổng thể của data, trừ đi dataOffset.

Giá trị trả về

Không có (Undefined).

Ngoại lệ

OperationError DOMException

Phương thức ném ra OperationError nếu các tiêu chí sau không được đáp ứng:

  • Kích thước của data bằng hoặc lớn hơn 0.
  • dataOffset bằng hoặc nhỏ hơn kích thước của data.
  • Kích thước của data (khi chuyển đổi sang byte, trong trường hợp TypedArray) là bội số của 4.

Xác thực

Các tiêu chí sau phải được đáp ứng khi gọi writeBuffer(), nếu không sẽ tạo ra GPUValidationErrorGPUQueue trở nên không hợp lệ:

  • buffer sẵn sàng để sử dụng, tức là không bị không khả dụng hoặc bị hủy.
  • usage của buffer bao gồm cờ GPUBufferUsage.COPY_DST.
  • bufferOffset, khi chuyển đổi sang byte, là bội số của 4.
  • Kích thước của data - dataOffset + bufferOffset, khi chuyển đổi sang byte, bằng hoặc nhỏ hơn GPUBuffer.size của buffer.

Ví dụ

Trong basic render demo, chúng ta định nghĩa dữ liệu đỉnh trong một Float32Array để dùng vẽ một tam giác:

js
const vertices = new Float32Array([
  0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0,
  0, 1, 1,
]);

Để sử dụng dữ liệu này trong render pipeline, ta cần đưa nó vào GPUBuffer. Đầu tiên tạo buffer:

js
const vertexBuffer = device.createBuffer({
  size: vertices.byteLength, // make it big enough to store vertices in
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});

Để đưa dữ liệu vào buffer ta có thể dùng writeBuffer():

js
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);

Thông số kỹ thuật

Specification
WebGPU
# dom-gpuqueue-writebuffer

Tương thích trình duyệt

Xem thêm