KHR_parallel_shader_compile extension
Khả dụng hạn chế
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phần mở rộng KHR_parallel_shader_compile là một phần của WebGL API và cho phép thao tác poll không chặn, để trạng thái khả dụng biên dịch/liên kết (COMPLETION_STATUS_KHR) có thể được truy vấn mà không có khả năng gây ra các khoảng trễ. Nói cách khác, bạn có thể kiểm tra trạng thái biên dịch shader mà không chặn runtime.
Các phần mở rộng WebGL có sẵn bằng cách sử dụng phương thức WebGLRenderingContext.getExtension(). Để biết thêm thông tin, xem Sử dụng Phần mở rộng trong hướng dẫn WebGL.
Hằng số
ext.COMPLETION_STATUS_KHR-
Một GLenum.
Ví dụ
Bật phần mở rộng:
const ext = gl.getExtension("KHR_parallel_shader_compile");
Thực hành tốt nhất với hoặc không có phần mở rộng là:
// Assuming lists of `shaders` and `programs`:
for (const x of shaders) gl.compileShader(x); // Never check compile status unless subsequent linking fails.
for (const x of programs) gl.linkProgram(x);
Với phần mở rộng, các ứng dụng có thể poll xem chương trình có được liên kết chưa mà không gây ra jank:
// Generator yielding a progress ratio [0.0, 1.0].
// Without the extension, this will jank and only check one program per generation.
function* linkingProgress(programs) {
const ext = gl.getExtension("KHR_parallel_shader_compile");
let todo = programs.slice();
while (todo.length) {
if (ext) {
todo = todo.filter(
(x) => !gl.getProgramParameter(x, ext.COMPLETION_STATUS_KHR),
);
} else {
const x = todo.pop();
gl.getProgramParameter(x, gl.LINK_STATUS);
}
if (!todo.length) return;
yield 1.0 - todo.length / programs.length;
}
}
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| WebGL KHR_parallel_shader_compile Extension Specification> |