GPUQueue: copyExternalImageToTexture() 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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die copyExternalImageToTexture()
Methode der GPUQueue
Schnittstelle kopiert ein Snapshot, das von einer Quellbild-, Video- oder Leinwand aufgenommen wurde, in eine gegebene GPUTexture
.
Die Verwendung dieser Funktion ermöglicht es dem User-Agent, die effizienteste Art und Weise zu bestimmen, die Daten für jeden Quelltyp zu kopieren.
Syntax
copyExternalImageToTexture(source, destination, copySize)
Parameter
source
-
Ein Objekt, das die Quelle zum Schreiben an das Ziel und dessen Ursprung darstellt. Dies kann die folgenden Eigenschaften haben:
source
-
Ein Objekt, das die Quelle des Snapshots zum Kopieren bereitstellt. Dies kann ein
HTMLCanvasElement
,HTMLImageElement
,HTMLVideoElement
,ImageBitmap
,ImageData
,OffscreenCanvas
oderVideoFrame
Objekt sein. Die Bildquelldaten werden genau in dem Moment erfasst, in demcopyExternalImageToTexture()
aufgerufen wird. origin
Optional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt — die obere linke Ecke des zu kopierenden Quellunterbereichs. Zusammen mit
copySize
definiert dies den gesamten Umfang des Quellunterbereichs. Diex
- undy
-Werte standardisieren auf 0, wennorigin
ganz oder teilweise weggelassen wird.Im Folgenden ein Beispielarray:
jsorigin: [0, 0];
Das entsprechende Objekt sähe so aus:
jsorigin: { x: 0, y: 0 }
flipY
Optional-
Ein Boolean. Wenn auf
true
gesetzt, wird der Bildausschnitt vertikal gespiegelt. Wenn es weggelassen wird, wirdflipY
standardmäßig auffalse
gesetzt.
destination
-
Ein Objekt, das die Textur-Unterressource und den Ursprung definiert, um das erfasste Bild zu schreiben, sowie Metadaten zur Codierung. Dies kann die folgenden Eigenschaften haben:
aspect
Optional-
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 alle oder einige von Farbe, Tiefe und Schablone bedeuten kann, abhängig davon, um welche Art von Format es sich handelt.
"depth-only"
-
Nur der Tiefenaspekt eines Tiefen-oder-Schablonenformats wird beschrieben.
"stencil-only"
-
Nur der Schablonaspekt eines Tiefen-oder-Schablonenformats wird beschrieben.
Wenn es weggelassen wird, nimmt
aspect
den Wert"all"
an. colorSpace
Optional-
Ein enumerierter Wert, der den Farbraum und die Codierung beschreibt, die verwendet werden, um Daten in die Zieltextur zu codieren. Mögliche Werte sind
"srgb"
und"display-p3"
. Wird es weggelassen, istcolorSpace
standardmäßig"srgb"
.Hinweis: Die Codierung kann dazu führen, dass Werte außerhalb des Bereichs
[0, 1]
in die Zieltextur geschrieben werden, wenn deren Format sie darstellen kann. Andernfalls werden die Ergebnisse auf den Bereich des Zieltexturformats begrenzt. Eine Umwandlung ist möglicherweise nicht erforderlich, wenncolorSpace
mit dem Farbraum der Bildquelle übereinstimmt. mipLevel
Optional-
Eine Zahl, die die Mip-Map-Ebene der Textur repräsentiert, in die das Bild geschrieben wird. Wenn es weggelassen wird, wird
mipLevel
standardmäßig auf 0 gesetzt. origin
Optional-
Ein Objekt oder Array, das den Ursprung der Kopie angibt — die minimalste Ecke des Texturbereichs, in den die Bilddaten geschrieben werden sollen. Zusammen mit
copySize
definiert dies den gesamten Umfang des zu kopierenden Bereichs. Diex
-,y
- undz
-Werte standardisieren auf 0, wennorigin
ganz oder teilweise weggelassen wird.Im Folgenden ein Beispielarray:
jsorigin: [0, 0, 0];
Das entsprechende Objekt sähe so aus:
jsorigin: { x: 0, y: 0, z: 0 }
premultipliedAlpha
Optional-
Ein Boolean. Wenn auf
true
gesetzt, haben die im Textur geschriebenen Bilddaten ihre RGB-Kanäle bereits mit dem Alphakanal multipliziert. Wird es nicht angegeben, istpremultipliedAlpha
standardmäßigfalse
.Hinweis: Wenn diese Option auf
true
gesetzt ist undsource
ebenfalls vorvervielfacht ist, müssen die RGB-Werte der Quelle beibehalten werden, auch wenn sie ihre entsprechenden Alphawerte überschreiten. texture
-
Ein
GPUTexture
Objekt, das die Textur repräsentiert, in die die Daten geschrieben werden sollen.
copySize
-
Ein Objekt oder Array, das
width
,height
unddepthOrArrayLayers
des Bereichs, von dem kopiert werden soll, angibt.Im Folgenden ein Beispielarray:
jsorigin: [16, 1, 1];
Das entsprechende Objekt sähe so aus:
jsorigin: { width: 16, height: 1, depthOrArrayLayers: 1 }
Der
width
-Wert muss enthalten sein. Wenn dieheight
- oderdepthOrArrayLayers
-Werte weggelassen werden, standardisieren sie auf 1.
Rückgabewert
Keiner (Undefined
).
Ausnahmen
OperationError
DOMException
-
Die Methode wirft einen
OperationError
, wenn die folgenden Kriterien nicht erfüllt sind:source.origin.x
+ die Breite des zu kopierenden Bereichs ist kleiner als oder gleich der Breite des Quellbilds.source.origin.y
+ die Höhe des zu kopierenden Bereichs ist kleiner als oder gleich der Höhe des Quellbilds.source.origin.z
+ dasdepthOrArrayLayers
des zu kopierenden Bereichs ist kleiner als oder gleich 1.dataOffset
ist gleich oder kleiner als die Größe vondata
.- Die Größe von
data
(bei Umwandlung in Bytes, im Fall vonTypedArray
s) ist ein Vielfaches von 4.
SecurityError
DOMException
-
Wird ausgelöst, wenn die Bildquelldaten Cross-Origin sind.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn writeTexture()
aufgerufen wird, andernfalls wird ein GPUValidationError
erzeugt und die GPUQueue
wird ungültig:
mipLevel
ist kleiner als die ZielGPUTexture.mipLevelCount
.origin.x
ist ein Vielfaches der Texelblockbreite des ZielGPUTexture.format
.origin.y
ist ein Vielfaches der Texelblockhöhe des ZielGPUTexture.format
.- Wenn das Ziel
GPUTexture.format
ein Tiefen-oder-Schablonenformat ist, entspricht die Bildaufnahmengrößesize
. - Die Ziel
GPUTexture.usage
umfasst dieGPUTextureUsage.COPY_DST
undGPUTextureUsage.RENDER_ATTACHMENT
Flags. - Die Ziel
GPUTexture.dimension
ist"2d"
. - Die Ziel
GPUTexture.sampleCount
ist 1. - Das Ziel
GPUTexture.format
ist eines der folgenden (welcheGPUTextureUsage.RENDER_ATTACHMENT
Nutzung unterstützen):"r8unorm"
"r16float"
"r32float"
"rg8unorm"
"rg16float"
"rg32float"
"rgba8unorm"
"rgba8unorm-srgb"
"bgra8unorm"
"bgra8unorm-srgb"
"rgb10a2unorm"
"rgba16float"
"rgba32float"
destination.origin.x
+copySize.width
ist kleiner als oder gleichdestination
GPUTexture
width
.destination.origin.y
+copySize.height
ist kleiner als oder gleichdestination
GPUTexture
height
.destination.origin.z
+copySize.depthOrArrayLayers
ist kleiner als oder gleichdestination
GPUTexture
depthOrArrayLayers
.- Die
destination
GPUTexture.width
ist ein Vielfaches der Texelblockbreite des ZielGPUTexture.format
. - Die
destination
GPUTexture.height
ist ein Vielfaches der Texelblockhöhe des ZielGPUTexture.format
.
Beispiele
Im WebGPU Samples Textured Cube Beispiel, wird der folgende Ausschnitt verwendet, um ein Bild abzurufen und es 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
Specification |
---|
WebGPU # dom-gpuqueue-copyexternalimagetotexture |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Die WebGPU API