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

102 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) - 创建设备