GPUQueue: writeTexture() 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 writeTexture()
-Methode der GPUQueue
-Schnittstelle schreibt eine bereitgestellte Datenquelle in eine gegebene GPUTexture
.
Dies ist eine Komfortfunktion, die eine Alternative zum Festlegen von Texturdaten über Puffer-Mapping und Puffer-zu-Textur-Kopien bietet. Es ermöglicht dem Benutzeragenten, die effizienteste Methode zum Kopieren der Daten zu bestimmen.
Syntax
writeTexture(destination, data, dataLayout, size)
Parameter
destination
-
Ein Objekt, das die Subressource und den Ursprung der Textur definiert, um die Datenquelle zu beschreiben. Dieses kann die folgenden Eigenschaften enthalten:
aspect
Optional-
Ein enumerierter Wert, der definiert, auf welche Aspekte der Textur die Daten geschrieben werden sollen. Mögliche Werte sind:
"all"
-
Alle verfügbaren Aspekte des Texturformats werden beschrieben, was je nach Format alle oder beliebige Kombinationen aus Farbe, Tiefe und Schablone bedeuten kann.
"depth-only"
-
Nur der Tiefenaspekt eines depth-or-stencil format wird beschrieben.
"stencil-only"
-
Nur der Schablonenaspekt eines depth-or-stencil Formats wird beschrieben.
Wenn ausgelassen, erhält
aspect
den Wert"all"
. mipLevel
Optional-
Eine Zahl, die die Mip-Map-Ebene der Textur darstellt, auf die die Daten geschrieben werden sollen. Wird
mipLevel
ausgelassen, ist der Standardwert 0. origin
Optional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt - die minimale Ecke des Texturbereichs, um die Daten zu schreiben. Zusammen mit
size
definiert dies das volle Ausmaß des zu kopierenden Bereichs. Diex
,y
, undz
Werte sind 0, wennorigin
ausgelassen wird.Beispielsweise können Sie ein Array wie
[0, 0, 0]
oder sein entsprechendes Objekt{ x: 0, y: 0, z: 0 }
übergeben. texture
-
Ein
GPUTexture
Objekt, das die Textur darstellt, in die die Daten geschrieben werden sollen.
data
-
Ein Objekt, das die Datenquelle darstellt, die in die
GPUTexture
geschrieben werden soll. Dies kann einArrayBuffer
,TypedArray
oderDataView
sein. dataLayout
-
Ein Objekt, das das Layout des in
data
enthaltenen Inhalts definiert. Mögliche Werte sind:offset
Optional-
Der Versatz in Bytes vom Beginn von
data
bis zum Start der zu kopierenden Bilddaten. Wirdoffset
ausgelassen, beträgt der Standardwert 0. bytesPerRow
Optional-
Eine Zahl, die den Abstand in Bytes zwischen dem Beginn jeder Blockreihe (d.h. eine Reihe von vollständigen Texelblöcken) und der nachfolgenden Blockreihe darstellt. Dies ist erforderlich, wenn es mehrere Blockreihen (d.h. die Kopierhöhe oder -tiefe ist mehr als ein Block) gibt.
rowsPerImage
Optional-
Der Anzahl der Blockreihen pro einzelnes Bild der Textur.
bytesPerRow
×rowsPerImage
ergibt den Abstand in Bytes zwischen dem Beginn jedes vollständigen Bildes. Dies ist erforderlich, wenn es mehrere Bilder zum Kopieren gibt.
size
-
Ein Objekt oder Array, das das Ausmaß der Kopie angibt – die ferne Ecke des Texturbereichs, die die Daten beschreibt. Zusammen mit
destination.origin
definiert dies das volle Ausmaß des zu kopierenden Bereichs. Siehedestination.origin
für Beispiele zur Struktur des Objekts/Arrays.
Rückgabewert
Keiner (Undefined
).
Validierung
Beim Aufruf von writeTexture()
müssen die folgenden Kriterien erfüllt sein, andernfalls wird ein GPUValidationError
erzeugt und die GPUQueue
wird ungültig:
mipLevel
ist kleiner als die ZielgrößeGPUTexture.mipLevelCount
.origin.x
ist ein Vielfaches der Texelblockbreite des Ziel-GPUTexture.format
.origin.y
ist ein Vielfaches der Texelblockhöhe des Ziel-GPUTexture.format
.- Wenn das Ziel-
GPUTexture.format
ein depth-or-stencil format ist oderGPUTexture.sampleCount
mehr als 1 beträgt, entspricht die Subressourcengrößesize
. - Der Ziel-
GPUTexture.usage
enthält dasGPUTextureUsage.COPY_DST
-Flag. - Der Ziel-
GPUTexture.sampleCount
beträgt 1. destination.origin.x
+ die Ziel-GPUTexture.width
ist kleiner oder gleich der Breite der Subressource, die auf die Ziel-GPUTexture
geschrieben wird.destination.origin.y
+ die Ziel-GPUTexture.height
ist kleiner oder gleich der Höhe der Subressource, die auf die Ziel-GPUTexture
geschrieben wird.destination.origin.z
+ die Ziel-GPUTexture.depthOrArrayLayers
ist kleiner oder gleich der depthOrArrayLayers der Subressource, die auf die Ziel-GPUTexture
geschrieben wird.- Die Ziel-
GPUTexture.width
ist ein Vielfaches der Texelblockbreite des Ziel-GPUTexture.format
. - Die Ziel-
GPUTexture.height
ist ein Vielfaches der Texelblockhöhe des Ziel-GPUTexture.format
. destination.aspect
bezieht sich auf einen einzelnen Aspekt des Ziel-GPUTexture.format
.- Dieser Aspekt ist ein gültiges Ziel für das Kopieren von Bildern gemäß depth-or-stencil formats.
- Die
destination
ist ansonsten mit demGPUTexture.format
kompatibel.
Beispiele
In Effizientes Rendern von glTF-Modellen wird eine Funktion definiert, um eine Vollfarbtextur zu erstellen:
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 den Einsatz 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
Specification |
---|
WebGPU # dom-gpuqueue-writetexture |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API