GPUQueue: writeTexture() 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 vor der Verwendung auf produktiven Webseiten.
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 angegebene GPUTexture
.
Dies ist eine Komfortfunktion, die eine Alternative zum Setzen von Texturdaten über Pufferzuordnung und Puffer-zu-Textur-Kopien bietet. Sie ermöglicht es dem Benutzeragenten, die effizienteste Methode für das Kopieren der Daten zu bestimmen.
Syntax
writeTexture(destination, data, dataLayout, size)
Parameter
destination
-
Ein Objekt, das die Texturunterressource und den Ursprung definiert, zu dem die Datenquelle geschrieben wird. Es kann die folgenden Eigenschaften enthalten:
aspect
Optional-
Ein aufgezählter Wert, der beschreibt, 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 einige der folgenden sein können: Farbe, Tiefe und Schablone.
"depth-only"
-
Nur der Tiefenaspekt eines Tiefen- oder Schablonenformats wird beschrieben.
"stencil-only"
-
Nur der Schablonaspekt eines Tiefen- oder Schablonenformats wird beschrieben.
Wenn weggelassen, hat
aspect
den Wert"all"
. mipLevel
Optional-
Eine Zahl, die das Mip-Map-Level der Textur angibt, zu dem die Daten geschrieben werden sollen. Wenn weggelassen, hat
mipLevel
den Standardwert 0. origin
Optional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt — die minimale Ecke des Texturbereichs, zu dem die Daten geschrieben werden sollen. Zusammen mit
size
definiert dies den vollständigen Bereich, der kopiert wird. Diex
-,y
- undz
-Werte haben den Standardwert 0, wennorigin
weggelassen wird.Sie können zum Beispiel ein Array wie
[0, 0, 0]
oder dessen äquivalentes Objekt{ x: 0, y: 0, z: 0 }
übergeben. texture
-
Ein
GPUTexture
-Objekt, das die Textur darstellt, zu der die Daten geschrieben werden sollen.
data
-
Ein Objekt, das die Datenquelle darstellt, die in die
GPUTexture
geschrieben werden soll. Dies kann einArrayBuffer
,TypedArray
oder einDataView
sein. dataLayout
-
Ein Objekt, das das Layout des in
data
enthaltenen Inhalts definiert. Mögliche Werte sind:offset
Optional-
Der Offset in Bytes vom Beginn der
data
bis zum Beginn der zu kopierenden Bilddaten. Wenn weggelassen, hatoffset
den Standardwert 0. bytesPerRow
Optional-
Eine Zahl, die die Abstände in Bytes zwischen dem Beginn jeder Blockreihe (d.h. einer Reihe vollständiger Texelblöcke) und der nachfolgenden Blockreihe darstellt. Dies ist erforderlich, wenn mehrere Blockreihen vorhanden sind (d.h. die Kopierhöhe oder -tiefe mehr als ein Block ist).
rowsPerImage
Optional-
Die Anzahl der Blockreihen pro Einzelbild der Textur.
bytesPerRow
×rowsPerImage
gibt Ihnen die Abstände in Bytes zwischen dem Beginn jedes vollständigen Bildes. Dies ist erforderlich, wenn mehrere Bilder kopiert werden sollen.
size
-
Ein Objekt oder Array, das das Ausmaß der Kopie angibt — die entfernte Ecke des Texturbereichs, zu dem die Daten geschrieben werden sollen. Zusammen mit
destination.origin
definiert dies den vollständigen Bereich, der kopiert wird. Siehedestination.origin
für Beispiele zur Objekt/Array-Struktur.
Rückgabewert
Keiner (Undefined
).
Validierung
Die folgenden Kriterien müssen beim Aufruf von writeTexture()
erfüllt sein, ansonsten wird ein GPUValidationError
erzeugt und die GPUQueue
wird ungültig:
mipLevel
ist kleiner als die Ziel-GPUTexture.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 Tiefen- oder Schablonenformat ist oderGPUTexture.sampleCount
größer als 1 ist, entspricht die Unterressourcengrößesize
. - Das Ziel-
GPUTexture.usage
enthält dasGPUTextureUsage.COPY_DST
-Flag. - Das Ziel-
GPUTexture.sampleCount
ist 1. destination.origin.x
+ diedestination
-Breite derGPUTexture.width
ist kleiner oder gleich der Breite der Unterressource, die zurdestination
GPUTexture
geschrieben wird.destination.origin.y
+ diedestination
-Höhe derGPUTexture.height
ist kleiner oder gleich der Höhe der Unterressource, die zurdestination
GPUTexture
geschrieben wird.destination.origin.z
+ diedestination
-TiefenOderArraySchichten derGPUTexture.depthOrArrayLayers
ist kleiner oder gleich den depthOrArrayLayers der Unterressource, die zurdestination
GPUTexture
geschrieben wird.- Die
destination
-Breite derGPUTexture.width
ist ein Vielfaches der Texelblockbreite des Ziel-GPUTexture.format
. - Die
destination
-Höhe derGPUTexture.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 Bildkopie-Ziel gemäß Tiefen- oder Schablonenformaten.
- Die
destination
ist anderweitig mit demGPUTexture.format
kompatibel.
Beispiele
In Effizientes Rendern von glTF-Modellen wird eine Funktion zur Erstellung 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
Specification |
---|
WebGPU # dom-gpuqueue-writetexture |
Browser-Kompatibilität
Siehe auch
- Die WebGPU-API