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 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:

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

Im Allgemeinen empfiehlt sich mit oder ohne die Erweiterung folgendes Vorgehen:

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 ohne Ruckler abfragen, ob Programme verknüpft wurden. Die gesamte verstrichene Zeit für die Verknüpfung bleibt dabei jedoch wahrscheinlich gleich:

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