GPUDevice: createSampler() 方法
GPUDevice
接口的 createSampler()
方法创建一个 GPUSampler
,它控制着着色器如何转换和过滤纹理资源数据。
语法
createSampler()
createSampler(descriptor)
参数
descriptor
可选-
包含以下属性的对象
addressModeU
可选-
一个枚举值,指定采样器在采样区域宽度超出纹理宽度时的行为。可能的值是
"clamp-to-edge"
: 纹理坐标被限制在 0.0 到 1.0 之间,包含边界值。"repeat"
: 纹理坐标会环绕到纹理的另一侧。"mirror-repeat"
: 纹理坐标会环绕到纹理的另一侧,但当坐标的整数部分为奇数时,纹理会翻转。
如果省略,
addressModeU
默认值为"clamp-to-edge"
。 addressModeV
可选-
一个枚举值,指定采样器在采样区域高度超出纹理高度时的行为。可能的值和默认值与
addressModeU
相同。 addressModeW
可选-
一个枚举值,指定采样器在采样区域深度超出纹理深度时的行为。可能的值和默认值与
addressModeU
相同。 compare
可选-
如果指定,采样器将成为指定类型的比较采样器。可能(枚举)的值是
"never"
: 比较测试永远不会通过。"less"
: 如果提供的值小于采样值,则通过比较测试。"equal"
: 如果提供的值等于采样值,则通过比较测试。"less-equal"
: 如果提供的值小于或等于采样值,则通过比较测试。"greater"
: 如果提供的值大于采样值,则通过比较测试。"not-equal"
: 如果提供的值不等于采样值,则通过比较测试。"greater-equal"
: 如果提供的值大于或等于采样值,则通过比较测试。"always"
: 比较测试总是通过。
比较采样器可以使用过滤,但采样结果将取决于实现,并且可能与正常的过滤规则不同。
label
可选-
一个字符串,提供一个标签,可以用于识别对象,例如在
GPUError
消息或控制台警告中。 lodMinClamp
可选-
一个数字,指定在采样纹理时内部使用的最小细节级别。如果省略,
lodMinClamp
默认值为 0。 lodMaxClamp
可选-
一个数字,指定在采样纹理时内部使用的最大细节级别。如果省略,
lodMaxClamp
默认值为 32。 maxAnisotropy
可选-
指定采样器使用的最大各向异性值限制。如果省略,
maxAnisotropy
默认值为 1。大多数实现支持 1 到 16 之间的
maxAnisotropy
值(包含边界值)。使用的值将被限制为底层平台支持的最大值。 magFilter
可选-
一个枚举值,指定在采样区域小于或等于一个纹素时的采样行为。可能的值是
"nearest"
: 返回最靠近纹理坐标的纹素的值。"linear"
: 在每个维度上选择两个纹素,并返回它们的值之间的线性插值。
如果省略,
magFilter
默认值为"nearest"
。 minFilter
可选-
一个枚举值,指定在采样区域大于一个纹素时的采样行为。可能的值和默认值与
magFilter
相同。 mipmapFilter
可选-
一个枚举值,指定在不同mipmap级别之间采样时的行为。可能的值和默认值与
magFilter
相同。
返回值
一个 GPUSampler
对象实例。
验证
调用 createSampler()
时必须满足以下条件,否则将生成 GPUValidationError
,并且将返回一个无效的 GPUSampler
对象
lodMinClamp
等于或大于 0。lodMaxClamp
等于或大于lodMinClamp
。maxAnisotropy
等于或大于 1。- 如果
maxAnisotropy
大于 1,则magFilter
、minFilter
和mipmapFilter
为"linear"
。
示例
以下代码片段创建一个执行三线性过滤并重复纹理坐标的 GPUSampler
// ...
const sampler = device.createSampler({
addressModeU: "repeat",
addressModeV: "repeat",
magFilter: "linear",
minFilter: "linear",
mipmapFilter: "linear",
});
WebGPU 采样 阴影映射示例 使用比较采样器从深度纹理中采样以渲染阴影。
规范
规范 |
---|
WebGPU # dom-gpudevice-createsampler |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。
另请参阅
- The WebGPU API