Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

GPUQueue: writeBuffer() Methode

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

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 angegebenen GPUBuffer.

Dies ist eine Komfortfunktion, die eine Alternative zur Einstellung von Pufferdaten über Buffer-Mapping und Buffer-zu-Buffer-Kopien bietet. Sie ermöglicht es der Agentensoftware, die effizienteste Methode zur Datenübertragung zu 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 Offset in Bytes darstellt, ab dem die Daten im GPUBuffer geschrieben werden sollen.

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 Offset darstellt, ab dem die Daten in der Datenquelle geschrieben werden sollen. Dieser Wert ist eine Anzahl von Elementen, wenn data ein TypedArray ist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, ist der Standardwert für dataOffset 0.

size Optional

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

Rückgabewert

Keiner (undefined).

Ausnahmen

OperationError DOMException

Die Methode löst einen OperationError aus, 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 bei TypedArrays in Bytes umgewandelt) ist ein Vielfaches von 4.

Validierung

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

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

Beispiele

In unserem grundlegenden Render-Demo definieren wir einige Vertex-Daten in einem Float32Array, das wir zum Zeichnen eines Dreiecks verwenden:

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 einfügen. 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 bringen, können wir writeBuffer() verwenden:

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

Spezifikationen

Spezifikation
WebGPU
# dom-gpuqueue-writebuffer

Browser-Kompatibilität

Siehe auch