GPUTexture: createView() method
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Phương thức createView() của giao diện GPUTexture tạo một GPUTextureView đại diện cho một view cụ thể của GPUTexture.
Cú pháp
createView()
createView(descriptor)
Tham số
descriptorOptional-
Một đối tượng chứa các thuộc tính sau:
arrayLayerCountOptional-
Một số xác định bao nhiêu lớp mảng có thể truy cập qua view, bắt đầu từ giá trị
baseArrayLayer.Nếu
arrayLayerCountbị bỏ qua, nó được gán giá trị như sau:- Nếu
dimensionlà"1d","2d"hoặc"3d",arrayLayerCountlà 1. - Nếu
dimensionlà"cube",arrayLayerCountlà 6. - Nếu
dimensionlà"2d-array"hoặc"cube-array",arrayLayerCountlàGPUTexture.depthOrArrayLayers-baseArrayLayer.
- Nếu
aspectOptional-
Một giá trị liệt kê chỉ định (các) khía cạnh của kết cấu có thể truy cập qua texture view. Các giá trị có thể là:
"all"-
Tất cả các khía cạnh có sẵn của định dạng kết cấu sẽ có thể truy cập qua view, có thể là tất cả hoặc bất kỳ trong số màu sắc, độ sâu và stencil, tùy thuộc vào loại định dạng đang sử dụng.
"depth-only"-
Chỉ khía cạnh độ sâu của định dạng depth-or-stencil có thể truy cập qua view.
"stencil-only"-
Chỉ khía cạnh stencil của định dạng depth-or-stencil có thể truy cập qua view.
Nếu bị bỏ qua,
aspectnhận giá trị"all". baseArrayLayerOptional-
Một số xác định chỉ số của lớp mảng đầu tiên có thể truy cập qua view. Nếu bị bỏ qua,
baseArrayLayernhận giá trị 0. baseMipLevelOptional-
Một số đại diện cho mipmap level đầu tiên (chi tiết nhất) có thể truy cập qua view. Nếu bị bỏ qua,
baseMipLevelnhận giá trị 0. dimensionOptional-
Một giá trị liệt kê chỉ định định dạng để xem kết cấu. Các giá trị có thể là:
"1d": Kết cấu được xem như hình ảnh một chiều."2d": Kết cấu được xem như hình ảnh hai chiều đơn."2d-array": Kết cấu được xem như mảng hình ảnh hai chiều."cube": Kết cấu được xem như cubemap. View có 6 lớp mảng, tương ứng với các mặt[+X, -X, +Y, -Y, +Z, -Z]của hình khối. Lấy mẫu được thực hiện liền mạch qua các mặt của cubemap."cube-array": Kết cấu được xem như mảng gói N cubemap, mỗi cubemap có 6 lớp mảng tương ứng với các mặt[+X, -X, +Y, -Y, +Z, -Z]của hình khối. Lấy mẫu được thực hiện liền mạch qua các mặt của cubemap."3d": Kết cấu được xem như hình ảnh ba chiều.
Nếu
dimensionbị bỏ qua, nó được gán giá trị như sau:- Nếu
GPUTexture.dimensionlà"1d",dimensionlà"1d". - Nếu
GPUTexture.dimensionlà"2d"vàGPUTexture.depthOrArrayLayerslà 1,dimensionlà"2d". - Nếu
GPUTexture.dimensionlà"2d"vàGPUTexture.depthOrArrayLayerslớn hơn 1,dimensionlà"2d-array". - Nếu
GPUTexture.dimensionlà"3d",dimensionlà"3d".
formatOptional-
Một giá trị liệt kê chỉ định định dạng của texture view. Xem phần Texture formats của thông số kỹ thuật để biết tất cả các giá trị có thể.
Nếu
formatbị bỏ qua, nó sẽ được gán giá trị như sau:- Nếu
aspectlà"depth-only"hoặc"stencil-only", vàGPUTexture.formatlà định dạng depth-or-stencil,formatsẽ được đặt bằng định dạng dành riêng cho khía cạnh tương ứng. - Nếu không, nó sẽ được đặt bằng
GPUTexture.format.
- Nếu
labelOptional-
Một chuỗi cung cấp nhãn có thể dùng để nhận diện đối tượng, ví dụ trong thông báo
GPUErrorhoặc cảnh báo console. mipLevelCountOptional-
Một số xác định bao nhiêu mipmap level có thể truy cập qua view, bắt đầu từ giá trị
baseMipLevel.Nếu
mipLevelCountbị bỏ qua, nó sẽ được gán giá trịGPUTexture.mipLevelCount-baseMipLevel. swizzleOptional-
Một chuỗi chứa bốn ký tự. Vị trí của mỗi ký tự ánh xạ tương ứng với giá trị kênh đỏ, xanh lá, xanh dương và alpha của texture view. Giá trị của mỗi ký tự chỉ định giá trị mà mỗi kênh đó sẽ nhận khi view được truy cập bởi shader. Các giá trị có thể là:
r-
Giá trị kênh đỏ của kết cấu.
g-
Giá trị kênh xanh lá của kết cấu.
b-
Giá trị kênh xanh dương của kết cấu.
a-
Giá trị kênh alpha của kết cấu.
0-
Áp đặt giá trị
0. 1-
Áp đặt giá trị
1.
Ví dụ,
swizzle: "grba"sẽ khiến giá trị kênh đỏ và xanh lá của kết cấu bị hoán đổi khi shader truy cập view. Tính năng swizzle thành phần kết cấu cho phép nhà phát triển tối ưu hóa hiệu suất, sửa lỗi thứ tự thành phần và tái sử dụng code shader trên các định dạng kết cấu khác nhau khi lấy mẫu kết cấu.Note: Để sử dụng thuộc tính
swizzle, bạn phải kích hoạt tính năngtexture-component-swizzlefeature trongGPUDevicebằng cách chỉ định nó trong mảngrequiredFeaturescủa descriptorGPUAdapter.requestDevice(). Nếu tính năng này không được kích hoạt, thuộc tínhswizzlesẽ không có tác dụng. usageOptional-
Một tập hợp bitwise flags đại diện cho tập con các cờ sử dụng của kết cấu nguồn (có sẵn trong thuộc tính
GPUTexture.usage) tương thích với định dạng view đã chọn. Có thể dùng để giới hạn việc sử dụng view được phép trong các trường hợp định dạng view không tương thích với một số cách sử dụng nhất định. Các cờ sử dụng có sẵn được liệt kê trong bảng giá trịGPUTexture.usage.Giá trị mặc định là
0, đại diện cho toàn bộ tập hợp cờ sử dụng của kết cấu nguồn. Nếuformatcủa view không hỗ trợ tất cả các cách sử dụng của kết cấu, giá trị mặc định sẽ thất bại và phải chỉ định rõ ràng cách sử dụng của view.
Giá trị trả về
Một thực thể đối tượng GPUTextureView.
Xác thực
Các tiêu chí sau phải được đáp ứng khi gọi createView(), nếu không một GPUValidationError sẽ được tạo ra và trả về một đối tượng GPUTextureView không hợp lệ:
- Nếu
aspectlà"all",formatbằngGPUTexture.formathoặc một trong cácviewFormatsđược chỉ định trong đối tượng descriptor của lời gọiGPUDevice.createTexture()ban đầu. - Nếu
aspectlà"depth-only"hoặc"stencil-only",formatbằng định dạng dành riêng cho khía cạnh tương ứng của định dạng depth-or-stencil. mipLevelCountlớn hơn 0.mipLevelCount+baseMipLevelnhỏ hơn hoặc bằngGPUTexture.mipLevelCount.arrayLayerCountlớn hơn 0.arrayLayerCount+baseArrayLayernhỏ hơn hoặc bằngGPUTexture.depthOrArrayLayersnếuGPUTexture.dimensionlà"2d", hoặc nhỏ hơn hoặc bằng 1 nếuGPUTexture.dimensionlà"1d"hoặc"3d".- Nếu
sampleCountlớn hơn 1,dimensionlà"2d". - Nếu
dimensionlà:"1d"GPUTexture.dimensionlà"1d"arrayLayerCountlà 1
"2d"GPUTexture.dimensionlà"2d"arrayLayerCountlà 1
"2d-array"GPUTexture.dimensionlà"2d"
"cube"GPUTexture.dimensionlà"2d"arrayLayerCountlà 6GPUTexture.widthbằngGPUTexture.height
"cube-array"GPUTexture.dimensionlà"2d"arrayLayerCountlà bội số của 6GPUTexture.widthbằngGPUTexture.height
"3d"GPUTexture.dimensionlà"3d"arrayLayerCountlà 1
formatcủa view hỗ trợ tất cả các cách sử dụng được chỉ định trong thuộc tínhusage.
Ví dụ
>Cách dùng createView() điển hình
Trong mẫu WebGPU Samples Cubemap demo, bạn sẽ thấy nhiều ví dụ về cách createView() được sử dụng, cả để tạo resource view cho lời gọi GPUDevice.createBindGroup(), và để cung cấp view trong đối tượng depthStencilAttachment của descriptor 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: GPURenderPassDescriptor = {
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() với giới hạn usage
Trong đoạn code này, chúng ta tạo một kết cấu rồi tạo một view có usage bị giới hạn thông qua thuộc tính usage.
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
});
Thông số kỹ thuật
| Specification |
|---|
| WebGPU> # dom-gputexture-createview> |