GPUDevice: createSampler() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

createSampler() 方法是 GPUDevice 介面的一部分,用於建立一個 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 可選

一個列舉值,指定當取樣足跡小於或等於一個紋理單元(texel)時取樣行為。可能的值有:

  • "nearest":返回最接近紋理座標的紋理單元的值。
  • "linear":在每個維度上選擇兩個紋理單元,並返回它們值之間的線性插值。

如果省略,magFilter 預設為 "nearest"

注意: 為了使 r32floatrg32floatrgba32float formatGPUTexture 可過濾,需要啟用 float32-filterable 功能

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

瀏覽器相容性

另見