WebGL2RenderingContext: phương thức getBufferSubData()

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

* Some parts of this feature may have varying levels of support.

Note: This feature is available in Web Workers.

Phương thức WebGL2RenderingContext.getBufferSubData() của WebGL 2 API đọc dữ liệu từ một điểm liên kết bộ đệm và ghi chúng vào một ArrayBuffer hoặc SharedArrayBuffer.

Cú pháp

js
getBufferSubData(target, srcByteOffset, dstData)
getBufferSubData(target, srcByteOffset, dstData, dstOffset)
getBufferSubData(target, srcByteOffset, dstData, dstOffset, length)

Tham số

target

Một GLenum chỉ định điểm liên kết (target). Các giá trị có thể:

gl.ARRAY_BUFFER

Bộ đệm chứa các thuộc tính đỉnh, chẳng hạn như tọa độ đỉnh, dữ liệu tọa độ texture hoặc dữ liệu màu đỉnh.

gl.ELEMENT_ARRAY_BUFFER

Bộ đệm dùng cho chỉ mục phần tử.

gl.COPY_READ_BUFFER

Bộ đệm để sao chép từ một đối tượng bộ đệm sang bộ đệm khác.

gl.COPY_WRITE_BUFFER

Bộ đệm để sao chép từ một đối tượng bộ đệm sang bộ đệm khác.

gl.TRANSFORM_FEEDBACK_BUFFER

Bộ đệm cho các hoạt động transform feedback.

gl.UNIFORM_BUFFER

Bộ đệm dùng để lưu trữ các khối uniform.

gl.PIXEL_PACK_BUFFER

Bộ đệm dùng cho các hoạt động chuyển pixel.

gl.PIXEL_UNPACK_BUFFER

Bộ đệm dùng cho các hoạt động chuyển pixel.

srcByteOffset

Một GLintptr chỉ định offset byte từ nơi bắt đầu đọc từ bộ đệm.

dstData

Một đối tượng TypedArray hoặc DataView để sao chép dữ liệu vào. Nếu dstData là một DataView thì dstOffsetlength được hiểu theo byte, nếu không thì loại phần tử của dstData được sử dụng.

dstOffset Optional

Một GLuint chỉ định offset phần tử bắt đầu ghi trong dstData.

length Optional

Một GLuint chỉ định số phần tử sẽ sao chép. Nếu là 0 hoặc không được chỉ định, getBufferSubData sẽ sao chép cho đến cuối dstData.

Giá trị trả về

None (undefined).

Ngoại lệ

Lỗi INVALID_VALUE được tạo nếu:

  • offset + returnedData.byteLength sẽ vượt quá cuối bộ đệm
  • returnedDatanull
  • offset nhỏ hơn 0.

Lỗi INVALID_OPERATION được tạo nếu:

  • số 0 được liên kết với target
  • targetTRANSFORM_FEEDBACK_BUFFER và bất kỳ đối tượng transform feedback nào hiện đang hoạt động.

Ví dụ

js
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

const arrBuffer = new ArrayBuffer(
  vertices.length * Float32Array.BYTES_PER_ELEMENT,
);
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, new Float32Array(arrBuffer));

Đặc tả kỹ thuật

Specification
WebGL 2.0 Specification
# 3.7.3

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

Xem thêm