From aee4ae88db183ead7224b4d4b851b33f4ee17ab1 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Mon, 16 Mar 2026 18:48:12 +0800 Subject: [PATCH] Add OpenGLFence --- engine/CMakeLists.txt | 2 + .../include/XCEngine/RHI/OpenGL/OpenGLFence.h | 30 +++++++++++++ engine/src/RHI/OpenGL/OpenGLFence.cpp | 43 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 engine/include/XCEngine/RHI/OpenGL/OpenGLFence.h create mode 100644 engine/src/RHI/OpenGL/OpenGLFence.cpp diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 5bbdbd33..6c92b268 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -134,6 +134,7 @@ add_library(XCEngine STATIC include/XCEngine/RHI/OpenGL/OpenGLPipelineState.h include/XCEngine/RHI/OpenGL/OpenGLCommandList.h include/XCEngine/RHI/OpenGL/OpenGLSwapChain.h + include/XCEngine/RHI/OpenGL/OpenGLFence.h src/RHI/OpenGL/OpenGLDevice.cpp src/RHI/OpenGL/OpenGLShader.cpp src/RHI/OpenGL/OpenGLBuffer.cpp @@ -142,6 +143,7 @@ add_library(XCEngine STATIC src/RHI/OpenGL/OpenGLPipelineState.cpp src/RHI/OpenGL/OpenGLCommandList.cpp src/RHI/OpenGL/OpenGLSwapChain.cpp + src/RHI/OpenGL/OpenGLFence.cpp ) target_include_directories(XCEngine PUBLIC diff --git a/engine/include/XCEngine/RHI/OpenGL/OpenGLFence.h b/engine/include/XCEngine/RHI/OpenGL/OpenGLFence.h new file mode 100644 index 00000000..12e7d7dc --- /dev/null +++ b/engine/include/XCEngine/RHI/OpenGL/OpenGLFence.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +namespace XCEngine { +namespace RHI { + +class OpenGLFence { +public: + OpenGLFence(); + ~OpenGLFence(); + + bool Initialize(); + void Shutdown(); + + void Signal(); + void Wait(); + void Reset(); + + bool IsSignaled() const; + +private: + unsigned int m_fence; + int64_t m_fenceValue; + bool m_signaled; +}; + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/src/RHI/OpenGL/OpenGLFence.cpp b/engine/src/RHI/OpenGL/OpenGLFence.cpp new file mode 100644 index 00000000..8d914d63 --- /dev/null +++ b/engine/src/RHI/OpenGL/OpenGLFence.cpp @@ -0,0 +1,43 @@ +#define GLFW_INCLUDE_NONE +#include "XCEngine/RHI/OpenGL/OpenGLFence.h" +#include +#include +#include +#include + +namespace XCEngine { +namespace RHI { + +OpenGLFence::OpenGLFence() : m_fence(0), m_fenceValue(0), m_signaled(false) { +} + +OpenGLFence::~OpenGLFence() { +} + +bool OpenGLFence::Initialize() { + return true; +} + +void OpenGLFence::Shutdown() { +} + +void OpenGLFence::Signal() { + glFinish(); + m_signaled = true; + m_fenceValue++; +} + +void OpenGLFence::Wait() { + glFinish(); +} + +void OpenGLFence::Reset() { + m_signaled = false; +} + +bool OpenGLFence::IsSignaled() const { + return m_signaled; +} + +} // namespace RHI +} // namespace XCEngine