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

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

Beispiele

In Effizientes Rendern von glTF-Modellen wird eine Funktion definiert, um eine Vollfarbtextur zu erstellen:

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 den Einsatz 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