Signatur
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
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);
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'));
// 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 nachunconfigure()oder bevorconfigure()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 FeldtoneMappingfehlt in manchen Umgebungen ebenfalls. - WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung.