Start · Sprachen · JavaScript · Referenz · GPUCanvasContext.getConfiguration()

GPUCanvasContext.getConfiguration()

Methode

Gibt die aktuell mit <code>configure()</code> gesetzte Konfiguration eines <code>GPUCanvasContext</code> zurück oder <code>null</code>, wenn der Kontext nicht konfiguriert ist.

seit JavaScript WebGPU; Chrome/Edge 131+, Firefox und Safari mit W Kategorie: webapi

Signatur

GPUCanvasContext.prototype.getConfiguration()

Beschreibung

Mit getConfiguration() fragen Sie ab, wie ein WebGPU-Canvas-Kontext gerade konfiguriert ist. Sie erhalten ein Objekt mit denselben Feldern, die Sie GPUCanvasContext.configure() übergeben haben: device, format, usage, viewFormats, colorSpace, toneMapping und alphaMode. Nicht angegebene Felder werden mit ihren Standardwerten ergänzt.

Die Methode ist praktisch, wenn Bibliotheken, Hilfsfunktionen oder Debug-Werkzeuge einen fremden Kontext übernehmen und wissen müssen, welches Gerät und welches Texturformat verwendet wird, etwa um passende Render-Pipelines zu erstellen. Sie eignet sich auch dazu, bei einer Größenänderung oder einem Wechsel von Einstellungen (z. B. alphaMode) die vorhandene Konfiguration zu übernehmen und nur einzelne Werte zu ändern.

Ist der Kontext noch nicht konfiguriert oder wurde unconfigure() aufgerufen, gibt die Methode null zurück. So können Sie auch prüfen, ob configure() bereits aufgerufen wurde.

Rückgabewert

Typ
GPUCanvasConfiguration | null
Beschreibung
Ein neues Objekt mit device (GPUDevice), format (GPUTextureFormat), usage (Zahl, Bitmaske aus GPUTextureUsage), viewFormats (Array), colorSpace ("srgb" | "display-p3"), toneMapping ({ mode }) und alphaMode ("opaque" | "premultiplied"). null, wenn der Kontext nicht konfiguriert ist.

Beispiele

Konfiguration setzen und wieder auslesen

const canvas = document.querySelector('canvas');
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const context = canvas.getContext('webgpu');

console.log(context.getConfiguration()); // noch nicht konfiguriert

context.configure({
  device,
  format: navigator.gpu.getPreferredCanvasFormat(),
  alphaMode: 'premultiplied'
});

const config = context.getConfiguration();
console.log(config.format, config.alphaMode, config.colorSpace);
console.log(config.device === device);
null bgra8unorm premultiplied srgb true

Pipeline passend zum vorhandenen Kontext erstellen

// Hilfsfunktion, die nur den Kontext erhält
const createPipelineFor = (context, shaderCode) => {
  const config = context.getConfiguration();
  if (!config) {
    throw new Error('Canvas-Kontext ist nicht konfiguriert');
  }
  const { device, format } = config;
  const module = device.createShaderModule({ code: shaderCode });
  return device.createRenderPipeline({
    layout: 'auto',
    vertex: { module, entryPoint: 'vs' },
    fragment: { module, entryPoint: 'fs', targets: [{ format }] }
  });
};

Einzelne Einstellung ändern, Rest übernehmen

const toggleTransparency = (context) => {
  const current = context.getConfiguration();
  if (!current) return;
  context.configure({
    ...current,
    alphaMode: current.alphaMode === 'opaque' ? 'premultiplied' : 'opaque'
  });
  console.log('Neuer alphaMode:', context.getConfiguration().alphaMode);
};

toggleTransparency(canvas.getContext('webgpu'));
Neuer alphaMode: premultiplied

// Wichtig · Fallstricke

  • Der Rückgabewert ist eine Kopie. Wenn Sie das Objekt ändern, ändert sich der Kontext nicht. Neue Werte übernimmt der Kontext erst nach einem erneuten Aufruf von configure().
  • Prüfen Sie vor dem Zugriff auf null, besonders nach unconfigure() oder bevor configure() aufgerufen wurde.
  • Die Methode kam erst nach der ersten WebGPU-Veröffentlichung hinzu (Chrome/Edge 131). Ältere WebGPU-Umgebungen kennen sie eventuell nicht. Prüfen Sie das bei Bedarf mit typeof context.getConfiguration === 'function'. Das Feld toneMapping fehlt in manchen Umgebungen ebenfalls.
  • WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung.