Signatur
Beschreibung
Der Konstruktor GPUOutOfMemoryError() erzeugt ein Fehlerobjekt vom Typ GPUOutOfMemoryError. Diese Klasse erbt von GPUError und zeigt an, dass die GPU eine Speicheranforderung nicht erfüllen konnte, etwa beim Anlegen einer sehr großen Textur oder eines großen Puffers mit device.createTexture() bzw. device.createBuffer().
In der Praxis erzeugst du solche Objekte selten selbst. Die WebGPU-Implementierung liefert sie, wenn du einen Fehlerbereich mit device.pushErrorScope("out-of-memory") öffnest und das Promise von device.popErrorScope() ausgewertet wird. Fehler, die kein Fehlerbereich abfängt, kommen über das Ereignis uncapturederror am GPUDevice an.
Selbst aufrufen lohnt sich vor allem in Tests, Mocks und Polyfills. Damit kannst du prüfen, ob deine Anwendung auf Speichermangel richtig reagiert, zum Beispiel mit kleineren Texturen oder einer geringeren Auflösung, ohne den Speicher der GPU wirklich aufbrauchen zu müssen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message Pflicht | string | Lesbare Beschreibung des Fehlers. Sie steht danach in der Eigenschaft message (geerbt von GPUError). |
Rückgabewert
GPUOutOfMemoryError-Instanz, deren message den übergebenen Text enthält.Beispiele
Instanz direkt erzeugen (z. B. für Tests)
const err = new GPUOutOfMemoryError("Textur 16384x16384 konnte nicht alloziert werden");
console.log(err instanceof GPUOutOfMemoryError); // true
console.log(err instanceof GPUError); // true
console.log(err.message);
Speichermangel mit einem Fehlerbereich abfangen und auf eine kleinere Textur ausweichen
const createTextureSafe = async (device, size) => {
device.pushErrorScope("out-of-memory");
const texture = device.createTexture({
size: [size, size],
format: "rgba8unorm",
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
});
const error = await device.popErrorScope();
if (error instanceof GPUOutOfMemoryError) {
console.warn(`Kein Speicher für ${size}px: ${error.message}`);
texture.destroy();
return size > 512 ? createTextureSafe(device, size / 2) : null;
}
return texture;
};
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const tex = await createTextureSafe(device, 8192);
console.log(tex ? `Textur: ${tex.width}px` : "Keine Textur möglich");
Fehlerbehandlung mit einem simulierten Fehler testen
const handleGpuError = (error) => {
if (error instanceof GPUOutOfMemoryError) return "Qualität reduzieren";
if (error instanceof GPUValidationError) return "Programmierfehler melden";
return "Unbekannter Fehler";
};
// Test ohne echte Speicherknappheit
console.log(handleGpuError(new GPUOutOfMemoryError("simuliert")));
console.log(handleGpuError(new GPUValidationError("simuliert")));
// Wichtig · Fallstricke
- Kein JavaScript-
Error:GPUOutOfMemoryErrorerbt nicht vonError. Das Objekt hat daher keinenstack, undinstanceof Errorergibtfalse. WebGPU wirft solche Fehler nicht, sondern liefert sie überpopErrorScope()oder das Ereignisuncapturederror. Eintry…catchumcreateBuffer()fängt sie also nicht ab. - Der Parameter
messageist Pflicht: Ruft man den Konstruktor ohne Argument auf, erzeugt der Browser je nach Implementierung einenTypeErroroder setzt eine leere Nachricht. - Das Objekt bleibt nutzbar: Nach einem Speicherfehler ist das zurückgegebene Objekt, etwa ein Puffer, zwar vorhanden, aber ungültig. Gib es mit
destroy()frei und versuche es mit kleineren Ressourcen erneut. - Browser-Unterstützung: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und noch nicht auf allen Plattformen. Prüfe vorher mit
if ("gpu" in navigator), ob die API da ist. ExistiertGPUOutOfMemoryErrornicht, führt schon der Zugriff darauf zu einemReferenceError. - Kein verlässlicher Speicherwert: Die Meldungen sind je nach Implementierung verschieden und nicht genormt. Werte
messagenicht maschinell aus, sondern unterscheide Fehler anhand ihrer Klasse.