Files
XCEngine/docs/api/rhi/rhi-sampler.md

102 lines
2.7 KiB
Markdown
Raw Normal View History

# RHISampler
**命名空间**: `XCEngine::RHI`
**类型**: `class` (abstract)
**描述**: GPU 纹理采样器抽象接口,用于配置纹理过滤和寻址模式。
## 概述
`RHISampler` 封装了纹理采样器的配置包括过滤模式、寻址模式、各向异性、mipmap 等设置。
## 公共方法
### 生命周期
| 方法 | 描述 |
|------|------|
| `virtual void Shutdown()` | 释放采样器资源 |
### 绑定/解绑
| 方法 | 描述 |
|------|------|
| `virtual void Bind(unsigned int unit)` | 绑定采样器到纹理单元 |
| `virtual void Unbind(unsigned int unit)` | 解绑采样器 |
### 属性访问
| 方法 | 描述 |
|------|------|
| `virtual void* GetNativeHandle()` | 获取原生 API 句柄 |
| `virtual unsigned int GetID()` | 获取采样器 ID |
## 采样器描述 (SamplerDesc)
| 成员 | 类型 | 描述 |
|------|------|------|
| `filter` | `uint32_t` | 过滤模式 |
| `addressU` | `uint32_t` | U 轴寻址模式 |
| `addressV` | `uint32_t` | V 轴寻址模式 |
| `addressW` | `uint32_t` | W 轴寻址模式 |
| `mipLodBias` | `float` | Mipmap 级别偏移 |
| `maxAnisotropy` | `uint32_t` | 最大各向异性级别 |
| `comparisonFunc` | `uint32_t` | 比较函数 |
| `borderColorR` | `float` | 边框颜色 R |
| `borderColorG` | `float` | 边框颜色 G |
| `borderColorB` | `float` | 边框颜色 B |
| `borderColorA` | `float` | 边框颜色 A |
| `minLod` | `float` | 最小 Mipmap 级别 |
| `maxLod` | `float` | 最大 Mipmap 级别 |
## 过滤模式 (FilterMode)
| 枚举值 | 描述 |
|--------|------|
| `Point` | 点采样 |
| `Linear` | 双线性插值 |
| `Anisotropic` | 各向异性过滤 |
| `ComparisonPoint` | 带比较的点采样 |
| `ComparisonLinear` | 带比较的双线性插值 |
| `ComparisonAnisotropic` | 带比较的各向异性 |
## 寻址模式 (TextureAddressMode)
| 枚举值 | 描述 |
|--------|------|
| `Wrap` | 重复寻址 |
| `Mirror` | 镜像寻址 |
| `Clamp` | 钳制寻址 |
| `Border` | 边框颜色寻址 |
| `MirrorOnce` | 单次镜像 |
## 使用示例
```cpp
// 创建采样器
SamplerDesc samplerDesc;
samplerDesc.filter = (uint32_t)FilterMode::Anisotropic;
samplerDesc.addressU = (uint32_t)TextureAddressMode::Wrap;
samplerDesc.addressV = (uint32_t)TextureAddressMode::Wrap;
samplerDesc.addressW = (uint32_t)TextureAddressMode::Wrap;
samplerDesc.maxAnisotropy = 16;
samplerDesc.minLod = 0;
samplerDesc.maxLod = FLT_MAX;
samplerDesc.mipLodBias = 0;
samplerDesc.comparisonFunc = (uint32_t)ComparisonFunc::Never;
RHISampler* sampler = device->CreateSampler(samplerDesc);
// 绑定到纹理单元 0
sampler->Bind(0);
// 解绑
sampler->Unbind(0);
```
## 相关文档
- [RHITexture](./rhi-texture.md) - 纹理资源
- [RHIDevice](./rhi-device.md) - 创建设备