GPURenderBundleEncoder: phương thức setVertexBuffer()

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 setVertexBuffer() của giao diện GPURenderBundleEncoder đặt hoặc bỏ đặt GPUBuffer hiện tại cho vị trí đã cho sẽ cung cấp dữ liệu đỉnh cho các lệnh vẽ tiếp theo.

Note: Phương thức này về mặt chức năng giống hệt với phương thức tương đương trên GPURenderPassEncodersetVertexBuffer().

Cú pháp

js
setVertexBuffer(slot, buffer, offset, size)

Tham số

slot

Một số tham chiếu vị trí bộ đệm đỉnh để đặt bộ đệm đỉnh cho.

buffer

Một GPUBuffer biểu diễn bộ đệm chứa dữ liệu đỉnh để sử dụng cho các lệnh vẽ tiếp theo, hoặc null, trong trường hợp đó bất kỳ bộ đệm đã đặt trước đó trong vị trí đã cho sẽ bị bỏ đặt.

offset Optional

Một số biểu diễn độ lệch, tính bằng byte, vào buffer nơi dữ liệu đỉnh bắt đầu. Nếu bỏ qua, offset mặc định là 0.

size Optional

Một số biểu diễn kích thước, tính bằng byte, của dữ liệu đỉnh chứa trong buffer. Nếu bỏ qua, size mặc định là GPUBuffer.size của buffer trừ offset.

Giá trị trả về

Không có (Undefined).

Xác thực

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

  • GPUBuffer.usage của buffer chứa cờ GPUBufferUsage.VERTEX.
  • slot nhỏ hơn giới hạn maxVertexBuffers limit của GPUDevice.
  • offset + size nhỏ hơn hoặc bằng GPUBuffer.size của buffer.
  • offset là bội số của 4.

Ví dụ

Đặt bộ đệm đỉnh

js
function recordRenderPass(passEncoder) {
  if (settings.dynamicOffsets) {
    passEncoder.setPipeline(dynamicPipeline);
  } else {
    passEncoder.setPipeline(pipeline);
  }
  passEncoder.setVertexBuffer(0, vertexBuffer);
  passEncoder.setBindGroup(0, timeBindGroup);
  const dynamicOffsets = [0];
  for (let i = 0; i < numTriangles; ++i) {
    if (settings.dynamicOffsets) {
      dynamicOffsets[0] = i * alignedUniformBytes;
      passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
    } else {
      passEncoder.setBindGroup(1, bindGroups[i]);
    }
    passEncoder.draw(3, 1, 0, 0);
  }
}

Đoạn mã trên được lấy từ ví dụ WebGPU Samples Animometer example.

Bỏ đặt bộ đệm đỉnh

js
// Set vertex buffer in slot 0
passEncoder.setVertexBuffer(0, vertexBuffer);

// Later, unset vertex buffer in slot 0
passEncoder.setVertexBuffer(0, null);

Thông số kỹ thuật

Specification
WebGPU
# dom-gpurendercommandsmixin-setvertexbuffer

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

Xem thêm