# OpenGLSampler OpenGL 采样器实现。 ## 头文件 ```cpp #include ``` ## 继承关系 ``` RHISampler (interface) └── OpenGLSampler (implementation) ``` ## 枚举 ### SamplerWrapMode | 值 | OpenGL 常量 | |----|-------------| | `Repeat` | `GL_REPEAT` | | `MirroredRepeat` | `GL_MIRRORED_REPEAT` | | `ClampToEdge` | `GL_CLAMP_TO_EDGE` | | `ClampToBorder` | `GL_CLAMP_TO_BORDER` | ### SamplerFilter | 值 | OpenGL 常量 | |----|-------------| | `Nearest` | `GL_NEAREST` | | `Linear` | `GL_LINEAR` | | `NearestMipmapNearest` | `GL_NEAREST_MIPMAP_NEAREST` | | `LinearMipmapNearest` | `GL_LINEAR_MIPMAP_NEAREST` | | `NearestMipmapLinear` | `GL_NEAREST_MIPMAP_LINEAR` | | `LinearMipmapLinear` | `GL_LINEAR_MIPMAP_LINEAR` | ### SamplerCompareMode | 值 | OpenGL 常量 | |----|-------------| | `None` | `GL_NONE` | | `CompareToRef` | `GL_COMPARE_REF_TO_TEXTURE` | ## OpenGLSamplerDesc ```cpp struct OpenGLSamplerDesc { SamplerFilter minFilter = SamplerFilter::LinearMipmapLinear; SamplerFilter magFilter = SamplerFilter::Linear; SamplerWrapMode wrapS = SamplerWrapMode::Repeat; SamplerWrapMode wrapT = SamplerWrapMode::Repeat; SamplerWrapMode wrapR = SamplerWrapMode::Repeat; SamplerCompareMode compareMode = SamplerCompareMode::None; int compareFunc = 0; float maxAnisotropy = 1.0f; float minLod = -1000.0f; float maxLod = 1000.0f; }; ``` ## 公共成员函数 #### `OpenGLSampler()` #### `~OpenGLSampler() override` #### `bool Initialize(const OpenGLSamplerDesc& desc)` #### `void Shutdown() override` #### `void Bind(unsigned int unit) override` #### `void Unbind(unsigned int unit) override` #### `unsigned int GetID() const` #### `void* GetNativeHandle() override` ## 内部成员 | 成员 | 类型 | 描述 | |------|------|------| | `m_sampler` | `unsigned int` | GL sampler ID | | `m_desc` | `OpenGLSamplerDesc` | 采样器描述 | ## 使用示例 ```cpp OpenGLSampler sampler; OpenGLSamplerDesc desc; desc.minFilter = SamplerFilter::LinearMipmapLinear; desc.magFilter = SamplerFilter::Linear; desc.wrapS = desc.wrapT = SamplerWrapMode::Repeat; desc.maxAnisotropy = 16.0f; sampler.Initialize(desc); sampler.Bind(0); glBindTextureUnit(0, texture.GetID()); ```