# OpenGLDescriptorSet::Bind ```cpp void Bind() override; ``` ## 作用 按照“直接使用声明 binding 编号”的规则,把当前 set 中缓存的资源绑定到 OpenGL 全局状态。 ## 前置条件 - 需要已经通过 [`Initialize`](Initialize.md) 完成布局初始化。 - 如果要绑定纹理或采样器,通常应先调用 [`Update`](Update.md) / [`UpdateSampler`](UpdateSampler.md)。 - 如果要绑定常量缓冲,通常应先调用 [`WriteConstant`](WriteConstant.md)。 ## 当前实现行为 - 如果常量数据处于 dirty 状态,会先创建或更新内部 UBO。 - 对每个 `CBV` binding,调用 `glBindBufferBase(GL_UNIFORM_BUFFER, binding + i, m_constantBuffer)`。 - 对 `SRV` / `UAV` / `Sampler`,使用初始化时申请的 texture unit 逐个绑定。 - 普通纹理路径统一调用 `glBindTexture(GL_TEXTURE_2D, textureId)`。 - 绑定完成后将内部 `m_bound` 置为 `true`。 ## 失败与限制 - 此路径不会参考 [`OpenGLPipelineLayout`](../OpenGLPipelineLayout/OpenGLPipelineLayout.md) 的重映射。 - `UAV` 在该函数里并不走 `glBindImageTexture()`,更适合兼容旧式直接 binding 编号的调用方式。 - 不会验证 shader 当前是否真的使用了这些 binding。 ## 相关文档 - [BindWithPipelineLayout](BindWithPipelineLayout.md) - [Unbind](Unbind.md) - [WriteConstant](WriteConstant.md)