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) - 创建设备
|