GPUQueue: writeTexture()-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 writeTexture()-Methode der GPUQueue-Schnittstelle schreibt eine bereitgestellte Datenquelle in eine gegebene GPUTexture.
Dies ist eine Komfortfunktion, die eine Alternative zum Setzen von Texturdaten über Puffer-Mapping und Puffer-zu-Textur-Kopien bietet. Sie erlaubt es dem Benutzeragenten, die effizienteste Methode zum Kopieren der Daten zu bestimmen.
Syntax
writeTexture(destination, data, dataLayout, size)
Parameter
destination-
Ein Objekt, das die Textur-Subressource und den Ursprung definiert, um die Datenquelle zu schreiben, welches die folgenden Eigenschaften haben kann:
aspectOptional-
Ein enumerierter Wert, der definiert, auf welche Aspekte der Textur die Daten geschrieben werden. Mögliche Werte sind:
"all"-
Alle verfügbaren Aspekte des Texturformats werden beschrieben, was alle oder beliebige von Farbe, Tiefe und Stencil bedeuten kann, abhängig von der Art des Formats, mit dem Sie arbeiten.
"depth-only"-
Nur der Tiefenaspekt eines depth-or-stencil format wird beschrieben.
"stencil-only"-
Nur der Stencilaspekt eines depth-or-stencil formats wird beschrieben.
Wenn ausgelassen, nimmt
aspectden Wert"all"an. mipLevelOptional-
Eine Zahl, die die Mip-Map-Ebene der Textur darstellt, auf die die Daten geschrieben werden sollen. Wenn weggelassen, ist der Standardwert von
mipLevel0. originOptional-
Ein Objekt oder ein Array, das den Ursprung der Kopie angibt — die minimale Ecke des Texturbereichs, auf den die Daten geschrieben werden sollen. Zusammen mit
sizedefiniert dies den vollständigen Umfang des zu kopierenden Bereichs. Diex,yundzWerte sind standardmäßig 0, wennoriginweggelassen wird.Sie können zum Beispiel ein Array wie
[0, 0, 0]oder das entsprechende Objekt{ x: 0, y: 0, z: 0 }übergeben. texture-
Ein
GPUTexture-Objekt, das die Textur darstellt, auf die die Daten geschrieben werden sollen.
data-
Ein Objekt, das die Datenquelle darstellt, die in die
GPUTexturegeschrieben werden soll. Dies kann einArrayBuffer,TypedArrayoderDataViewsein. dataLayout-
Ein Objekt, das das Layout des Inhalts in
datadefiniert. Mögliche Werte sind:offsetOptional-
Der Versatz, in Byte, vom Beginn von
databis zum Start der Bilddaten, die kopiert werden sollen. Wenn weggelassen, ist der Standardwert vonoffset0. bytesPerRowOptional-
Eine Zahl, die die Breite, in Bytes, zwischen dem Anfang jeder Blockreihe (d.h. einer Reihe vollständiger Texel-Blöcke) und der nachfolgenden Blockreihe darstellt. Dies ist erforderlich, wenn es mehrere Blockreihen gibt (d.h. die Kopierhöhe oder -tiefe ist mehr als ein Block).
rowsPerImageOptional-
Die Anzahl der Blockreihen pro Einzelbild der Textur.
bytesPerRow×rowsPerImageergibt die Breite, in Bytes, zwischen dem Anfang jedes vollständigen Bildes. Dies ist erforderlich, wenn es mehrere Bilder zum Kopieren gibt.
size-
Ein Objekt oder ein Array, das den Umfang der Kopie angibt — die entfernte Ecke des Texturbereichs, auf die die Daten geschrieben werden sollen. Zusammen mit
destination.origindefiniert dies den vollständigen Umfang des zu kopierenden Bereichs. Siehedestination.originfür Beispiele zur Objekt-/Array-Struktur.
Rückgabewert
Keiner (undefined).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn writeTexture() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und die GPUQueue wird ungültig:
mipLevelist kleiner als dieGPUTexture.mipLevelCountdes Ziels.origin.xist ein Vielfaches der Texel-Blockbreite desGPUTexture.formatdes Ziels.origin.yist ein Vielfaches der Texel-Blockhöhe desGPUTexture.formatdes Ziels.- Wenn das
GPUTexture.formatdes Ziels ein depth-or-stencil format ist oderGPUTexture.sampleCountmehr als 1 ist, ist die Größe der Subressource gleich dersize. - Das
GPUTexture.usagedes Ziels beinhaltet dasGPUTextureUsage.COPY_DSTFlag. - Das
GPUTexture.sampleCountdes Ziels ist 1. destination.origin.x+ diedestinationGPUTexture.widthist kleiner oder gleich der Breite der Subressource, die in diedestinationGPUTexturegeschrieben werden soll.destination.origin.y+ diedestinationGPUTexture.heightist kleiner oder gleich der Höhe der Subressource, die in diedestinationGPUTexturegeschrieben werden soll.destination.origin.z+ diedestinationGPUTexture.depthOrArrayLayersist kleiner oder gleich derdepthOrArrayLayersder Subressource, die in diedestinationGPUTexturegeschrieben werden soll.- Die
destinationGPUTexture.widthist ein Vielfaches der Texel-Blockbreite desGPUTexture.formatdes Ziels. - Die
destinationGPUTexture.heightist ein Vielfaches der Texel-Blockhöhe desGPUTexture.formatdes Ziels. destination.aspectbezieht sich auf einen einzelnen Aspekt desGPUTexture.formatdes Ziels.- Dieser Aspekt ist ein gültiges Ziel für das Kopieren von Bildern gemäß depth-or-stencil formats.
- Die
destinationist anderweitig kompatibel mit demGPUTexture.format.
Beispiele
In Efficiently rendering glTF models wird eine Funktion für das Erstellen einer einfarbigen Textur definiert:
function createSolidColorTexture(r, g, b, a) {
const data = new Uint8Array([r * 255, g * 255, b * 255, a * 255]);
const texture = device.createTexture({
size: { width: 1, height: 1 },
format: "rgba8unorm",
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
});
device.queue.writeTexture({ texture }, data, {}, { width: 1, height: 1 });
return texture;
}
Dies kann verwendet werden, um Standardtexturen für die Verwendung in Materialbibliotheken zu definieren:
const opaqueWhiteTexture = createSolidColorTexture(1, 1, 1, 1);
const transparentBlackTexture = createSolidColorTexture(0, 0, 0, 0);
const defaultNormalTexture = createSolidColorTexture(0.5, 0.5, 1, 1);
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpuqueue-writetexture> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API