102 lines
2.7 KiB
Markdown
102 lines
2.7 KiB
Markdown
# 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) - 创建设备
|