import { trackCollectable } from "./debug.js"; import { objectId } from "./shared.js"; import type { GpuContext } from "./types.js"; export interface CreateSamplerOptions extends GPUSamplerDescriptor { /** Shorthand setting magFilter, minFilter and mipmapFilter at once. */ filter?: GPUFilterMode; /** Shorthand setting addressModeU/V/W at once. */ addressMode?: GPUAddressMode; } /** * Create a sampler: a thin alias for `device.createSampler` with filtering and * address mode shorthands. Returns a raw GPUSampler — samplers own no GPU * memory and need no dispose. * * ```js * const sampler = gpu.createSampler(ctx, { * filter: "linear", * addressMode: "repeat", * }); * ``` */ export function createSampler( ctx: GpuContext, options: CreateSamplerOptions = {}, ): GPUSampler { const { filter, addressMode, ...descriptor } = options; const sampler = ctx.device.createSampler({ ...(filter && { magFilter: filter, minFilter: filter, mipmapFilter: filter, }), ...(addressMode && { addressModeU: addressMode, addressModeV: addressMode, addressModeW: addressMode, }), ...descriptor, }); trackCollectable(ctx.device, "samplers", sampler, { id: objectId(sampler), ...(options.label && { label: options.label }), bytes: 0, }); return sampler; }