KHR_parallel_shader_compile-Erweiterung
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die KHR_parallel_shader_compile-Erweiterung ist Teil der WebGL-API und ermöglicht eine nicht blockierende Statusabfrage. So lässt sich die Verfügbarkeit des Komilierungs- und Verknüpfungsstatus (COMPLETION_STATUS_KHR) abfragen, ohne möglicherweise Wartezeiten zu verursachen. Anders ausgedrückt: Sie können den Kompilierungsstatus Ihrer Shader prüfen, ohne die Ausführung zu blockieren.
WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension() verfügbar.
Weitere Informationen finden Sie unter WebGL-Erweiterungen verwenden.
Konstanten
ext.COMPLETION_STATUS_KHR-
Ein GLenum.
Beispiele
Aktivieren Sie die Erweiterung:
const ext = gl.getExtension("KHR_parallel_shader_compile");
Im Allgemeinen empfiehlt sich mit oder ohne die Erweiterung folgendes Vorgehen:
// 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);
Mit der Erweiterung können Anwendungen ohne Ruckler abfragen, ob Programme verknüpft wurden. Die gesamte verstrichene Zeit für die Verknüpfung bleibt dabei jedoch wahrscheinlich gleich:
// 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;
}
}
Spezifikationen
| Spezifikation |
|---|
| WebGL KHR_parallel_shader_compile Extension Specification> |