- 新增 RHIFence 抽象基类 - D3D12Fence 继承 RHIFence - OpenGLFence 继承 RHIFence - 文档更新 RHIFence 差异处理策略
46 lines
885 B
C++
46 lines
885 B
C++
#pragma once
|
|
|
|
#include <GLFW/glfw3.h>
|
|
#include <cstdint>
|
|
|
|
#include "../RHIFence.h"
|
|
|
|
namespace XCEngine {
|
|
namespace RHI {
|
|
|
|
enum class FenceStatus {
|
|
Signaled,
|
|
Unsignaled,
|
|
Error
|
|
};
|
|
|
|
class OpenGLFence : public RHIFence {
|
|
public:
|
|
OpenGLFence();
|
|
~OpenGLFence() override;
|
|
|
|
bool Initialize(bool signaled = false);
|
|
void Shutdown() override;
|
|
|
|
void Signal() override;
|
|
void Signal(uint64_t value) override;
|
|
void Wait(uint64_t value) override;
|
|
void Reset();
|
|
|
|
bool IsSignaled() const override;
|
|
FenceStatus GetStatus() const;
|
|
uint64_t GetCompletedValue() const override;
|
|
uint64_t GetCurrentValue() const { return m_fenceValue; }
|
|
|
|
void* GetNativeHandle() override { return m_sync; }
|
|
|
|
private:
|
|
void* m_sync;
|
|
uint64_t m_fenceValue;
|
|
uint64_t m_completedValue;
|
|
bool m_signaled;
|
|
};
|
|
|
|
} // namespace RHI
|
|
} // namespace XCEngine
|