Signatur
Beschreibung
Die Eigenschaft label ist ein String, den du jeder GPUTexture geben kannst. Sie hat keinen Einfluss auf das Rendering. Sie dient nur der Fehlersuche: Browser verwenden die Bezeichnung in Validierungsfehlern (GPUValidationError), in Konsolenwarnungen und in GPU-Debugging-Werkzeugen. So erscheint dort zum Beispiel „[Texture "Schattenkarte"] is destroyed“ und nicht nur ein namenloses Objekt.
Normalerweise wird die Bezeichnung beim Anlegen über das Feld label im Deskriptor von GPUDevice.createTexture() gesetzt. Weil die Eigenschaft beschreibbar ist, kannst du sie später auch direkt ändern. Das ist nützlich, wenn eine Textur im Lauf der Anwendung eine andere Aufgabe bekommt, etwa in einem Textur-Pool.
Wurde keine Bezeichnung angegeben, ist der Wert ein leerer String (""). Die Eigenschaft gehört zum Mixin GPUObjectBase. Deshalb haben auch alle anderen WebGPU-Objekte wie GPUBuffer, GPUTextureView, GPUSampler oder GPURenderPipeline eine label-Eigenschaft, die genauso funktioniert.
Rückgabewert
"". Beim Setzen wird jeder Wert in einen String umgewandelt.Beispiele
Bezeichnung beim Anlegen der Textur vergeben
const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) throw new Error('WebGPU wird nicht unterstützt');
const device = await adapter.requestDevice();
const depthTexture = device.createTexture({
label: 'Tiefenpuffer Hauptszene',
size: [1280, 720],
format: 'depth24plus',
usage: GPUTextureUsage.RENDER_ATTACHMENT,
});
console.log(depthTexture.label);
Bezeichnung nachträglich lesen und ändern
const texture = device.createTexture({
size: [256, 256],
format: 'rgba8unorm',
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
});
console.log(JSON.stringify(texture.label)); // noch keine Bezeichnung
// Textur aus einem Pool wird für eine neue Aufgabe verwendet
texture.label = 'Sprite-Atlas Level 3';
console.log(texture.label);
Bezeichnung in Validierungsfehlern sichtbar machen
const shadowMap = device.createTexture({
label: 'Schattenkarte',
size: [2048, 2048],
format: 'depth32float',
usage: GPUTextureUsage.RENDER_ATTACHMENT,
});
device.pushErrorScope('validation');
// Fehler: Die Textur hat keine TEXTURE_BINDING-Nutzung
shadowMap.destroy();
shadowMap.createView({ label: 'Schattenkarte-View' });
const encoder = device.createCommandEncoder({ label: 'Schatten-Encoder' });
encoder.beginRenderPass({
colorAttachments: [],
depthStencilAttachment: {
view: shadowMap.createView(),
depthLoadOp: 'clear',
depthStoreOp: 'store',
depthClearValue: 1,
},
}).end();
device.queue.submit([encoder.finish()]);
const error = await device.popErrorScope();
if (error) console.warn(error.message); // Meldung enthält "Schattenkarte"
// Wichtig · Fallstricke
- Nur für die Fehlersuche:
labeländert nichts am Verhalten der Textur. Bezeichnungen müssen nicht eindeutig sein und werden von der GPU nicht ausgewertet. - Keine sensiblen Daten: Bezeichnungen erscheinen in Fehlermeldungen, in der Konsole und in Debugging-Werkzeugen. Nutzernamen, Tokens und ähnliche Daten gehören deshalb nicht hinein.
- Views haben eigene Bezeichnungen: Eine
GPUTextureViewübernimmt die Bezeichnung ihrer Textur nicht. Gib sie beicreateView({ label })gesondert an. - Fehlermeldungen unterscheiden sich: Wie die Meldungen formuliert sind und wo die Bezeichnung darin steht, legt jeder Browser selbst fest. Werte Meldungstexte daher nicht programmatisch aus.
- Kompatibilität: WebGPU gibt es nur in sicheren Kontexten (HTTPS), und die Unterstützung ist noch lückenhaft. Chromium unterstützt es ab Version 113, Safari ab 26, Firefox ab 141 unter Windows. Prüfe vorher mit
navigator.gpu, ob WebGPU verfügbar ist.