Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
GPUDevice: createTexture() 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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiecreateTexture() Methode desGPUDevice-Interfaces erstellt eineGPUTexture, um 1D-, 2D- oder 3D-Datenarrays wie Bilder zu speichern, die in GPU-Rendering-Operationen verwendet werden.
In diesem Artikel
Syntax
createTexture(descriptor)Parameter
descriptorEin Objekt mit den folgenden Eigenschaften:
dimensionOptionalEin enumerierter Wert, der das Dimensionsniveau der Textur angibt. Mögliche Werte sind:
"1d": Die Textur ist eindimensional."2d": Die Textur ist zweidimensional oder ein Array aus zweidimensionalen Schichten."3d": Die Textur ist dreidimensional.
dimensionhat standardmäßig den Wert"2d", wenn der Wert ausgelassen wird.formatEin enumerierter Wert, der das Format der Textur angibt. Siehe den AbschnittTexturformate der Spezifikation für alle möglichen Werte.
Hinweis:
- Die
depth32float-stencil8Funktion muss aktiviert sein, umdepth32float-stencil8-Format-GPUTextures zu erstellen. - Die
texture-compression-bcFunktion muss aktiviert sein, um zweidimensionale (dimension: "2d") BC-komprimierteGPUTextures zu erstellen:bc1-rgba-unorm,bc1-rgba-unorm-srgb,bc2-rgba-unorm,bc2-rgba-unorm-srgb,bc3-rgba-unorm,bc3-rgba-unorm-srgb,bc4-r-unorm,bc4-r-snorm,bc5-rg-unorm,bc5-rg-snorm,bc6h-rgb-ufloat,bc6h-rgb-float,bc7-rgba-unormundbc7-rgba-unorm-srgbFormate. - Die
texture-compression-bcundtexture-compression-bc-sliced-3dFunktionen müssen aktiviert sein, um dreidimensionale BC-komprimierteGPUTextures zu erstellen (die gleichenformat-Werte wie im vorherigen Punkt, aber mitdimensionauf3dgesetzt). - Die
texture-compression-astcFunktion muss aktiviert sein, um zweidimensionale (dimension: "2d") ASTC-komprimierteGPUTextures zu erstellen:astc-4x4-unorm,astc-4x4-unorm-srgb,astc-5x4-unorm,astc-5x4-unorm-srgb,astc-5x5-unorm,astc-5x5-unorm-srgb,astc-6x5-unorm,astc-6x5-unorm-srgb,astc-6x6-unorm,astc-6x6-unorm-srgb,astc-8x5-unorm,astc-8x5-unorm-srgb,astc-8x6-unorm,astc-8x6-unorm-srgb,astc-8x8-unorm,astc-8x8-unorm-srgb,astc-10x5-unorm,astc-10x5-unorm-srgb,astc-10x6-unorm,astc-10x6-unorm-srgb,astc-10x8-unorm,astc-10x8-unorm-srgb,astc-10x10-unorm,astc-10x10-unorm-srgb,astc-12x10-unorm,astc-12x10-unorm-srgb,astc-12x12-unormundastc-12x12-unorm-srgbFormate. - Die
texture-compression-astcundtexture-compression-astc-sliced-3dFunktionen müssen aktiviert sein, um dreidimensionale BC-komprimierteGPUTextures zu erstellen (die gleichenformat-Werte wie im vorherigen Punkt, aber mitdimensionauf3dgesetzt). - Die
texture-compression-etc2Funktion muss aktiviert sein, um zweidimensionale ETC2-komprimierteGPUTextures zu erstellen:etc2-rgb8unorm,etc2-rgb8unorm-srgb,etc2-rgb8a1unorm,etc2-rgb8a1unorm-srgb,etc2-rgba8unorm,etc2-rgba8unorm-srgb,eac-r11unorm,eac-r11snorm,eac-rg11unormundeac-rg11snormFormate. - Siehe den AbschnittTier 1 und Tier 2 Texturformate für weitere Informationen über diese Texturformat-Sets und die Anforderungen, sie zu erstellen.
- Die
labelOptionalEin String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen zu identifizieren.mipLevelCountOptionalEine Zahl, die die Anzahl der Mip-Ebenen angibt, die die Textur enthalten wird. Wenn ausgelassen, ist der Standardwert 1.
sampleCountOptionalEine Zahl, die die Sampling-Anzahl der Textur angibt. Um gültig zu sein, muss der Wert 1 oder 4 sein. Wenn ausgelassen, ist der Standardwert 1. Ein höherer Wert als 1 zeigt eine multisample Textur an.
sizeEin Objekt oder Array, das die Breite, Höhe und Tiefe/Array-Schichtebene der Textur angibt. Der Wert für die Breite muss immer angegeben werden, während die Höhe und die Tiefe/Array-Schichtebene optional sind und auf 1 voreingestellt sind, wenn sie ausgelassen werden.
Zum Beispiel, Sie können ein Array wie
[16, 16, 2]oder sein gleichwertiges Objekt{ width: 16, height: 16, depthOrArrayLayers: 2 }übergeben.usageDieBitmasken, die die erlaubten Nutzungen für die
GPUTexturedarstellen. Die möglichen Werte sind in derGPUTexture.usageWerttabelle zu finden.Beachten Sie, dass mehrere mögliche Nutzungen angegeben werden können, indem Werte mitbitwise OR getrennt werden, z.B.:
GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT.Hinweis:
- Die
bgra8unorm-storageFunktion muss aktiviert sein, umSTORAGE_BINDINGNutzung für einbgra8unorm-formatGPUTextureanzugeben. - Die
rg11b10ufloat-renderableFunktion muss aktiviert sein, umRENDER_ATTACHMENTNutzung für einrg11b10ufloat-formatGPUTextureanzugeben, ebenso wie sein Blending und Multisampling.
- Die
viewFormatsOptionalEin Array von enumerierten Werten, das andere erlaubteTexturformate angibt, wenn
GPUTexture.createView()auf dieser Textur aufgerufen wird, zusätzlich zu dem imformat-Wert angegebenen Texturformat.
Rückgabewert
EineGPUTexture Objektinstanz.
Validierung
Die folgenden Kriterien müssen bei der Aufruf voncreateTexture() erfüllt sein, ansonsten wird einGPUValidationError ausgelöst und ein ungültigesGPUTexture Objekt zurückgegeben:
- Eine gültige
usageist angegeben. - Die in
sizeangegebenen Werte (Breite, Höhe oder Tiefe/Array-Schichtebene) sind größer als 0. mipLevelCountist größer als 0.sampleCountist gleich 1 oder 4.- Wenn
dimensionauf"1d"gesetzt ist:- Der
sizeBreitenwert ist kleiner oder gleich derGPUDevicemaxTextureDimension1DGrenze. - Die
sizeHöhen- und Tiefe/Array-Schichtebenenwerte sind gleich 1. - Der
sampleCountist gleich 1. - Das
formatist nicht gleich einemkomprimierten Format oderTiefen- oder Stencil-Format.
- Der
- Wenn
dimensionauf"2d"gesetzt ist: - Wenn
dimensionauf"3d"gesetzt ist:- Die
sizeBreite, Höhe und Tiefe/Array-Schichtebenenwerte sind kleiner oder gleich derGPUDevicemaxTextureDimension3DGrenze. - Der
sampleCountWert ist gleich 1. - Das
formatist nicht gleich einemkomprimierten Format oderTiefen- oder Stencil-Format.
- Die
- Der
sizeBreitenwert ist ein Vielfaches derTexel-Block-Breite. - Der
sizeHöhenwert ist ein Vielfaches derTexel-Block-Höhe. - Wenn
sampleCountgrößer als 1 ist:mipLevelCountist gleich 1.- Der
sizeTiefe/Array-Schichtebenenwert ist gleich 1. usageenthält dasGPUTextureUsage.RENDER_ATTACHMENTFlag.usageenthält nicht dasGPUTextureUsage.STORAGE_BINDINGFlag.- Das angegebene Format unterstützt Multisampling.
- Der
mipLevelCountWert ist kleiner als oder gleich dermaximalen Mip-Ebenenzahl. - Die in
formatundviewFormatsangegebenen Formate sindkompatibel zueinander. - Wenn
usagedasGPUTextureUsage.RENDER_ATTACHMENTFlag enthält:formatist ein renderbares Format (ein farbrenderbares Format oder einTiefen- oder Stencil-Format).dimensionist auf"2d"gesetzt.
- Wenn
usagedasGPUTextureUsage.STORAGE_BINDINGFlag enthält:- Das angegebene
formatumfasst dieSTORAGE_BINDINGFähigkeit (siehe die Tabelle dereinfachen Farbformate als Referenz).
- Das angegebene
Tier 1 und Tier 2 Texturformate
Dieser Abschnitt beschreibt die WebGPU Tier 1 und Tier 2 Texturformate.
Tier 1
Die Tier 1 Sammlungen von Texturformaten sind entworfen, um Entwicklern eine Übertragung bestehender Inhalte auf das Web zu ermöglichen, ohne dass diese es neu schreiben müssen, um die niedrigeren Fähigkeiten von WebGPU zu nutzen. Um diesen Satz zu nutzen, aktivieren Sie dietexture-formats-tier1 Funktion (sieheGPUSupportedFeatures).
Diese Funktion zu aktivieren, erlaubt:
- Die folgenden
formate mitusagen vonRENDER_ATTACHMENT(inklusive misch- und multisamplingfähiger Fähigkeiten) undSTORAGE_BINDING(mitread-onlyundwrite-onlyaccess) zu verwenden:r16unormr16snormrg16unormrg16snormrgba16unormrgba16snorm
- Die folgenden
formate mit derRENDER_ATTACHMENTusage(inklusive misch- und multisamplingfähiger Fähigkeiten) zu verwenden:r8snormrg8snormrgba8snorm
- Die folgenden
formate mit derSTORAGE_BINDINGusage(mitread-onlyundwrite-onlyaccess) zu verwenden:r8unormr8snormr8uintr8sintrg8unormrg8snormrg8uintrg8sintr16uintr16sintr16floatrg16uintrg16sintrg16floatrgb10a2uintrgb10a2unormrg11b10ufloat
- Das Verwenden der folgenden
GPUTextureFormate im Ziel-texturevonGPUQueue.copyExternalImageToTexture()Aufrufen:r16unormrg16unormrgba16unorm
Hinweis:Die Aktivierung dertexture-formats-tier1 Funktion aktiviert automatisch dierg11b10ufloat-renderable Funktion, die es erlaubt, dierg11b10ufloat Textur mit der NutzungRENDER_ATTACHMENT, inklusive Blending und Multisampling, zu verwenden.
Tier 2
Die Tier 2 Sammlungen von Texturformaten unterstützen Speichertexturformate, die in "Kern"-WebGPU keine Unterstützung haben und für fortgeschrittenen Einsatz benötigt werden. Um diesen Satz zu nutzen, aktivieren Sie dietexture-formats-tier2 Funktion (sieheGPUSupportedFeatures).
Diese Funktion zu aktivieren, erlaubt die Verwendung der folgendenformate mit derSTORAGE_BINDINGusage (mitread-writeaccess):
r8unormr8uintr8sintrgba8unormrgba8uintrgba8sintr16uintr16sintr16floatrgba16uintrgba16sintrgba16floatrgba32uintrgba32sintrgba32float
Hinweis:Die Aktivierung dertexture-formats-tier2 Funktion aktiviert automatisch dierg11b10ufloat-renderable undtexture-formats-tier1 Funktionen.
Beispiele
Im WebGPU BeispielTextured Cube sample wird eine Textur erstellt, die auf den Flächen eines Würfels verwendet wird, durch:
- Laden des Bildes in ein
HTMLImageElementund Erstellen eines Bildbitmaps mitcreateImageBitmap(). - Erstellen einer neuen Textur mit
createTexture(). - Kopieren des Bildbitmaps in die Textur mit
GPUQueue.copyExternalImageToTexture().
// …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-gpudevice-createtexture> |
Browser-Kompatibilität
Siehe auch
- DieWebGPU API