GPUQueue: writeBuffer() 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 writeBuffer()-Methode der GPUQueue-Schnittstelle schreibt eine bereitgestellte Datenquelle in einen gegebenen GPUBuffer.

Dies ist eine Komfortfunktion, die eine Alternative zum Setzen von Pufferdaten über Pufferzuordnung und Puffer-zu-Puffer-Kopien bietet. Sie lässt den Benutzeragenten die effizienteste Methode zur Übertragung der Daten bestimmen.

Syntax

js
writeBuffer(buffer, bufferOffset, data, dataOffset, size)

Parameter

buffer

Ein GPUBuffer-Objekt, das den Puffer darstellt, in den die Daten geschrieben werden sollen.

bufferOffset

Eine Zahl, die den Versatz in Bytes darstellt, an dem das Schreiben der Daten innerhalb des GPUBuffer beginnt.

data

Ein Objekt, das die Datenquelle darstellt, die in den GPUBuffer geschrieben werden soll. Dies kann ein ArrayBuffer, TypedArray oder DataView sein.

dataOffset Optional

Eine Zahl, die den Versatz angibt, ab dem mit dem Schreiben der Daten aus der Datenquelle begonnen wird. Dieser Wert ist eine Anzahl von Elementen, wenn data ein TypedArray ist, und eine Anzahl von Bytes, wenn nicht. Wird sie weggelassen, wird dataOffset standardmäßig auf 0 gesetzt.

size Optional

Eine Zahl, die die Größe des Inhalts angibt, der von data in buffer geschrieben werden soll. Dieser Wert ist eine Anzahl von Elementen, wenn data ein TypedArray ist, und eine Anzahl von Bytes, wenn nicht. Wird sie weggelassen, entspricht size der gesamten Größe von data abzüglich dataOffset.

Rückgabewert

Keiner (Undefined).

Ausnahmen

OperationError DOMException

Die Methode wirft einen OperationError, wenn die folgenden Kriterien nicht erfüllt sind:

  • Die Größe von data ist gleich oder größer als 0.
  • dataOffset ist gleich oder kleiner als die Größe von data.
  • Die Größe von data (wenn in Bytes umgewandelt, im Fall von TypedArrays) ist ein Vielfaches von 4.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn writeBuffer() aufgerufen wird, ansonsten wird ein GPUValidationError erzeugt und die GPUQueue wird ungültig:

  • buffer ist verfügbar zur Nutzung, d.h. nicht nicht verfügbar ( GPUBuffer sind nicht verfügbar, wenn sie momentan zugewiesen oder zerstört sind (mit der GPUBuffer.destroy()-Methode).
  • Die GPUBuffer.usage von buffer enthält das GPUBufferUsage.COPY_DST-Flag.
  • bufferOffset, wenn in Bytes umgewandelt, ist ein Vielfaches von 4.
  • Die Größe von data - dataOffset + bufferOffset, wenn in Bytes umgewandelt, ist gleich oder kleiner als die GPUBuffer.size des buffer.

Beispiele

In unserem Basis-Render-Demo definieren wir einige Vertex-Daten in einem Float32Array, die wir verwenden werden, um ein Dreieck zu zeichnen:

js
const vertices = new Float32Array([
  0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0,
  0, 1, 1,
]);

Um diese Daten in einer Render-Pipeline zu verwenden, müssen wir sie in einen GPUBuffer legen. Zuerst erstellen wir den Puffer:

js
const vertexBuffer = device.createBuffer({
  size: vertices.byteLength, // make it big enough to store vertices in
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});

Um die Daten in den Puffer zu bekommen, können wir writeBuffer() verwenden:

js
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);

Spezifikationen

Specification
WebGPU
# dom-gpuqueue-writebuffer

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch