Files
RobustToolbox/Robust.Client.Graphics.Rhi/WebGpu/RhiWebGpu.Sampler.cs
PJB3005 b7a3526131 Move RHI to its own project
Move some of Robust.Shared to a new project so it can be depended upon without adding longer dependency chains.
2025-10-07 18:18:48 +02:00

53 lines
2.0 KiB
C#

namespace Robust.Client.Graphics.Rhi.WebGpu;
internal sealed unsafe partial class RhiWebGpu
{
private readonly Dictionary<RhiHandle, SamplerReg> _samplerRegistry = new();
public override RhiSampler CreateSampler(in RhiSamplerDescriptor descriptor)
{
var addressModeU = ValidateAddressMode(descriptor.AddressModeU);
var addressModeV = ValidateAddressMode(descriptor.AddressModeV);
var addressModeW = ValidateAddressMode(descriptor.AddressModeW);
var magFilter = ValidateFilterMode(descriptor.MagFilter);
var minFilter = ValidateFilterMode(descriptor.MinFilter);
var mipmapFilter = ValidateMipmapFilterMode(descriptor.MipmapFilter);
var compare = ValidateCompareFunction(descriptor.Compare);
WGPUSampler sampler;
fixed (byte* label = MakeLabel(descriptor.Label))
{
var samplerDesc = new WGPUSamplerDescriptor
{
addressModeU = (WGPUAddressMode) addressModeU,
addressModeV = (WGPUAddressMode) addressModeV,
addressModeW = (WGPUAddressMode) addressModeW,
magFilter = (WGPUFilterMode) magFilter,
minFilter = (WGPUFilterMode) minFilter,
mipmapFilter = (WGPUMipmapFilterMode) mipmapFilter,
lodMinClamp = descriptor.LodMinClamp,
lodMaxClamp = descriptor.LodMaxClamp,
compare = (WGPUCompareFunction) compare,
maxAnisotropy = descriptor.MaxAnisotropy,
label = new WGPUStringView
{
data = (sbyte*)label,
length = WGPU_STRLEN
}
};
sampler = wgpuDeviceCreateSampler(_wgpuDevice, &samplerDesc);
}
// TODO: Thread safety
var handle = AllocRhiHandle();
_samplerRegistry.Add(handle, new SamplerReg { Native = sampler });
return new RhiSampler(this, handle);
}
private sealed class SamplerReg
{
public WGPUSampler Native;
}
}