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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
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
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 einArrayBuffer
,TypedArray
oderDataView
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
einTypedArray
ist, und eine Anzahl von Bytes, wenn nicht. Wird sie weggelassen, wirddataOffset
standardmäßig auf 0 gesetzt. size
Optional-
Eine Zahl, die die Größe des Inhalts angibt, der von
data
inbuffer
geschrieben werden soll. Dieser Wert ist eine Anzahl von Elementen, wenndata
einTypedArray
ist, und eine Anzahl von Bytes, wenn nicht. Wird sie weggelassen, entsprichtsize
der gesamten Größe vondata
abzüglichdataOffset
.
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 vondata
.- Die Größe von
data
(wenn in Bytes umgewandelt, im Fall vonTypedArray
s) ist ein Vielfaches von 4.
- Die Größe von
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 derGPUBuffer.destroy()
-Methode).- Die
GPUBuffer.usage
vonbuffer
enthält dasGPUBufferUsage.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 dieGPUBuffer.size
desbuffer
.
Beispiele
In unserem Basis-Render-Demo definieren wir einige Vertex-Daten 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
legen. 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 bekommen, können wir writeBuffer()
verwenden:
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
- Die WebGPU API