GPUBuffer: mapAsync() Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die mapAsync() Methode der GPUBuffer Schnittstelle bildet den angegebenen Bereich des GPUBuffer. Sie gibt ein Promise zurück, das sich auflöst, wenn der Inhalt des GPUBuffer bereit ist, um darauf zuzugreifen. Während der GPUBuffer abgebildet ist, kann er in keinen GPU-Befehlen verwendet werden.

Sobald der Puffer erfolgreich abgebildet ist (was über GPUBuffer.mapState überprüft werden kann), werden Aufrufe von GPUBuffer.getMappedRange() ein ArrayBuffer zurückgeben, das die aktuellen Werte des GPUBuffer enthält, die nach Bedarf von JavaScript gelesen und aktualisiert werden können.

Wenn Sie die Arbeit mit den Werten des GPUBuffer abgeschlossen haben, rufen Sie GPUBuffer.unmap() auf, um ihn wieder abzubilden und für die GPU zugänglich zu machen.

Syntax

js
mapAsync(mode)
mapAsync(mode, offset, size)

Parameter

mode

Ein bitweises Flag, das angibt, ob der GPUBuffer zum Lesen oder Schreiben abgebildet ist. Mögliche Werte sind:

GPUMapMode.READ

Der GPUBuffer ist zum Lesen abgebildet. Werte können gelesen werden, aber alle Änderungen am ArrayBuffer, die durch GPUBuffer.getMappedRange() zurückgegeben werden, werden verworfen, sobald GPUBuffer.unmap() aufgerufen wird.

Die Abbildung im Lesemodus kann nur bei GPUBuffers verwendet werden, die eine Nutzung von GPUBufferUsage.MAP_READ haben (d.h. wenn sie mit GPUDevice.createBuffer() erstellt wurden).

GPUMapMode.WRITE

Der GPUBuffer ist zum Schreiben abgebildet. Werte können gelesen und aktualisiert werden – alle Änderungen am ArrayBuffer, die durch GPUBuffer.getMappedRange() zurückgegeben werden, werden in den GPUBuffer gespeichert, sobald GPUBuffer.unmap() aufgerufen wird.

Die Abbildung im Schreibmodus kann nur bei GPUBuffers verwendet werden, die eine Nutzung von GPUBufferUsage.MAP_WRITE haben (d.h. wenn sie mit GPUDevice.createBuffer() erstellt wurden).

offset Optional

Eine Zahl, die den Offset in Bytes vom Beginn des Puffers bis zum Beginn des Bereichs darstellt, der abgebildet werden soll. Wenn offset weggelassen wird, ist der Standardwert 0.

size Optional

Eine Zahl, die die Größe des Bereichs in Bytes darstellt, der abgebildet werden soll. Wenn size weggelassen wird, erstreckt sich der abgebildete Bereich bis zum Ende des GPUBuffer.

Rückgabewert

Ein Promise, das sich auflöst mit Undefined, wenn der Inhalt des GPUBuffer bereit ist, um darauf zuzugreifen.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn mapAsync() aufgerufen wird, andernfalls wird eine OperationError DOMException ausgelöst, das Versprechen abgelehnt und ein GPUValidationError erzeugt:

  • offset ist ein Vielfaches von 8.
  • Der gesamte Bereich, der abgebildet werden soll (size, falls angegeben, oder GPUBuffer.size - offset, falls nicht), ist ein Vielfaches von 4.
  • Der gesamte Bereich, der abgebildet werden soll, liegt innerhalb der Grenzen des GPUBuffer.
  • Wenn der Modus GPUMapMode.READ ist, hat der GPUBuffer eine Nutzung von GPUBufferUsage.MAP_READ.
  • Wenn der Modus GPUMapMode.WRITE ist, hat der GPUBuffer eine Nutzung von GPUBufferUsage.MAP_WRITE.

Beispiele

Siehe die Hauptseite GPUBuffer für ein Beispiel.

Spezifikationen

Specification
WebGPU
# dom-gpubuffer-mapasync

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
mapAsync
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

Siehe auch