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

2.4 KiB
Raw Blame History

OpenGLSampler

命名空间: XCEngine::RHI

类型: class

头文件: XCEngine/RHI/OpenGL/OpenGLSampler.h

描述: OpenGL 后端的独立 sampler object 封装用于保存过滤、寻址、LOD、比较采样和边框颜色等采样状态。

概览

OpenGLSampler 是当前后端里少数真正对应 OpenGL 原生对象的资源包装器之一。它的意义和现代图形 API 里的独立采样器对象一致:

  • 纹理数据与采样状态解耦
  • 同一张纹理可以复用不同采样策略
  • descriptor set / resource binding 层更容易和 D3D12 / Vulkan 对齐

这类设计在商业引擎里非常常见,因为它能让“材质要什么采样方式”和“纹理本身存了什么像素数据”保持分离。

当前实现的真实行为

  • Initialize 会创建真实的 sampler object并立即写入全部采样参数
  • Bind / Unbind 直接作用于指定纹理单元
  • GetID 返回 OpenGL sampler 对象名
  • 析构函数为空实现,不自动 Shutdown
  • 设备创建路径 OpenGLDevice::CreateSampler(...) 会先把通用 SamplerDesc 转成 OpenGLSamplerDesc
  • OpenGLDescriptorSet 更新 sampler 时,会读取 GetID() 存下底层 sampler ID

设计背景

把 sampler 独立成对象有两个现实收益:

  • 一张纹理可以被多个材质以不同过滤/寻址方式复用
  • 跨后端 RHI 不必因为 OpenGL 而退化回“把采样参数写死在纹理对象里”的旧式接口

这也是商业级引擎常见的抽象路线:高层接口尽量保持现代资源模型,后端尽量映射到平台支持的最接近对象。

生命周期

重要限制

  • 析构不自动释放原生 sampler
  • 初始化没有显式错误检测
  • 各向异性和比较采样能力依赖运行环境支持
  • 直接使用 OpenGLSamplerDesc 时,调用方需要自己保证参数组合适合 OpenGL

关键方法

相关文档