Files
XCEngine/docs/api/XCEngine/RHI/OpenGL/OpenGLSampler/OpenGLSampler.md

66 lines
2.4 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.
# OpenGLSampler
**命名空间**: `XCEngine::RHI`
**类型**: `class`
**头文件**: `XCEngine/RHI/OpenGL/OpenGLSampler.h`
**描述**: OpenGL 后端的独立 sampler object 封装用于保存过滤、寻址、LOD、比较采样和边框颜色等采样状态。
## 概览
`OpenGLSampler` 是当前后端里少数真正对应 OpenGL 原生对象的资源包装器之一。它的意义和现代图形 API 里的独立采样器对象一致:
- 纹理数据与采样状态解耦
- 同一张纹理可以复用不同采样策略
- descriptor set / resource binding 层更容易和 D3D12 / Vulkan 对齐
这类设计在商业引擎里非常常见,因为它能让“材质要什么采样方式”和“纹理本身存了什么像素数据”保持分离。
## 当前实现的真实行为
- [Initialize](Initialize.md) 会创建真实的 sampler object并立即写入全部采样参数
- [Bind](Bind.md) / [Unbind](Unbind.md) 直接作用于指定纹理单元
- [GetID](GetID.md) 返回 OpenGL sampler 对象名
- 析构函数为空实现,不自动 [Shutdown](Shutdown.md)
- 设备创建路径 `OpenGLDevice::CreateSampler(...)` 会先把通用 `SamplerDesc` 转成 `OpenGLSamplerDesc`
- `OpenGLDescriptorSet` 更新 sampler 时,会读取 `GetID()` 存下底层 sampler ID
## 设计背景
把 sampler 独立成对象有两个现实收益:
- 一张纹理可以被多个材质以不同过滤/寻址方式复用
- 跨后端 RHI 不必因为 OpenGL 而退化回“把采样参数写死在纹理对象里”的旧式接口
这也是商业级引擎常见的抽象路线:高层接口尽量保持现代资源模型,后端尽量映射到平台支持的最接近对象。
## 生命周期
- [OpenGLSampler()](Constructor.md) 初始化 `m_sampler = 0`
- [Initialize](Initialize.md) 创建原生 sampler object
- [Bind](Bind.md) 把它绑定到某个纹理单元
- [Shutdown](Shutdown.md) 删除 sampler object
## 重要限制
- 析构不自动释放原生 sampler
- 初始化没有显式错误检测
- 各向异性和比较采样能力依赖运行环境支持
- 直接使用 `OpenGLSamplerDesc` 时,调用方需要自己保证参数组合适合 OpenGL
## 关键方法
- [Initialize](Initialize.md)
- [Bind](Bind.md)
- [Unbind](Unbind.md)
- [GetID](GetID.md)
- [Shutdown](Shutdown.md)
## 相关文档
- [OpenGLDescriptorSet](../OpenGLDescriptorSet/OpenGLDescriptorSet.md)
- [OpenGLTexture](../OpenGLTexture/OpenGLTexture.md)
- [OpenGLDevice](../OpenGLDevice/OpenGLDevice.md)