GPUDevice: createTexture() Methode
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 createTexture()-Methode der GPUDevice-Schnittstelle erstellt eine GPUTexture, um 1D-, 2D- oder 3D-Datenarrays, wie Bilder, für GPU-Rendering-Operationen zu speichern.
Syntax
createTexture(descriptor)
Parameter
descriptor-
Ein Objekt mit den folgenden Eigenschaften:
dimensionOptional-
Ein enumerierter Wert, der die Dimensionsebene 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 den Standardwert"2d", wenn der Wert weggelassen 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-stencil8- Funktion muss aktiviert sein, umdepth32float-stencil8-Format-GPUTexturen zu erstellen. - Die
texture-compression-bc-Funktion 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-unorm, undbc7-rgba-unorm-srgb-Formate. - Die
texture-compression-bcundtexture-compression-bc-sliced-3dFunktionen müssen aktiviert sein, um dreidimensionale BC-komprimierteGPUTextures zu erstellen (die gleichenformat-Werte wie im vorherigen Aufzählungspunkt, jedoch mitdimensionauf3dgesetzt). - Die
texture-compression-astc-Funktion 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-unorm, undastc-12x12-unorm-srgb-Formate. - Die
texture-compression-astcundtexture-compression-astc-sliced-3dFunktionen müssen aktiviert sein, um dreidimensionale BC-komprimierteGPUTextures zu erstellen (die gleichenformat-Werte wie im vorherigen Aufzählungspunkt, jedoch mitdimensionauf3dgesetzt). - Die
texture-compression-etc2-Funktion 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-rg11unorm, undeac-rg11snorm-Formate. - Siehe den Abschnitt Tier 1 und Tier 2 Texturformate für weitere Informationen über diese Texturformat-Sets und die Anforderungen, um sie zu erstellen.
- Die
labelOptional-
Ein String, der eine Bezeichnung bereitstellt, mit der das Objekt identifiziert werden kann, zum Beispiel in
GPUError-Meldungen oder Konsolenwarnungen. mipLevelCountOptional-
Eine Zahl, die angibt, wie viele Mip-Ebenen die Textur enthalten wird. Wenn diese weggelassen wird, ist der Standardwert 1.
sampleCountOptional-
Eine Zahl, die die Abtastanzahl der Textur angibt. Um gültig zu sein, muss der Wert 1 oder 4 betragen. Wenn dieser weggelassen wird, ist der Standardwert 1. Ein Wert größer als 1 bedeutet eine mehrfach abgetastete Textur.
size-
Ein Objekt oder Array, das die Breite, Höhe und Tiefe/Array-Schichtanzahl der Textur spezifiziert. Der Breitenwert muss immer angegeben werden, während die Werte für Höhe und Tiefe/Array-Schichtanzahl optional sind und standardmäßig 1 betragen, wenn diese weggelassen werden.
Beispielsweise kann ein Array wie
[16, 16, 2]oder das äquivalente Objekt{ width: 16, height: 16, depthOrArrayLayers: 2 }übergeben werden. usage-
Die Bitweiser-Flags, die die erlaubten Verwendungen für die
GPUTexturedarstellen. Die möglichen Werte befinden sich in derGPUTexture.usage-Wertetabelle.Beachten Sie, dass mehrere mögliche Verwendungen durch Trennung der Werte mit bitwise OR angegeben werden können, beispielsweise:
GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT.Hinweis:
- Die
bgra8unorm-storage- Funktion muss aktiviert sein, umSTORAGE_BINDING-Verwendung für einebgra8unorm-formatGPUTextureanzugeben. - Die
rg11b10ufloat-renderable- Funktion muss aktiviert sein, umRENDER_ATTACHMENT-Verwendung für einerg11b10ufloat-formatGPUTexturesowie deren Blending- und Multisampling-Fähigkeiten anzugeben.
- Die
viewFormatsOptional-
Ein Array enumerierter Werte, das andere Texturformate spezifiziert, deren Verwendung beim Aufrufen von
GPUTexture.createView()bei dieser Textur erlaubt ist, zusätzlich zum informatangegebenen Texturformat.
Rückgabewert
Eine Instanz des GPUTexture-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createTexture() aufgerufen wird, ansonsten wird ein GPUValidationError erzeugt und ein ungültiges GPUTexture-Objekt wird zurückgegeben:
- Ein gültiger
usageist spezifiziert. - Die in
sizeangegebenen Werte (Breite, Höhe oder Tiefe/Array-Schichtanzahl) sind größer als 0. mipLevelCountist größer als 0.sampleCountist gleich 1 oder 4.- Wenn
dimensionauf"1d"gesetzt ist:- Der
size-Breitenwert ist kleiner oder gleich demGPUDevice'smaxTextureDimension1DLimit. - Die
size-Höhen- und Tiefen/Array-Schichtanzahl-Werte sind gleich 1. - Der
sampleCountist gleich 1. - Das
formatentspricht nicht einem komprimierten Format oder einem Tiefen-oder-Stencil-Format.
- Der
- Wenn
dimensionauf"2d"gesetzt ist: - Wenn
dimensionauf"3d"gesetzt ist:- Die
size-Breite, -Höhe, und -Tiefe/Array-Schichtanzahl-Werte sind kleiner oder gleich demGPUDevice'smaxTextureDimension3DLimit. - Der
sampleCount-Wert ist gleich 1. - Das
formatentspricht nicht einem komprimierten Format oder einem Tiefen-oder-Stencil-Format.
- Die
- Der
size-Breitenwert ist ein Vielfaches der Texel-Block-Breite. - Der
size-Höhenwert ist ein Vielfaches der Texel-Block-Höhe. - Wenn
sampleCountgrößer als 1 ist:mipLevelCountist gleich 1.- Der
size-Tiefen/Array-Schichtanzahl-Wert ist gleich 1. usageumfasst dasGPUTextureUsage.RENDER_ATTACHMENT-Flag.usageumfasst nicht dasGPUTextureUsage.STORAGE_BINDING-Flag.- Das spezifizierte Format unterstützt Multi-Sampling.
- Der
mipLevelCount-Wert ist kleiner oder gleich der maximalen Miplevel-Anzahl. - Die in
formatundviewFormatsangegebenen Formate sind kompatibel miteinander. - Wenn
usagedasGPUTextureUsage.RENDER_ATTACHMENT-Flag enthält:formatist ein renderbares Format (d.h. ein Farbrenderbares Format oder ein Tiefen-oder-Stencil-Format).dimensionist auf"2d"gesetzt.
- Wenn
usagedasGPUTextureUsage.STORAGE_BINDING-Flag enthält:- Das spezifizierte
formatenthält dieSTORAGE_BINDING-Fähigkeit (siehe die Tabelle der Einfarbigen Formate als Referenz).
- Das spezifizierte
- Wenn
usagedasGPUTextureUsage.TRANSIENT_ATTACHMENT-Flag enthält:usageist gleichTRANSIENT_ATTACHMENT | RENDER_ATTACHMENT.dimensionist gleich"2d".mipLevelCountist gleich1.size.depthOrArrayLayersist gleich1.
Tier 1 und Tier 2 Texturformate
Dieser Abschnitt beschreibt die WebGPU Tier1- und Tier2-Texturformate.
Tier 1
Das Tier 1-Set von Texturformaten ist so konzipiert, dass Entwickler bestehenden Content auf das Web portieren können, ohne ihn umschreiben zu müssen, um WebGPUs niedrigerstufige Fähigkeiten zu verwenden. Um dieses Set zu nutzen, aktivieren Sie die texture-formats-tier1-Funktion (siehe GPUSupportedFeatures).
Die Aktivierung dieser Funktion erlaubt:
- Die Verwendung der folgenden
FormatemitVerwendungenvonRENDER_ATTACHMENT(einschließlich blendarer und multisamplingfähiger Fähigkeiten) undSTORAGE_BINDING(mitread-onlyundwrite-onlyZugriff):r16unormr16snormrg16unormrg16snormrgba16unormrgba16snorm
- Die Verwendung der folgenden
Formatemit derRENDER_ATTACHMENTVerwendung(einschließlich blendarer und multisamplingfähiger Fähigkeiten):r8snormrg8snormrgba8snorm
- Die Verwendung der folgenden
Formatemit derSTORAGE_BINDINGVerwendung(mitread-onlyundwrite-onlyZugriff):r8unormr8snormr8uintr8sintrg8unormrg8snormrg8uintrg8sintr16uintr16sintr16floatrg16uintrg16sintrg16floatrgb10a2uintrgb10a2unormrg11b10ufloat
- Die Verwendung der folgenden
GPUTexture-Formate im Ziel-TexturvonGPUQueue.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 RENDER_ATTACHMENT-Verwendung, einschließlich Blend- und Multisampling, zu nutzen.
Tier 2
Das Tier 2-Set von Texturformaten unterstützt Speichertexturformate, die in "Kern"-WebGPU nicht unterstützt werden und für fortgeschrittene Nutzung erforderlich sind. Um dieses Set zu nutzen, aktivieren Sie die texture-formats-tier2-Funktion (siehe GPUSupportedFeatures).
Die Aktivierung dieser Funktion erlaubt die Verwendung der folgenden Formate mit der STORAGE_BINDING Verwendung (mit read-write Zugriff):
r8unormr8uintr8sintrgba8unormrgba8uintrgba8sintr16uintr16sintr16floatrgba16uintrgba16sintrgba16floatrgba32uintrgba32sintrgba32float
Hinweis:
Die Aktivierung der texture-formats-tier2-Funktion aktiviert automatisch die rg11b10ufloat-renderable- und texture-formats-tier1-Funktionen.
Beispiele
In den WebGPU-Beispielen Textured Cube sample wird eine Textur für die Flächen eines Würfels erstellt, indem:
- Das Bild in ein
HTMLImageElementgeladen und ein Bild-Bitmap mitcreateImageBitmap()erstellt wird. - Eine neue Textur mit
createTexture()erstellt wird. - Das Bild-Bitmap in die Textur mit
GPUQueue.copyExternalImageToTexture()kopiert wird.
// …
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-gpudevice-createtexture> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API