51 lines
1.3 KiB
Markdown
51 lines
1.3 KiB
Markdown
# 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` - 栅栏已signaled,GPU 操作已完成 |
|
||
| | `FenceStatus::Unsignaled` - 栅栏未signaled,GPU 操作未完成 |
|
||
| | `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) - 快速状态检查
|