Files
XCEngine/docs/api/rhi/opengl/fence/fence.md
ssdfasd 1cf744b755 refactor(docs): RHI模块文档重构 - 修复18处链接错误并新增RHIFramebuffer/RHIRenderPass文档
- 修复opengl/下13个文件对overview.md的错误引用,改为opengl.md
- 修复opengl/shader/下2处get-native-handle.md的错误路径引用
- 修复rhi.md中rhifactory路径错误
- 修复opengl.md中对d3d12.md的错误引用
- 修复opengl/README.md中的overview.md引用
- 新增RHIFramebuffer完整文档(7个文件)
- 新增RHIRenderPass完整文档(7个文件)
- 更新rhi.md总览页,添加RHIFramebuffer和RHIRenderPass分类
2026-03-26 01:29:00 +08:00

75 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) - 抽象栅栏接口