Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 support for this feature? Tell us why.

Die KHR_parallel_shader_compile Erweiterung ist Teil der WebGL API und ermöglicht eine nicht-blockierende Abfrageoperation, sodass der Verfügbarkeitsstatus von Kompilation/Verlinkung (COMPLETION_STATUS_KHR) abgefragt werden kann, ohne dass potenziell Verzögerungen auftreten. Mit anderen Worten, Sie können den Status der Kompilierung Ihrer Shader abfragen, ohne den Ablauf zu blockieren.

WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension() verfügbar. Weitere Informationen finden Sie auch unter Using Extensions im WebGL Leitfaden.

Konstanten

ext.COMPLETION_STATUS_KHR

Ein GLenum.

Beispiele

Aktivieren Sie die Erweiterung:

js
const ext = gl.getExtension("KHR_parallel_shader_compile");

Im Allgemeinen gilt als Best Practice mit oder ohne die Erweiterung:

js
// 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 abfragen, ob Programme ohne Ruckeln verlinkt wurden, aber diese werden wahrscheinlich die gleiche Gesamtzeit zur Verlinkung benötigen:

js
// 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

Browser-Kompatibilität

Siehe auch