GPUTexture: Methode createView()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 Methode createView() der Schnittstelle GPUTexture erstellt eine GPUTextureView, die eine bestimmte Ansicht der GPUTexture darstellt.
Syntax
createView()
createView(descriptor)
Parameter
descriptorOptional-
Ein Objekt mit den folgenden Eigenschaften:
arrayLayerCountOptional-
Eine Zahl, die festlegt, wie viele Array-Ebenen für die Ansicht zugänglich sind, beginnend beim Wert von
baseArrayLayer.Wenn
arrayLayerCountweggelassen wird, erhält es einen Wert nach folgenden Regeln:- Wenn
dimension"1d","2d"oder"3d"ist, beträgtarrayLayerCount1. - Wenn
dimension"cube"ist, beträgtarrayLayerCount6. - Wenn
dimension"2d-array"oder"cube-array"ist, beträgtarrayLayerCountGPUTexture.depthOrArrayLayers-baseArrayLayer.
- Wenn
aspectOptional-
Ein Aufzählungswert, der angibt, welche Aspekte der Textur für die Texturansicht zugänglich sind. Mögliche Werte sind:
"all"-
Alle verfügbaren Aspekte des Texturformats sind für die Ansicht zugänglich. Je nach Format können dies Farbe, Tiefe und Stencil sein.
"depth-only"-
Nur der Tiefenaspekt eines Tiefen- oder Stencil-Formats ist für die Ansicht zugänglich.
"stencil-only"-
Nur der Stencil-Aspekt eines Tiefen- oder Stencil-Formats ist für die Ansicht zugänglich.
Wenn
aspectweggelassen wird, erhält es den Wert"all". baseArrayLayerOptional-
Eine Zahl, die den Index der ersten für die Ansicht zugänglichen Array-Ebene festlegt. Wenn
baseArrayLayerweggelassen wird, erhält es den Wert 0. baseMipLevelOptional-
Eine Zahl, die die erste (detaillierteste) für die Ansicht zugängliche Mipmap-Stufe angibt. Wenn
baseMipLevelweggelassen wird, erhält es den Wert 0. dimensionOptional-
Ein Aufzählungswert, der angibt, in welcher Form die Textur betrachtet wird. Mögliche Werte sind:
"1d": Die Textur wird als eindimensionales Bild betrachtet."2d": Die Textur wird als einzelnes zweidimensionales Bild betrachtet."2d-array": Die Textur wird als Array zweidimensionaler Bilder betrachtet."cube": Die Textur wird als Cubemap betrachtet. Die Ansicht hat 6 Array-Ebenen, die den Seiten[+X, -X, +Y, -Y, +Z, -Z]des Würfels entsprechen. Das Sampling erfolgt nahtlos über die Seiten der Cubemap hinweg."cube-array": Die Textur wird als zusammenhängendes Array aus N Cubemaps betrachtet, die jeweils 6 Array-Ebenen haben, welche den Seiten[+X, -X, +Y, -Y, +Z, -Z]des Würfels entsprechen. Das Sampling erfolgt nahtlos über die Seiten der Cubemaps hinweg."3d": Die Textur wird als dreidimensionales Bild betrachtet.
Wenn
dimensionweggelassen wird, erhält es einen Wert nach folgenden Regeln:- Wenn
GPUTexture.dimension"1d"ist, istdimension"1d". - Wenn
GPUTexture.dimension"2d"undGPUTexture.depthOrArrayLayers1 ist, istdimension"2d". - Wenn
GPUTexture.dimension"2d"undGPUTexture.depthOrArrayLayersgrößer als 1 ist, istdimension"2d-array". - Wenn
GPUTexture.dimension"3d"ist, istdimension"3d".
formatOptional-
Ein Aufzählungswert, der das Format der Texturansicht angibt. Alle möglichen Werte finden Sie im Abschnitt Texturformate der Spezifikation.
Wenn
formatweggelassen wird, erhält es einen Wert nach folgenden Regeln:- Wenn
aspect"depth-only"oder"stencil-only"undGPUTexture.formatein Tiefen- oder Stencil-Format ist, wirdformatauf das entsprechende aspektspezifische Format gesetzt. - Andernfalls wird es auf
GPUTexture.formatgesetzt.
- Wenn
labelOptional-
Eine Zeichenfolge mit einer Bezeichnung, anhand derer das Objekt beispielsweise in Meldungen von
GPUErroroder Konsolenwarnungen identifiziert werden kann. mipLevelCountOptional-
Eine Zahl, die festlegt, wie viele Mipmap-Stufen für die Ansicht zugänglich sind, beginnend beim Wert von
baseMipLevel.Wenn
mipLevelCountweggelassen wird, erhält es den WertGPUTexture.mipLevelCount-baseMipLevel. swizzleOptional-
Eine Zeichenfolge aus vier Zeichen. Die Position jedes Zeichens entspricht dem Wert des roten, grünen, blauen beziehungsweise Alpha-Kanals der Texturansicht. Jedes Zeichen legt fest, welchen Wert der jeweilige Kanal annimmt, wenn ein Shader auf die Ansicht zugreift. Mögliche Werte sind:
r-
Der Wert des roten Kanals der Textur.
g-
Der Wert des grünen Kanals der Textur.
b-
Der Wert des blauen Kanals der Textur.
a-
Der Wert des Alpha-Kanals der Textur.
0-
Erzwingt den Wert
0. 1-
Erzwingt den Wert
1.
Beispielsweise würden bei
swizzle: "grba"die Werte des roten und grünen Kanals der Textur vertauscht, wenn ein Shader auf die Ansicht zugreift. Durch die Neuzuordnung von Texturkomponenten können Entwickler die Leistung optimieren, Abweichungen in der Reihenfolge der Komponenten korrigieren und Shader-Code beim Sampling von Texturen über verschiedene Texturformate hinweg wiederverwenden.Hinweis: Um die Eigenschaft
swizzlezu verwenden, müssen Sie das Featuretexture-component-swizzlein IhremGPUDeviceaktivieren, indem Sie es im ArrayrequiredFeaturesdes Deskriptors fürGPUAdapter.requestDevice()angeben. Wenn dieses Feature nicht aktiviert ist, hat die Eigenschaftswizzlekeine Wirkung. usageOptional-
Eine Menge bitweiser Flags, die eine Teilmenge der Nutzungs-Flags der Quelltextur darstellen (verfügbar in der Eigenschaft
GPUTexture.usage) und mit dem gewählten Ansichtsformat kompatibel sind. Damit lässt sich die zulässige Nutzung der Ansicht einschränken, wenn das Ansichtsformat mit bestimmten Nutzungsarten nicht kompatibel ist. Die verfügbaren Nutzungs-Flags sind in der Wertetabelle fürGPUTexture.usageaufgeführt.Der Standardwert ist
0und steht für die vollständige Menge der Nutzungs-Flags der Quelltextur. Wenn dasformatder Ansicht nicht alle Nutzungsarten der Textur unterstützt, führt der Standardwert zu einem Fehler und die Nutzung der Ansicht muss ausdrücklich angegeben werden.
Rückgabewert
Eine Objektinstanz von GPUTextureView.
Validierung
Beim Aufruf von createView() müssen die folgenden Kriterien erfüllt sein. Andernfalls wird ein GPUValidationError erzeugt und ein ungültiges GPUTextureView-Objekt zurückgegeben:
- Wenn
aspect"all"ist, entsprichtformatentwederGPUTexture.formatoder einem derviewFormats, die im Deskriptor-Objekt des ursprünglichen Aufrufs vonGPUDevice.createTexture()angegeben wurden. - Wenn
aspect"depth-only"oder"stencil-only"ist, entsprichtformatdem passenden aspektspezifischen Format des Tiefen- oder Stencil-Formats. mipLevelCountist größer als 0.mipLevelCount+baseMipLevelist kleiner oder gleichGPUTexture.mipLevelCount.arrayLayerCountist größer als 0.arrayLayerCount+baseArrayLayerist kleiner oder gleichGPUTexture.depthOrArrayLayers, wennGPUTexture.dimension"2d"ist, beziehungsweise kleiner oder gleich 1, wennGPUTexture.dimension"1d"oder"3d"ist.- Wenn
sampleCountgrößer als 1 ist, istdimension"2d". - Wenn
dimensionfolgenden Wert hat:"1d"GPUTexture.dimensionist"1d"arrayLayerCountist 1
"2d"GPUTexture.dimensionist"2d"arrayLayerCountist 1
"2d-array"GPUTexture.dimensionist"2d"
"cube"GPUTexture.dimensionist"2d"arrayLayerCountist 6GPUTexture.widthentsprichtGPUTexture.height
"cube-array"GPUTexture.dimensionist"2d"arrayLayerCountist ein Vielfaches von 6GPUTexture.widthentsprichtGPUTexture.height
"3d"GPUTexture.dimensionist"3d"arrayLayerCountist 1
- Das
formatder Ansicht unterstützt alle in der Eigenschaftusageangegebenen Nutzungsarten.
Beispiele
>Typische Verwendung von createView()
In der Cubemap-Demo der WebGPU-Beispiele finden Sie mehrere Beispiele für die Verwendung von createView(): sowohl zum Erstellen einer Ansicht als resource für einen Aufruf von GPUDevice.createBindGroup() als auch zum Bereitstellen einer view im Objekt depthStencilAttachment eines Deskriptors für GPUCommandEncoder.beginRenderPass().
const uniformBindGroup = device.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{
binding: 0,
resource: {
buffer: uniformBuffer,
offset: 0,
size: uniformBufferSize,
},
},
{
binding: 1,
resource: sampler,
},
{
binding: 2,
resource: cubemapTexture.createView({
dimension: "cube",
}),
},
],
});
const renderPassDescriptor = {
colorAttachments: [
{
view: undefined, // Assigned later
loadOp: "clear",
storeOp: "store",
},
],
depthStencilAttachment: {
view: depthTexture.createView(),
depthClearValue: 1.0,
depthLoadOp: "clear",
depthStoreOp: "store",
},
};
// …
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
// …
createView() mit eingeschränkter Nutzung
In diesem Codeausschnitt erstellen wir eine Textur und anschließend eine Ansicht, deren Nutzung über die Eigenschaft usage eingeschränkt wird.
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: "rgba8unorm-srgb",
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage
});
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gputexture-createview> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API