Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
createView()
createView(descriptor)

Parameter

descriptor Optional

Ein Objekt mit den folgenden Eigenschaften:

arrayLayerCount Optional

Eine Zahl, die festlegt, wie viele Array-Ebenen für die Ansicht zugänglich sind, beginnend beim Wert von baseArrayLayer.

Wenn arrayLayerCount weggelassen wird, erhält es einen Wert nach folgenden Regeln:

  • Wenn dimension "1d", "2d" oder "3d" ist, beträgt arrayLayerCount 1.
  • Wenn dimension "cube" ist, beträgt arrayLayerCount 6.
  • Wenn dimension "2d-array" oder "cube-array" ist, beträgt arrayLayerCount GPUTexture.depthOrArrayLayers - baseArrayLayer.
aspect Optional

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 aspect weggelassen wird, erhält es den Wert "all".

baseArrayLayer Optional

Eine Zahl, die den Index der ersten für die Ansicht zugänglichen Array-Ebene festlegt. Wenn baseArrayLayer weggelassen wird, erhält es den Wert 0.

baseMipLevel Optional

Eine Zahl, die die erste (detaillierteste) für die Ansicht zugängliche Mipmap-Stufe angibt. Wenn baseMipLevel weggelassen wird, erhält es den Wert 0.

dimension Optional

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 dimension weggelassen wird, erhält es einen Wert nach folgenden Regeln:

format Optional

Ein Aufzählungswert, der das Format der Texturansicht angibt. Alle möglichen Werte finden Sie im Abschnitt Texturformate der Spezifikation.

Wenn format weggelassen wird, erhält es einen Wert nach folgenden Regeln:

label Optional

Eine Zeichenfolge mit einer Bezeichnung, anhand derer das Objekt beispielsweise in Meldungen von GPUError oder Konsolenwarnungen identifiziert werden kann.

mipLevelCount Optional

Eine Zahl, die festlegt, wie viele Mipmap-Stufen für die Ansicht zugänglich sind, beginnend beim Wert von baseMipLevel.

Wenn mipLevelCount weggelassen wird, erhält es den Wert GPUTexture.mipLevelCount - baseMipLevel.

swizzle Optional

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 swizzle zu verwenden, müssen Sie das Feature texture-component-swizzle in Ihrem GPUDevice aktivieren, indem Sie es im Array requiredFeatures des Deskriptors für GPUAdapter.requestDevice() angeben. Wenn dieses Feature nicht aktiviert ist, hat die Eigenschaft swizzle keine Wirkung.

usage Optional

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ür GPUTexture.usage aufgeführt.

Der Standardwert ist 0 und steht für die vollständige Menge der Nutzungs-Flags der Quelltextur. Wenn das format der 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:

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().

js
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.

js
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