GPUDevice: createTexture() 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 vor der Verwendung auf produktiven Webseiten.
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
, in der 1D-, 2D- oder 3D-Datenarrays, wie z.B. Bilder, gespeichert werden können, um in GPU-Rendering-Operationen verwendet zu werden.
Syntax
createTexture(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
dimension
Optional-
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 von zweidimensionalen Schichten."3d"
: Die Textur ist dreidimensional.
dimension
ist standardmäßig"2d"
, wenn der Wert weggelassen wird. format
-
Ein enumerierter Wert, der das Format der Textur spezifiziert. Siehe den Abschnitt Texture formats der Spezifikation für alle möglichen Werte.
Hinweis:
- Das
depth32float-stencil8
Feature muss aktiviert sein, umGPUTexture
s imdepth32float-stencil8
-Format zu erstellen. - Das
texture-compression-bc
Feature muss aktiviert sein, um zweidimensionale BC komprimierteGPUTexture
s 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. - Das
texture-compression-astc
Feature muss aktiviert sein, um zweidimensionale ASTC komprimierteGPUTexture
s 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
, undastc-12x12-unorm``astc-12x12-unorm-srgb
Formate. - Das
texture-compression-etc2
Feature muss aktiviert sein, um zweidimensionale ETC2 komprimierteGPUTexture
s 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.
- Das
label
Optional-
Ein String, der ein Etikett bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, beispielsweise in
GPUError
-Nachrichten oder Konsolenwarnungen. mipLevelCount
Optional-
Eine Zahl, die die Anzahl der Mip-Level der Textur angibt. Wenn weggelassen, ist der Standardwert 1.
sampleCount
Optional-
Eine Zahl, die die Anzahl der Samples der Textur angibt. Um gültig zu sein, muss der Wert 1 oder 4 sein. Wenn weggelassen, ist der Standardwert 1. Ein Wert größer als 1 gibt eine mehrfach gesampelte Textur an.
size
-
Ein Objekt oder Array, das die Breite, Höhe und Tiefe/Array-Schichtenanzahl der Textur spezifiziert. Der Wert für die Breite muss immer angegeben werden, während die Werte für die Höhe und Tiefe/Array-Schichtenanzahl optional sind und bei Weglassen standardmäßig auf 1 gesetzt werden.
Zum Beispiel kann ein Array wie
[16, 16, 2]
oder sein äquivalentes Objekt{ width: 16, height: 16, depthOrArrayLayers: 2 }
übergeben werden. usage
-
Die bitweisen Flags, die die erlaubten Verwendungen für die
GPUTexture
darstellen. Die möglichen Werte befinden sich in derGPUTexture.usage
-Wertetabelle.Beachten Sie, dass mehrere mögliche Verwendungen durch das Trennen der Werte mit bitwise OR angegeben werden können, z.B.:
GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
.Hinweis:
- Das
bgra8unorm-storage
Feature muss aktiviert sein, umSTORAGE_BINDING
Verwendung für einebgra8unorm
-format
GPUTexture
anzugeben. - Das
rg11b10ufloat-renderable
Feature muss aktiviert sein, umRENDER_ATTACHMENT
Verwendung für einerg11b10ufloat
-format
GPUTexture
anzugeben, sowie deren Blending und Multisampling.
- Das
viewFormats
Optional-
Ein Array von enumerierten Werten, das andere Texturformate spezifiziert, die bei einem Aufruf von
GPUTexture.createView()
auf dieser Textur, zusätzlich zu dem in ihremformat
-Wert spezifizierten Texturformat, zulässig sind.
Rückgabewert
Eine GPUTexture
Objektinstanz.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createTexture()
aufgerufen wird, sonst wird ein GPUValidationError
generiert und ein ungültiges GPUTexture
Objekt zurückgegeben:
- Eine gültige
usage
ist spezifiziert. - Die in
size
angegebenen Werte (Breite, Höhe oder Tiefe/Array-Schichtenanzahl) sind größer als 0. mipLevelCount
ist größer als 0.sampleCount
ist gleich 1 oder 4.- Wenn
dimension
auf"1d"
gesetzt ist:- Der
size
-Breitenwert ist kleiner oder gleich demmaxTextureDimension1D
Limit desGPUDevice
. - Die
size
-Höhe und die Tiefe/Array-Schichtenanzahl sind gleich 1. - Der
sampleCount
ist gleich 1. - Das
format
ist nicht gleich einem komprimierten Format oder Tiefen- oder Stencil-Format.
- Der
- Wenn
dimension
auf"2d"
gesetzt ist: - Wenn
dimension
auf"3d"
gesetzt ist:- Die
size
-Breite, -Höhe und Tiefen/Array-Schichtenanzahl sind kleiner oder gleich demmaxTextureDimension3D
Limit desGPUDevice
. - Der
sampleCount
-Wert ist gleich 1. - Das
format
ist nicht gleich einem komprimierten Format oder Tiefen- oder Stencil-Format.
- Die
- Der
size
-Breitenwert ist ein Vielfaches der Texelblockbreite. - Der
size
-Höhenwert ist ein Vielfaches der Texelblockhöhe. - Wenn
sampleCount
größer als 1 ist:mipLevelCount
ist gleich 1.- Der
size
-Wert für die Tiefe/Array-Schichtenanzahl ist gleich 1. usage
enthält dasGPUTextureUsage.RENDER_ATTACHMENT
-Flag.usage
enthält nicht dasGPUTextureUsage.STORAGE_BINDING
-Flag.- Das angegebene Format unterstützt Multisampling.
- Der
mipLevelCount
-Wert ist kleiner oder gleich der maximalen Miplevel-Anzahl. - Die in
format
undviewFormats
angegebenen Formate sind kompatibel miteinander. - Wenn
usage
dasGPUTextureUsage.RENDER_ATTACHMENT
-Flag enthält:format
ist ein renderbares Format (d.h. ein farbrenderbares Format oder ein Tiefen- oder Stencil-Format).dimension
ist auf"2d"
gesetzt.
- Wenn
usage
dasGPUTextureUsage.STORAGE_BINDING
-Flag enthält:- Das angegebene
format
enthält dieSTORAGE_BINDING
-Fähigkeit (siehe die Plain color formats Tabelle zur Referenz).
- Das angegebene
Beispiele
Im WebGPU-Beispiel Textured Cube sample wird eine Textur, die auf den Flächen eines Würfels verwendet werden soll, erstellt, indem:
- das Bild in ein
HTMLImageElement
geladen und ein Bild-Bitmap mithilfe voncreateImageBitmap()
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
Specification |
---|
WebGPU # dom-gpudevice-createtexture |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API