GPUDevice: createTexture() 方法
注意:此功能在 Web Workers 中可用。
GPUDevice 介面的 createTexture() 方法建立一個 GPUTexture,用於儲存 1D、2D 或 3D 資料陣列(例如影像),以便在 GPU 渲染操作中使用。
語法
createTexture(descriptor)
引數
描述符(descriptor)-
包含以下屬性的物件:
dimension可選-
一個列舉值,指示紋理的維度級別。可能的值是:
"1d":紋理是一維的。"2d":紋理是二維的,或者是一個二維圖層的陣列。"3d":紋理是三維的。
如果省略
dimension的值,則預設為"2d"。 格式(format)-
一個指定紋理格式的列舉值。有關所有可能值的詳細資訊,請參閱規範的 Texture formats 部分。
備註
- 要建立
depth32float-stencil8格式的GPUTexture,需要啟用depth32float-stencil8功能。 - 要建立二維(
dimension: "2d")BC 壓縮的GPUTexture,需要啟用texture-compression-bc功能: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和bc7-rgba-unorm-srgb格式。 - 要建立三維 BC 壓縮的
GPUTexture,需要啟用texture-compression-bc和texture-compression-bc-sliced-3d功能(與上一個專案符號中指定的format值相同,但dimension設定為3d)。 - 要建立二維(
dimension: "2d")ASTC 壓縮的GPUTexture,需要啟用texture-compression-astc功能: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和astc-12x12-unorm-srgb格式。 - 要建立三維 BC 壓縮的
GPUTexture,需要啟用texture-compression-astc和texture-compression-astc-sliced-3d功能(與上一個專案符號中指定的format值相同,但dimension設定為3d)。 - 要建立二維 ETC2 壓縮的
GPUTexture,需要啟用texture-compression-etc2功能:etc2-rgb8unorm、etc2-rgb8unorm-srgb、etc2-rgb8a1unorm、etc2-rgb8a1unorm-srgb、etc2-rgba8unorm、etc2-rgba8unorm-srgb、eac-r11unorm、eac-r11snorm、eac-rg11unorm和eac-rg11snorm格式。
- 要建立
label可選-
一個字串,提供可用於識別物件的標籤,例如在
GPUError訊息或控制檯警告中。 mipLevelCount可選-
一個數字,指定紋理將包含的 mipmap 級別數。如果省略,則預設為 1。
sampleCount可選-
一個數字,指定紋理的取樣數。有效值必須是 1 或 4。如果省略,則預設為 1。大於 1 的值表示多重取樣紋理。
size-
一個物件或陣列,指定紋理的寬度、高度和深度/陣列層數。寬度值必須始終指定,而高度和深度/陣列層數是可選的,如果省略則預設為 1。
例如,您可以傳遞一個數組,如
[16, 16, 2],或等效的物件{ width: 16, height: 16, depthOrArrayLayers: 2 }。 usage-
表示
GPUTexture允許用途的按位標誌。可能的值在GPUTexture.usage值表 中。請注意,可以透過使用按位 OR 分隔值來指定多個可能的用途,例如:
GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT。備註
- 要為
bgra8unorm-formatGPUTexture指定STORAGE_BINDING用途,需要啟用bgra8unorm-storage功能。 - 要為
rg11b10ufloat-formatGPUTexture指定RENDER_ATTACHMENT用途,以及其混合和多重取樣,需要啟用rg11b10ufloat-renderable功能。
- 要為
viewFormats可選-
一個列舉值陣列,指定在呼叫此紋理的
GPUTexture.createView()時允許使用的其他 紋理格式,除了在其format值中指定的紋理格式之外。
返回值
一個 GPUTexture 物件例項。
驗證
呼叫 createTexture() 時必須滿足以下條件,否則會生成 GPUValidationError 並返回一個無效的 GPUTexture 物件:
- 指定了一個有效的
usage。 size中指定的值(寬度、高度或深度/陣列層數)大於 0。mipLevelCount大於 0。sampleCount等於 1 或 4。- 如果
dimension設定為"1d": - 如果
dimension設定為"2d": - 如果
dimension設定為"3d": size的寬度值是 texel 塊寬度 的倍數。size的高度值是 texel 塊高度 的倍數。- 如果
sampleCount大於 1:mipLevelCount等於 1。size的深度/陣列層數的值等於 1。usage包含GPUTextureUsage.RENDER_ATTACHMENT標誌。usage不包含GPUTextureUsage.STORAGE_BINDING標誌。- 指定的格式支援多重取樣。
mipLevelCount的值小於或等於 最大 mipmap 級別數。format和viewFormats中指定的格式彼此相容。- 如果
usage包含GPUTextureUsage.RENDER_ATTACHMENT標誌:format是一個可渲染格式(即顏色可渲染格式,或 深度或模板格式)。dimension設定為"2d"。
- 如果
usage包含GPUTextureUsage.STORAGE_BINDING標誌:- 指定的
format包含STORAGE_BINDING功能(有關參考,請參閱 Plain color formats 表)。
- 指定的
示例
在 WebGPU 示例 Textured Cube sample 中,透過以下步驟建立用於立方體面的紋理:
- 將影像載入到
HTMLImageElement中,並使用createImageBitmap()建立一個影像點陣圖。 - 使用
createTexture()建立一個新紋理。 - 使用
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],
);
}
// …
規範
| 規範 |
|---|
| WebGPU # dom-gpudevice-createtexture |
瀏覽器相容性
載入中…