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 in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die createTexture() Methode des GPUDevice-Interfaces erstellt eine GPUTexture, um 1D-, 2D- oder 3D-Datenarrays wie Bilder zu speichern, die in GPU-Rendering-Operationen verwendet werden.
Syntax
createTexture(descriptor)
Parameter
descriptor-
Ein Objekt mit den folgenden Eigenschaften:
dimensionOptional-
Ein 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. format-
Ein enumerierter Wert, der das Format der Textur angibt. Siehe den Abschnitt Texturformate 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 Abschnitt Tier 1 und Tier 2 Texturformate für weitere Informationen über diese Texturformat-Sets und die Anforderungen, sie zu erstellen.
- Die
labelOptional-
Ein String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen zu identifizieren. mipLevelCountOptional-
Eine Zahl, die die Anzahl der Mip-Ebenen angibt, die die Textur enthalten wird. Wenn ausgelassen, ist der Standardwert 1.
sampleCountOptional-
Eine 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.
size-
Ein 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. usage-
Die Bitmasken, 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 mit bitwise 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
viewFormatsOptional-
Ein Array von enumerierten Werten, das andere erlaubte Texturformate angibt, wenn
GPUTexture.createView()auf dieser Textur aufgerufen wird, zusätzlich zu dem imformat-Wert angegebenen Texturformat.
Rückgabewert
Eine GPUTexture Objektinstanz.
Validierung
Die folgenden Kriterien müssen bei der Aufruf von createTexture() erfüllt sein, ansonsten wird ein GPUValidationError ausgelöst und ein ungültiges GPUTexture 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 einem komprimierten Format oder Tiefen- 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 einem komprimierten Format oder Tiefen- oder Stencil-Format.
- Die
- Der
sizeBreitenwert ist ein Vielfaches der Texel-Block-Breite. - Der
sizeHöhenwert ist ein Vielfaches der Texel-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 der maximalen Mip-Ebenenzahl. - Die in
formatundviewFormatsangegebenen Formate sind kompatibel zueinander. - Wenn
usagedasGPUTextureUsage.RENDER_ATTACHMENTFlag enthält:formatist ein renderbares Format (ein farbrenderbares Format oder ein Tiefen- oder Stencil-Format).dimensionist auf"2d"gesetzt.
- Wenn
usagedasGPUTextureUsage.STORAGE_BINDINGFlag enthält:- Das angegebene
formatumfasst dieSTORAGE_BINDINGFähigkeit (siehe die Tabelle der einfachen 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 die texture-formats-tier1 Funktion (siehe GPUSupportedFeatures).
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 der texture-formats-tier1 Funktion aktiviert automatisch die rg11b10ufloat-renderable Funktion, die es erlaubt, die rg11b10ufloat Textur mit der Nutzung RENDER_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 die texture-formats-tier2 Funktion (siehe GPUSupportedFeatures).
Diese Funktion zu aktivieren, erlaubt die Verwendung der folgenden formate mit der STORAGE_BINDING usage (mit read-write access):
r8unormr8uintr8sintrgba8unormrgba8uintrgba8sintr16uintr16sintr16floatrgba16uintrgba16sintrgba16floatrgba32uintrgba32sintrgba32float
Hinweis:
Die Aktivierung der texture-formats-tier2 Funktion aktiviert automatisch die rg11b10ufloat-renderable und texture-formats-tier1 Funktionen.
Beispiele
Im WebGPU Beispiel Textured 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
Loading…
Siehe auch
- Die WebGPU API