# OpenGLFence::Wait ```cpp void Wait(uint64_t timeoutNs) override; ``` 等待栅栏达到 signaled 状态或超时。 ## 详细描述 此方法尝试等待 `m_sync`(OpenGL 同步对象)变为 signaled 状态: - **未信号或无同步对象**:直接调用 `glFinish()` 阻塞 CPU,直到 GPU 完成所有命令,然后将 `m_completedValue` 更新为 `m_fenceValue` - **已信号状态**:调用 `glClientWaitSync()` 尝试获取同步状态,支持超时 - **timeout = 0**:立即返回,不阻塞 内部使用 `GL_SYNC_FLUSH_COMMANDS_BIT` 标志确保客户端命令已刷新。 ## 参数 | 参数 | 类型 | 描述 | |------|------|------| | `timeoutNs` | `uint64_t` | 超时时间,以纳秒为单位。为 `0` 时立即返回 | ## 返回值 无 ## 示例 ```cpp OpenGLFence fence; fence.Initialize(false); fence.Signal(); // 等待最多 1 秒 (1000000000 ns) fence.Wait(1000000000); // 等待最多 100 毫秒 fence.Wait(100000000); // timeout = 0 立即返回 fence.Wait(0); ``` ## 相关文档 - [OpenGLFence 总览](fence.md) - 返回类总览 - [Signal](signal.md) - 信号栅栏 - [IsSignaled](is-signaled.md) - 非阻塞检查状态