GPUQueue: writeBuffer()-Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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 das Puffer-Mapping und Puffer-zu-Puffer-Kopien bietet. Sie lässt den Benutzeragenten die effizienteste Methode zum Kopieren der Daten bestimmen.
Syntax
writeBuffer(buffer, bufferOffset, data, dataOffset, size)
Parameter
buffer-
Ein
GPUBuffer-Objekt, das den Puffer repräsentiert, in den die Daten geschrieben werden sollen. bufferOffset-
Eine Zahl, die den Versatz in Bytes darstellt, bei dem mit dem Schreiben der Daten innerhalb des
GPUBufferbegonnen werden soll. data-
Ein Objekt, das die Datenquelle repräsentiert, die in den
GPUBuffergeschrieben werden soll. Dies kann einArrayBuffer,TypedArrayoderDataViewsein. dataOffsetOptional-
Eine Zahl, die den Versatz angibt, ab dem die Daten innerhalb der Datenquelle geschrieben werden sollen. Dieser Wert ist eine Anzahl von Elementen, wenn
dataeinTypedArrayist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, wirddataOffsetauf 0 gesetzt. sizeOptional-
Eine Zahl, die die Größe des Inhalts repräsentiert, der von
datain denbuffergeschrieben werden soll. Dieser Wert ist eine Anzahl von Elementen, wenndataeinTypedArrayist, und eine Anzahl von Bytes, wenn nicht. Wenn weggelassen, entsprichtsizeder Gesamtgröße vondata, abzüglichdataOffset.
Rückgabewert
Keiner (Undefined).
Ausnahmen
OperationErrorDOMException-
Die Methode wirft einen
OperationError, 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 sie in Bytes umgewandelt wird, im Fall vonTypedArrays) ist ein Vielfaches von 4.
- Die Größe von
Validierung
Die folgenden Kriterien müssen beim Aufruf von writeBuffer() erfüllt sein, andernfalls wird ein GPUValidationError generiert und die GPUQueue wird ungültig:
bufferist zur Verwendung verfügbar, d.h. nicht nicht verfügbar (GPUBuffers sind nicht verfügbar, wenn sie gerade gemappt oder mit der MethodeGPUBuffer.destroy()zerstört wurden).- Die
GPUBuffer.usagevonbufferenthä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.sizedesbuffer.
Beispiele
In unserem grundlegenden 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 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 bekommen, können wir writeBuffer() verwenden:
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
Spezifikationen
| Specification |
|---|
| WebGPU> # dom-gpuqueue-writebuffer> |
Browser-Kompatibilität
Loading…
Siehe auch
- Die WebGPU API