# OpenGLFence **命名空间**: `XCEngine::RHI` **描述**: OpenGL 栅栏同步实现,继承自 `RHIFence`。使用 OpenGL `GLsync` 对象实现 CPU-GPU 同步机制。 ## 概述 `OpenGLFence` 提供基于 OpenGL 同步对象(`GLsync`)的栅栏实现,用于 CPU-GPU 同步。当 GPU 完成特定操作后,栅栏会被设置为 signaled 状态,CPU 可以通过 `Wait` 方法等待该状态。 ### FenceStatus 枚举 ```cpp enum class FenceStatus { Signaled, // 栅栏已signaled,操作已完成 Unsignaled, // 栅栏未signaled,操作未完成 Error // 发生错误 }; ``` ### 私有成员 | 成员 | 类型 | 描述 | |------|------|------| | `m_sync` | `void*` | OpenGL GLsync 句柄 | | `m_fenceValue` | `uint64_t` | 当前栅栏值 | | `m_completedValue` | `uint64_t` | 已完成的栅栏值 | | `m_signaled` | `bool` | 软件层面的signaled状态标志 | ## 公共方法 | 方法 | 描述 | |------|------| | [`Initialize`](initialize.md) | 初始化栅栏,设置初始值和状态 | | [`Shutdown`](shutdown.md) | 关闭栅栏,释放 GLsync 资源 | | [`Signal`](signal.md) | 信号栅栏,创建/更新同步对象 | | [`Wait`](wait.md) | 等待栅栏达到 signaled 状态 | | [`Reset`](reset.md) | 重置栅栏,删除同步对象 | | [`IsSignaled`](is-signaled.md) | 检查软件层面的signaled状态 | | [`GetStatus`](get-status.md) | 获取 OpenGL 层面的同步状态 | | [`GetCompletedValue`](get-completed-value.md) | 获取已完成的栅栏值 | | [`GetCurrentValue`](get-current-value.md) | 获取当前栅栏值 | | [`GetNativeHandle`](get-native-handle.md) | 获取原生 GLsync 句柄 | ## 使用示例 ```cpp #include "XCEngine/RHI/OpenGL/OpenGLFence.h" using namespace XCEngine::RHI; // 创建并初始化栅栏 OpenGLFence fence; fence.Initialize(false); // 执行 GPU 操作后信号栅栏 fence.Signal(); // 等待栅栏,最多等待 1 秒 fence.Wait(1000000000); // 检查状态 if (fence.IsSignaled()) { // 操作已完成 } // 重置并复用 fence.Reset(); ``` ## 相关文档 - [OpenGL 后端总览](../opengl.md) - [RHIFence](../../fence/fence.md) - 抽象栅栏接口