Files
XCEngine/docs/api/rhi/opengl/fence/get-status.md
2026-03-20 02:35:45 +08:00

51 lines
1.3 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::GetStatus
```cpp
FenceStatus GetStatus() const;
```
获取栅栏的当前状态。
## 详细描述
此方法查询 OpenGL 同步对象的实际状态:
1. 如果 `m_sync``nullptr`,返回软件层面的 `m_signaled` 状态
2. 如果 `m_sync` 存在,调用 `glGetSynciv(sync, GL_SYNC_STATUS, ...)` 查询 OpenGL 状态
3. 根据 `GL_SYNC_STATUS` 返回 `FenceStatus::Signaled``FenceStatus::Unsignaled`
`IsSignaled()` 的区别:
- `GetStatus()`:查询 OpenGL 同步对象状态,更准确但有 GPU 开销
- `IsSignaled()`:返回软件标志,快速但不反映 GPU 实际状态
## 参数
## 返回值
| 类型 | 描述 |
|------|------|
| `FenceStatus` | 栅栏状态,值为以下之一: |
| | `FenceStatus::Signaled` - 栅栏已signaledGPU 操作已完成 |
| | `FenceStatus::Unsignaled` - 栅栏未signaledGPU 操作未完成 |
| | `FenceStatus::Error` - 此实现不会返回此值(错误处理在底层) |
## 示例
```cpp
OpenGLFence fence;
fence.Initialize(false);
fence.Signal();
FenceStatus status = fence.GetStatus();
if (status == FenceStatus::Signaled) {
// GPU 操作已完成
}
```
## 相关文档
- [OpenGLFence 总览](fence.md) - 返回类总览
- [IsSignaled](is-signaled.md) - 快速状态检查