GPUQueue: Methode copyExternalImageToTexture()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 copyExternalImageToTexture() Methode des GPUQueue-Interfaces kopiert einen Schnappschuss von einem Quellbild, Video oder Canvas in eine gegebene GPUTexture.
Durch die Verwendung dieser Funktion kann der Benutzeragent die effizienteste Methode bestimmen, um die Daten für jeden Quelltyp zu kopieren.
Syntax
copyExternalImageToTexture(source, destination, copySize)
Parameter
source-
Ein Objekt, das die Quelle zum Schreiben auf das Ziel und dessen Ursprung darstellt. Dies kann die folgenden Eigenschaften haben:
source-
Ein Objekt, das die Quelle des Schnappschusses zum Kopieren bereitstellt. Dies kann ein
HTMLCanvasElement,HTMLImageElement,HTMLVideoElement,ImageBitmap,ImageData,OffscreenCanvasoderVideoFrame-Objekt sein. Die Bildquelldaten werden im Moment der Aufrufung voncopyExternalImageToTexture()erfasst. originOptional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt — die obere linke Ecke des Quell-Subbereichs, aus dem kopiert werden soll. Zusammen mit
copySizedefiniert dies den vollständigen Umfang des Quell-Subbereichs. Die Wertexundystandardmäßig auf 0, wennoriginweggelassen wird.Zum Beispiel können Sie ein Array wie
[0, 0]oder das entsprechende Objekt{ x: 0, y: 0 }übergeben. flipYOptional-
Ein Boolean. Wenn auf
truegesetzt, wird die Bildaufnahme vertikal gespiegelt. Wenn ausgelassen, istflipYstandardmäßigfalse.
destination-
Ein Objekt, das die Texture-Subressource und den Ursprung definiert, auf den das erfasste Bild geschrieben werden soll, plus Kodierungsmetadaten. Dies kann die folgenden Eigenschaften haben:
aspectOptional-
Ein enumerierter Wert, der definiert, auf welche Aspekte der Textur das Bild geschrieben werden soll. Mögliche Werte sind:
"all"-
Alle verfügbaren Aspekte des Texturformats werden beschrieben, was je nach Art des Formats Farbe, Tiefe und Schablone umfassen 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
aspectausgelassen wird, nimmt es den Wert"all"an. colorSpaceOptional-
Ein enumerierter Wert, der den Farbraum und die Kodierung beschreibt, die zum Kodieren der Daten in die Zieltextur verwendet werden. Mögliche Werte sind
"srgb"und"display-p3". Wenn ausgelassen, istcolorSpacestandardmäßig"srgb".Hinweis: Die Kodierung kann dazu führen, dass Werte außerhalb des Bereichs
[0, 1]in die Zieltextur geschrieben werden, wenn deren Format diese darstellen kann. Andernfalls werden die Ergebnisse auf den Bereich des Zieltexturformats begrenzt. Eine Konvertierung kann nicht notwendig sein, wenncolorSpacemit dem Farbraum der Quelle übereinstimmt. mipLevelOptional-
Eine Zahl, die die Mip-Map-Ebene der Textur repräsentiert, in die das Bild geschrieben werden soll. Wenn ausgelassen, ist
mipLevelstandardmäßig 0. originOptional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt — die minimale Ecke des Texturbereichs, in den die Bilddaten geschrieben werden sollen. Zusammen mit
copySizedefiniert dies den vollständigen Umfang des Bereichs, in den kopiert werden soll. Die Wertex,yundzstandardmäßig auf 0, wennoriginweggelassen wird.Zum Beispiel können Sie ein Array wie
[0, 0, 0]oder das entsprechende Objekt{ x: 0, y: 0, z: 0 }übergeben. premultipliedAlphaOptional-
Ein Boolean. Wenn auf
truegesetzt, werden die RGB-Kanäle der in die Textur geschriebenen Bilddaten mit dem Alpha-Kanal vorvermischt. Wenn ausgelassen, istpremultipliedAlphastandardmäßigfalse.Hinweis: Wenn diese Option auf
truegesetzt ist und diesourceauch vorvermischt ist, müssen die RGB-Werte der Quelle beibehalten werden, selbst wenn sie ihre entsprechenden Alpha-Werte überschreiten. texture-
Ein
GPUTexture-Objekt, das die Textur darstellt, in die die Daten geschrieben werden sollen.
copySize-
Ein Objekt oder Array, das
width,heightunddepthOrArrayLayers— des Bereichs angibt, von dem/auf den kopiert werden soll.Zum Beispiel können Sie ein Array wie
[16, 1, 1]oder das entsprechende Objekt{ width: 16, height: 1, depthOrArrayLayers: 1 }übergeben.Der
width-Wert muss enthalten sein. Wenn dieheight- oderdepthOrArrayLayers-Werte weggelassen werden, sind sie standardmäßig 1.
Rückgabewert
Keiner (undefined).
Ausnahmen
OperationErrorDOMException-
Die Methode löst einen
OperationErroraus, wenn die folgenden Kriterien nicht erfüllt sind:source.origin.x+ die Breite des zu kopierenden Bereichs ist kleiner oder gleich der Breite des Quellbilds.source.origin.y+ die Höhe des zu kopierenden Bereichs ist kleiner oder gleich der Höhe des Quellbilds.source.origin.z+ diedepthOrArrayLayersdes zu kopierenden Bereichs ist kleiner oder gleich 1.dataOffsetist gleich oder kleiner als die Größe vondata.- Die Größe von
data(umgerechnet in Bytes, im Fall vonTypedArrays) ist ein Vielfaches von 4.
SecurityErrorDOMException-
Ausgelöst, wenn die Bildquellendaten aus einer anderen Herkunft stammen.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn writeTexture() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und die GPUQueue wird ungültig:
mipLevelist kleiner als dieGPUTexture.mipLevelCountdes Ziels.origin.xist ein Vielfaches der Texelblockbreite des Ziel-GPUTexture.format.origin.yist ein Vielfaches der Texelblockhöhe des Ziel-GPUTexture.format.- Wenn das Ziel-
GPUTexture.formatein depth-or-stencil format ist, entspricht die Bildaufnahmengrößesize. - Die Ziel-
GPUTexture.usageenthält die FlagsGPUTextureUsage.COPY_DSTundGPUTextureUsage.RENDER_ATTACHMENT. - Die Ziel-
GPUTexture.dimensionist"2d". - Die Ziel-
GPUTexture.sampleCountist 1. - Das Ziel-
GPUTexture.formatist eines der folgenden (dieGPUTextureUsage.RENDER_ATTACHMENT-Nutzung unterstützen):"r8unorm""r16float""r32float""rg8unorm""rg16float""rg32float""rgba8unorm""rgba8unorm-srgb""bgra8unorm""bgra8unorm-srgb""rgb10a2unorm""rgba16float""rgba32float"
destination.origin.x+copySize.widthist kleiner oder gleich derdestinationGPUTexturewidth.destination.origin.y+copySize.heightist kleiner oder gleich derdestinationGPUTextureheight.destination.origin.z+copySize.depthOrArrayLayersist kleiner oder gleich derdestinationGPUTexturedepthOrArrayLayers.- Die
destinationGPUTexture.widthist ein Vielfaches der Texelblockbreite des Ziel-GPUTexture.format. - Die
destinationGPUTexture.heightist ein Vielfaches der Texelblockhöhe des Ziel-GPUTexture.format.
Beispiele
Im WebGPU-Beispiel Textured Cube example wird der folgende Codeausschnitt verwendet, um ein Bild abzurufen und in eine GPUTexture hochzuladen:
let cubeTexture;
{
const img = document.createElement("img");
img.src = new URL(
"../../../assets/img/Di-3d.png",
import.meta.url,
).toString();
await img.decode();
const imageBitmap = await createImageBitmap(img);
cubeTexture = device.createTexture({
size: [imageBitmap.width, imageBitmap.height, 1],
format: "rgba8unorm",
usage:
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.COPY_DST |
GPUTextureUsage.RENDER_ATTACHMENT,
});
device.queue.copyExternalImageToTexture(
{ source: imageBitmap },
{ texture: cubeTexture },
[imageBitmap.width, imageBitmap.height],
);
}
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpuqueue-copyexternalimagetotexture> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API