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

js
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. Die x-, y- und z-Werte haben den Standardwert 0, wenn origin 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 ein ArrayBuffer, TypedArray oder ein DataView 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, hat offset 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. Siehe destination.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:

Beispiele

In Effizientes Rendern von glTF-Modellen wird eine Funktion zur Erstellung einer einfarbigen Textur definiert:

js
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:

js
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