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
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ặcDataView. dataOffsetOptional-
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
datalàTypedArray, và là số byte trong các trường hợp khác. Nếu bỏ qua,dataOffsetmặc định là 0. sizeOptional-
Một số đại diện cho kích thước nội dung cần ghi từ
datavàobuffer. Giá trị này là số phần tử nếudatalàTypedArray, và là số byte trong các trường hợp khác. Nếu bỏ qua,sizesẽ bằng kích thước tổng thể củadata, trừ đidataOffset.
Giá trị trả về
Không có (Undefined).
Ngoại lệ
OperationErrorDOMException-
Phương thức ném ra
OperationErrornếu các tiêu chí sau không được đáp ứng:- Kích thước của
databằng hoặc lớn hơn 0. dataOffsetbằng hoặc nhỏ hơn kích thước củadata.- Kích thước của
data(khi chuyển đổi sang byte, trong trường hợpTypedArray) là bội số của 4.
- Kích thước của
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 GPUValidationError và GPUQueue trở nên không hợp lệ:
buffersẵn sàng để sử dụng, tức là không bị không khả dụng hoặc bị hủy.usagecủabufferbao 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ơnGPUBuffer.sizecủabuffer.
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:
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:
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():
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
Thông số kỹ thuật
| Specification |
|---|
| WebGPU> # dom-gpuqueue-writebuffer> |