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 angegebenen GPUBuffer
.
Dies ist eine Komfortfunktion, die eine Alternative zum Setzen von Pufferdaten über Puffer-Mapping und Puffer-zu-Puffer-Kopien bietet. Sie ermöglicht es dem Benutzeragent, die effizienteste Methode zum Kopieren der Daten zu bestimmen.
Syntax
writeBuffer(buffer, bufferOffset, data, dataOffset, size)
Parameter
buffer
-
Ein
GPUBuffer
Objekt, das den Puffer repräsentiert, in den Daten geschrieben werden sollen. bufferOffset
-
Eine Zahl, die den Offset in Bytes darstellt, um das Schreiben der Daten im Inneren des
GPUBuffer
zu beginnen. data
-
Ein Objekt, das die Datenquelle darstellt, die in den
GPUBuffer
geschrieben werden soll. Dies kann einArrayBuffer
,TypedArray
oderDataView
sein. dataOffset
Optional-
Eine Zahl, die den Offset darstellt, ab dem die Daten aus der Datenquelle geschrieben werden sollen. Dieser Wert ist eine Anzahl von Elementen, wenn
data
einTypedArray
ist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, istdataOffset
standardmäßig 0. size
Optional-
Eine Zahl, die die Größe des Inhalts darstellt, der von
data
inbuffer
geschrieben werden soll. Dieser Wert ist eine Anzahl von Elementen, wenndata
einTypedArray
ist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, entsprichtsize
der gesamten Größe vondata
abzüglichdataOffset
.
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 vondata
.- Die Größe von
data
(wenn in Bytes umgewandelt, im Falle vonTypedArray
s) ist ein Vielfaches von 4.
- Die Größe von
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn writeBuffer()
aufgerufen wird, sonst wird ein GPUValidationError
erzeugt und die GPUQueue
wird ungültig:
buffer
ist zur Verwendung verfügbar, d.h. nicht nicht verfügbar (GPUBuffer
s sind nicht verfügbar, wenn sie derzeit gemappt sind) oder zerstört wurden (mit derGPUBuffer.destroy()
Methode).- Die
GPUBuffer.usage
desbuffers
umfasst dasGPUBufferUsage.COPY_DST
Flag. bufferOffset
, umgewandelt in Bytes, ist ein Vielfaches von 4.- Die Größe von
data
-dataOffset
+bufferOffset
, umgewandelt in Bytes, ist gleich oder kleiner als dieGPUBuffer.size
desbuffers
.
Beispiele
In unserem grundlegenden Render-Demo definieren wir einige Vertexdaten in einem Float32Array
, die wir verwenden werden, um ein Dreieck zu zeichnen:
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 werden wir den Puffer erstellen:
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
Specification |
---|
WebGPU # dom-gpuqueue-writebuffer |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API