createSampler method

GpuSampler createSampler({
  1. GpuFilterMode magFilter = GpuFilterMode.linear,
  2. GpuFilterMode minFilter = GpuFilterMode.linear,
  3. GpuFilterMode mipmapFilter = GpuFilterMode.nearest,
  4. GpuAddressMode addressMode = GpuAddressMode.clampToEdge,
  5. GpuAddressMode? addressModeU,
  6. GpuAddressMode? addressModeV,
  7. GpuAddressMode? addressModeW,
  8. GpuCompareFunction? compare,
  9. double lodMinClamp = 0.0,
  10. double lodMaxClamp = 32.0,
  11. int maxAnisotropy = 1,
  12. String label = '',
})

compare makes this a comparison sampler (WGSL sampler_comparison — bind with GpuSamplerBindingType.comparison). maxAnisotropy > 1 needs all filters linear.

Implementation

GpuSampler createSampler({
  GpuFilterMode magFilter = GpuFilterMode.linear,
  GpuFilterMode minFilter = GpuFilterMode.linear,
  GpuFilterMode mipmapFilter = GpuFilterMode.nearest,
  GpuAddressMode addressMode = GpuAddressMode.clampToEdge,
  GpuAddressMode? addressModeU,
  GpuAddressMode? addressModeV,
  GpuAddressMode? addressModeW,
  GpuCompareFunction? compare,
  double lodMinClamp = 0.0,
  double lodMaxClamp = 32.0,
  int maxAnisotropy = 1,
  String label = '',
}) {
  _checkAlive();
  final address = NitroWebgpu.instance.deviceCreateSampler(
    _address,
    GpuSamplerDescriptor(
      label: label,
      magFilter: magFilter.raw,
      minFilter: minFilter.raw,
      mipmapFilter: mipmapFilter.raw,
      addressModeU: (addressModeU ?? addressMode).raw,
      addressModeV: (addressModeV ?? addressMode).raw,
      addressModeW: (addressModeW ?? addressMode).raw,
      compare: compare?.raw ?? 0,
      lodMinClamp: lodMinClamp,
      lodMaxClamp: lodMaxClamp,
      maxAnisotropy: maxAnisotropy,
    ),
  );
  return GpuSampler._(address);
}