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
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
GPUBuffergeschrieben werden sollen. data-
Ein Objekt, das die Datenquelle darstellt, die in den
GPUBuffergeschrieben werden soll. Dies kann einArrayBuffer,TypedArrayoderDataViewsein. dataOffsetOptional-
Eine Zahl, die den Offset darstellt, ab dem die Daten in der Datenquelle geschrieben werden sollen. Dieser Wert ist eine Anzahl von Elementen, wenn
dataeinTypedArrayist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, ist der Standardwert fürdataOffset0. sizeOptional-
Eine Zahl, die die Größe des Inhalts darstellt, der von
datazubuffergeschrieben werden soll. Dieser Wert ist eine Anzahl von Elementen, wenndataeinTypedArrayist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, entsprichtsizeder gesamten Größe vondataabzüglichdataOffset.
Rückgabewert
Keiner (undefined).
Ausnahmen
OperationErrorDOMException-
Die Methode löst einen
OperationErroraus, wenn die folgenden Kriterien nicht erfüllt sind:- Die Größe von
dataist gleich oder größer als 0. dataOffsetist gleich oder kleiner als die Größe vondata.- Die Größe von
data(wenn beiTypedArrays in Bytes umgewandelt) ist ein Vielfaches von 4.
- Die Größe von
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn writeBuffer() aufgerufen wird, andernfalls wird ein GPUValidationError generiert und die GPUQueue wird ungültig:
bufferist zur Verwendung verfügbar, d.h. nicht nicht verfügbar (einGPUBufferist nicht verfügbar, wenn er momentan gemappt ist) oder zerstört (mit derGPUBuffer.destroy()-Methode).- Die
GPUBuffer.usagevonbufferenthält dasGPUBufferUsage.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 dieGPUBuffer.sizedesbuffer.
Beispiele
In unserem grundlegenden Render-Demo definieren wir einige Vertex-Daten in einem Float32Array, das wir zum Zeichnen eines Dreiecks verwenden:
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:
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:
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpuqueue-writebuffer> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API