GPUDevice: createSampler() 方法

实验性: 这是一项 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文 (HTTPS) 中可用,并且在某些或所有 支持的浏览器 中可用。

GPUDevice 接口的 createSampler() 方法创建一个 GPUSampler,它控制着着色器如何转换和过滤纹理资源数据。

语法

js
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,则 magFilterminFiltermipmapFilter"linear"

示例

以下代码片段创建一个执行三线性过滤并重复纹理坐标的 GPUSampler

js
// ...

const sampler = device.createSampler({
  addressModeU: "repeat",
  addressModeV: "repeat",
  magFilter: "linear",
  minFilter: "linear",
  mipmapFilter: "linear",
});

WebGPU 采样 阴影映射示例 使用比较采样器从深度纹理中采样以渲染阴影。

规范

规范
WebGPU
# dom-gpudevice-createsampler

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅