WebGLRenderingContext: getActiveUniform() method
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available in Web Workers.
Phương thức WebGLRenderingContext.getActiveUniform() của WebGL API trả về một đối tượng WebGLActiveInfo chứa kích thước, loại và tên của một thuộc tính đồng nhất. Nó thường được sử dụng khi truy vấn các đồng phục không xác định để gỡ lỗi hoặc tạo thư viện chung.
Cú pháp
getActiveUniform(program, index)
Thông số
program-
Một
WebGLProgramchỉ định chương trình đổ bóng WebGL để từ đó lấy thông tin của biến thống nhất. index-
Một
GLuintchỉ định chỉ mục của thuộc tính thống nhất cần lấy. Cái này giá trị là chỉ số từ 0 đến N - 1 được trả về bởigl.getProgramParameter(program, gl.ACTIVE_UNIFORMS).
Giá trị trả về
Một đối tượng WebGLActiveInfo mô tả đồng phục.
Thuộc tính type của giá trị trả về sẽ là một trong những thuộc tính sau:
gl.FLOATgl.FLOAT_VEC2gl.FLOAT_VEC3gl.FLOAT_VEC4gl.INTgl.INT_VEC2gl.INT_VEC3gl.INT_VEC4gl.BOOLgl.BOOL_VEC2gl.BOOL_VEC3gl.BOOL_VEC4gl.FLOAT_MAT2gl.FLOAT_MAT3gl.FLOAT_MAT4gl.SAMPLER_2Dgl.SAMPLER_CUBE- Khi sử dụng WebGL 2 context,
có thể bổ sung thêm các giá trị sau:
gl.UNSIGNED_INTgl.UNSIGNED_INT_VEC2gl.UNSIGNED_INT_VEC3gl.UNSIGNED_INT_VEC4gl.FLOAT_MAT2x3gl.FLOAT_MAT2x4gl.FLOAT_MAT3x2gl.FLOAT_MAT3x4gl.FLOAT_MAT4x2gl.FLOAT_MAT4x3gl.SAMPLER_3Dgl.SAMPLER_2D_SHADOWgl.SAMPLER_2D_ARRAYgl.SAMPLER_2D_ARRAY_SHADOWgl.SAMPLER_CUBE_SHADOWgl.INT_SAMPLER_2Dgl.INT_SAMPLER_3Dgl.INT_SAMPLER_CUBEgl.INT_SAMPLER_2D_ARRAYgl.UNSIGNED_INT_SAMPLER_2Dgl.UNSIGNED_INT_SAMPLER_3Dgl.UNSIGNED_INT_SAMPLER_CUBEgl.UNSIGNED_INT_SAMPLER_2D_ARRAY
Khi gl.linkProgram được gọi, WebGL tạo ra một danh sách các đồng phục đang hoạt động. Đây là các giá trị có thể có của thuộc tính name của các giá trị trả về của getActiveUniform. WebGL tạo ra một hoặc nhiều mục trong danh sách tùy thuộc vào loại đồng phục được khai báo trong shader:
-
Loại cơ bản duy nhất: một mục có tên của đồng phục. Ví dụ.
uniform vec4 a;sẽ dẫn đếna. -
Mảng kiểu cơ bản: một mục có tên của đồng phục kèm theo
[0]. Ví dụ.uniform vec4 b[];sẽ dẫn đếnb[0]. -
Kiểu cấu trúc: một mục nhập cho mỗi thành viên của cấu trúc. Ví dụ.
uniform struct { float foo; vec4 bar; } c;sẽ tạo rac.foovàc.bar. -
Mảng cấu trúc hoặc mảng: mỗi mục của mảng sẽ tạo ra các mục riêng. Ví dụ.
uniform struct { float foo; vec4 bar; } d[2];sẽ dẫn đến:d[0].food[0].bard[1].food[1].bar
-
Khối thống nhất: một mục cho mỗi thành viên. Nếu khối thống nhất có một thể hiện tên, tên khối được đặt trước. Ví dụ.
uniform Block { float foo; };sẽ tạo rafoo, vàuniform Block { float bar; } e;sẽ tạo rae.bar.
Thuộc tính size của giá trị trả về tương ứng với độ dài của mảng dành cho đồng phục được khai báo dưới dạng mảng. Ngược lại, nó là 1 (bao gồm các khối giao diện được thể hiện bằng mảng).
Ngoại lệ
gl.INVALID_VALUEđược tạo ra nếu chương trìnhWebGLProgramkhông hợp lệ (không được liên kết, bị xóa, v.v.).gl.INVALID_VALUEđược tạo nếu chỉ mục không nằm trong phạm vi [0,gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)- 1].
Ví dụ
const numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
for (let i = 0; i < numUniforms; ++i) {
const info = gl.getActiveUniform(program, i);
console.log("name:", info.name, "type:", info.type, "size:", info.size);
}
Thông số kỹ thuật
| Specification |
|---|
| WebGL Specification> # 5.14.10> |