GPUQueue: Methode writeTexture()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 Methode writeTexture() des Interfaces GPUQueue schreibt eine bereitgestellte Datenquelle in eine bestimmte GPUTexture.
Diese Komfortfunktion bietet eine Alternative zum Festlegen von Texturdaten durch Buffer-Mapping und Kopieren von einem Buffer in eine Textur. Sie überlässt es dem User Agent, 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 angibt, in die bzw. an den die Datenquelle geschrieben werden soll. Es kann die folgenden Eigenschaften haben:
aspectOptional-
Ein Aufzählungswert, der angibt, in welche Aspekte der Textur die Daten geschrieben werden. Mögliche Werte sind:
"all"-
Die Daten werden in alle verfügbaren Aspekte des Texturformats geschrieben. Je nach Format können dies Farbe, Tiefe und Stencil sein.
"depth-only"-
Die Daten werden nur in den Tiefenaspekt eines Tiefen- oder Stencil-Formats geschrieben.
"stencil-only"-
Die Daten werden nur in den Stencil-Aspekt eines Tiefen- oder Stencil-Formats geschrieben.
Wird
aspectweggelassen, hat es den Wert"all". mipLevelOptional-
Eine Zahl, die die Mipmap-Stufe der Textur angibt, in die die Daten geschrieben werden. Wird
mipLevelweggelassen, ist der Standardwert 0. originOptional-
Ein Objekt oder Array, das den Ursprung des Kopiervorgangs angibt – die minimale Ecke des Texturbereichs, in den die Daten geschrieben werden. Zusammen mit
sizedefiniert es die vollständige Ausdehnung des Zielbereichs. Die Wertex,yundzsind standardmäßig 0, wenn sie oderoriginweggelassen werden.Sie können beispielsweise ein Array wie
[0, 0, 0]oder das entsprechende Objekt{ x: 0, y: 0, z: 0 }übergeben. texture-
Ein
GPUTexture-Objekt, das die Textur angibt, in die die Daten geschrieben werden.
data-
Ein Objekt, das die Datenquelle angibt, die in die
GPUTexturegeschrieben werden soll. Dies kann einArrayBuffer,TypedArrayoderDataViewsein. dataLayout-
Ein Objekt, das das Layout der in
dataenthaltenen Daten definiert. Mögliche Eigenschaften sind:offsetOptional-
Der Offset in Bytes vom Anfang von
databis zum Beginn der zu kopierenden Bilddaten. Wirdoffsetweggelassen, ist der Standardwert 0. bytesPerRowOptional-
Eine Zahl, die den Abstand in Bytes zwischen dem Beginn einer Blockzeile (d.h. einer Zeile vollständiger Texel-Blöcke) und dem Beginn der nächsten Blockzeile angibt. Diese Eigenschaft ist erforderlich, wenn mehrere Blockzeilen vorhanden sind (d.h. wenn die Höhe oder Tiefe des zu kopierenden Bereichs mehr als einen Block beträgt).
rowsPerImageOptional-
Die Anzahl der Blockzeilen pro Einzelbild der Textur.
bytesPerRow×rowsPerImageergibt den Abstand in Bytes zwischen den Anfängen zweier vollständiger Bilder. Diese Eigenschaft ist erforderlich, wenn mehrere Bilder kopiert werden.
size-
Ein Objekt oder Array, das die Ausdehnung des Kopiervorgangs angibt – die gegenüberliegende Ecke des Texturbereichs, in den die Daten geschrieben werden. Zusammen mit
destination.origindefiniert es die vollständige Ausdehnung des Zielbereichs. Beispiele für die Objekt- und Array-Struktur finden Sie unterdestination.origin.
Rückgabewert
Keiner (undefined).
Validierung
Beim Aufruf von writeTexture() müssen die folgenden Bedingungen erfüllt sein. Andernfalls wird ein GPUValidationError erzeugt und die GPUQueue wird ungültig:
mipLevelist kleiner alsGPUTexture.mipLevelCountder Zieltextur.origin.xist ein Vielfaches der Texel-Blockbreite des ZielformatsGPUTexture.format.origin.yist ein Vielfaches der Texel-Blockhöhe des ZielformatsGPUTexture.format.- Wenn
GPUTexture.formatder Zieltextur ein Tiefen- oder Stencil-Format ist oderGPUTexture.sampleCountgrößer als 1 ist, entspricht die Größe der Subressourcesize. GPUTexture.usageder Zieltextur enthält das FlagGPUTextureUsage.COPY_DST.GPUTexture.sampleCountder Zieltextur ist 1.destination.origin.xplusGPUTexture.widthvondestinationist kleiner oder gleich der Breite der Subressource der ZieltexturGPUTexture.destination.origin.yplusGPUTexture.heightvondestinationist kleiner oder gleich der Höhe der Subressource der ZieltexturGPUTexture.destination.origin.zplusGPUTexture.depthOrArrayLayersvondestinationist kleiner oder gleichdepthOrArrayLayersder Subressource der ZieltexturGPUTexture.GPUTexture.widthvondestinationist ein Vielfaches der Texel-Blockbreite des ZielformatsGPUTexture.format.GPUTexture.heightvondestinationist ein Vielfaches der Texel-Blockhöhe des ZielformatsGPUTexture.format.destination.aspectbezieht sich auf einen einzelnen Aspekt des ZielformatsGPUTexture.format.- Dieser Aspekt ist gemäß den Regeln für Tiefen- oder Stencil-Formate ein gültiges Ziel für einen Bildkopiervorgang.
destinationist auch ansonsten mitGPUTexture.formatkompatibel.
Beispiele
In Effizientes Rendern von glTF-Modellen wird eine Funktion zum 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;
}
Damit lassen sich Standardtexturen für die Verwendung in Materialbibliotheken 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