From 0a2f8050e58e21d5c4aead8cdd45f5834a18756f Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 17 Mar 2026 19:43:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(RHI):=20=E4=BF=AE=E5=A4=8D=20OpenGL=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=8E=A5=E5=8F=A3=E4=B8=8D=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 RHIDeviceInfo 缺少 majorVersion/minorVersion - 修复 OpenGLTexture 使用 GetTextureType 替代 GetType - 修复 OpenGLSampler 使用 OpenGLSamplerDesc - 修复 BlendFactor::OneMinusSrcAlpha -> InvSrcAlpha - 修复 OpenGLRenderTargetViewDesc/OpenGLDepthStencilViewDesc 重定义问题 - 恢复 OpenGL 测试文件到 CMakeLists --- .../XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h | 4 ++-- .../XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h | 4 ++-- engine/include/XCEngine/RHI/RHITypes.h | 2 ++ engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp | 4 ++-- engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp | 4 ++-- tests/RHI/OpenGL/CMakeLists.txt | 12 ++++++------ tests/RHI/OpenGL/test_pipeline_state.cpp | 2 +- tests/RHI/OpenGL/test_sampler.cpp | 8 ++++---- tests/RHI/OpenGL/test_texture.cpp | 4 ++-- 9 files changed, 23 insertions(+), 21 deletions(-) diff --git a/engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h b/engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h index 1154480d..e1f8fb86 100644 --- a/engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h +++ b/engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h @@ -19,7 +19,7 @@ enum class DepthStencilType { TextureCube }; -struct DepthStencilViewDesc { +struct OpenGLDepthStencilViewDesc { DepthStencilType type = DepthStencilType::Texture2D; int mipLevel = 0; int baseArraySlice = 0; @@ -32,7 +32,7 @@ public: OpenGLDepthStencilView(); ~OpenGLDepthStencilView(); - bool Initialize(unsigned int texture, const DepthStencilViewDesc& desc); + bool Initialize(unsigned int texture, const OpenGLDepthStencilViewDesc& desc); bool Initialize(unsigned int texture, int mipLevel = 0); bool InitializeCubemap(unsigned int cubemap, int face, int mipLevel = 0); void Shutdown(); diff --git a/engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h b/engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h index 0d6c0bcb..cd8612e5 100644 --- a/engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h +++ b/engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h @@ -15,7 +15,7 @@ enum class RenderTargetType { TextureCubeArray }; -struct RenderTargetViewDesc { +struct OpenGLRenderTargetViewDesc { RenderTargetType type = RenderTargetType::Texture2D; int mipLevel = 0; int baseArraySlice = 0; @@ -29,7 +29,7 @@ public: OpenGLRenderTargetView(); ~OpenGLRenderTargetView(); - bool Initialize(unsigned int texture, const RenderTargetViewDesc& desc); + bool Initialize(unsigned int texture, const OpenGLRenderTargetViewDesc& desc); bool Initialize(unsigned int texture, int mipLevel = 0); bool InitializeCubemap(unsigned int cubemap, int face, int mipLevel = 0); void Shutdown(); diff --git a/engine/include/XCEngine/RHI/RHITypes.h b/engine/include/XCEngine/RHI/RHITypes.h index ba886c48..483cfad8 100644 --- a/engine/include/XCEngine/RHI/RHITypes.h +++ b/engine/include/XCEngine/RHI/RHITypes.h @@ -253,6 +253,8 @@ struct RHIDeviceInfo { std::wstring vendor; std::wstring renderer; std::wstring version; + uint32_t majorVersion = 0; + uint32_t minorVersion = 0; uint64_t dedicatedVideoMemory = 0; uint64_t dedicatedSystemMemory = 0; uint64_t sharedSystemMemory = 0; diff --git a/engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp b/engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp index e74ad8d1..259004d6 100644 --- a/engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp +++ b/engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp @@ -20,7 +20,7 @@ OpenGLDepthStencilView::~OpenGLDepthStencilView() { Shutdown(); } -bool OpenGLDepthStencilView::Initialize(unsigned int texture, const DepthStencilViewDesc& desc) { +bool OpenGLDepthStencilView::Initialize(unsigned int texture, const OpenGLDepthStencilViewDesc& desc) { m_texture = texture; m_mipLevel = desc.mipLevel; m_type = desc.type; @@ -53,7 +53,7 @@ bool OpenGLDepthStencilView::Initialize(unsigned int texture, const DepthStencil } bool OpenGLDepthStencilView::Initialize(unsigned int texture, int mipLevel) { - DepthStencilViewDesc desc; + OpenGLDepthStencilViewDesc desc; desc.mipLevel = mipLevel; return Initialize(texture, desc); } diff --git a/engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp b/engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp index a951776c..e364dd03 100644 --- a/engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp +++ b/engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp @@ -30,7 +30,7 @@ OpenGLRenderTargetView::~OpenGLRenderTargetView() { Shutdown(); } -bool OpenGLRenderTargetView::Initialize(unsigned int texture, const RenderTargetViewDesc& desc) { +bool OpenGLRenderTargetView::Initialize(unsigned int texture, const OpenGLRenderTargetViewDesc& desc) { m_texture = texture; m_mipLevel = desc.mipLevel; m_type = desc.type; @@ -69,7 +69,7 @@ bool OpenGLRenderTargetView::Initialize(unsigned int texture, const RenderTarget } bool OpenGLRenderTargetView::Initialize(unsigned int texture, int mipLevel) { - RenderTargetViewDesc desc; + OpenGLRenderTargetViewDesc desc; desc.type = RenderTargetType::Texture2D; desc.mipLevel = mipLevel; return Initialize(texture, desc); diff --git a/tests/RHI/OpenGL/CMakeLists.txt b/tests/RHI/OpenGL/CMakeLists.txt index 57ad16d2..1cabed26 100644 --- a/tests/RHI/OpenGL/CMakeLists.txt +++ b/tests/RHI/OpenGL/CMakeLists.txt @@ -20,17 +20,17 @@ find_package(GTest REQUIRED) set(TEST_SOURCES ${CMAKE_SOURCE_DIR}/tests/OpenGL/package/src/glad.c fixtures/OpenGLTestFixture.cpp - # test_device.cpp # RHIDeviceInfo 不匹配 + test_device.cpp # test_buffer.cpp # test_fence.cpp - # test_texture.cpp # OpenGLTexture 缺少 GetType - # test_sampler.cpp # SamplerDesc 类型不匹配 + test_texture.cpp + test_sampler.cpp # test_shader.cpp - # test_pipeline_state.cpp # BlendFunc 枚举问题 + test_pipeline_state.cpp test_vertex_array.cpp test_command_list.cpp - # test_render_target_view.cpp # 结构体重定义 - # test_depth_stencil_view.cpp # 结构体重定义 + test_render_target_view.cpp + test_depth_stencil_view.cpp test_swap_chain.cpp ) diff --git a/tests/RHI/OpenGL/test_pipeline_state.cpp b/tests/RHI/OpenGL/test_pipeline_state.cpp index c9289a4a..f0e246d5 100644 --- a/tests/RHI/OpenGL/test_pipeline_state.cpp +++ b/tests/RHI/OpenGL/test_pipeline_state.cpp @@ -29,7 +29,7 @@ TEST_F(OpenGLTestFixture, PipelineState_SetBlendState) { BlendState state; state.blendEnable = true; state.srcBlend = BlendFactor::SrcAlpha; - state.dstBlend = BlendFactor::OneMinusSrcAlpha; + state.dstBlend = BlendFactor::InvSrcAlpha; pipeline.SetBlendState(state); pipeline.ApplyBlend(); diff --git a/tests/RHI/OpenGL/test_sampler.cpp b/tests/RHI/OpenGL/test_sampler.cpp index 61c446f9..365aa3e8 100644 --- a/tests/RHI/OpenGL/test_sampler.cpp +++ b/tests/RHI/OpenGL/test_sampler.cpp @@ -5,7 +5,7 @@ using namespace XCEngine::RHI; TEST_F(OpenGLTestFixture, Sampler_Initialize_Default) { OpenGLSampler sampler; - SamplerDesc desc; + OpenGLSamplerDesc desc; bool result = sampler.Initialize(desc); @@ -17,7 +17,7 @@ TEST_F(OpenGLTestFixture, Sampler_Initialize_Default) { TEST_F(OpenGLTestFixture, Sampler_Initialize_Custom) { OpenGLSampler sampler; - SamplerDesc desc; + OpenGLSamplerDesc desc; desc.minFilter = SamplerFilter::LinearMipmapLinear; desc.magFilter = SamplerFilter::Linear; desc.wrapS = SamplerWrapMode::Repeat; @@ -34,7 +34,7 @@ TEST_F(OpenGLTestFixture, Sampler_Initialize_Custom) { TEST_F(OpenGLTestFixture, Sampler_Bind_Unbind) { OpenGLSampler sampler; - SamplerDesc desc; + OpenGLSamplerDesc desc; sampler.Initialize(desc); sampler.Bind(0); @@ -51,7 +51,7 @@ TEST_F(OpenGLTestFixture, Sampler_Bind_Unbind) { TEST_F(OpenGLTestFixture, Sampler_GetID_ReturnsValid) { OpenGLSampler sampler; - SamplerDesc desc; + OpenGLSamplerDesc desc; sampler.Initialize(desc); EXPECT_NE(sampler.GetID(), 0u); diff --git a/tests/RHI/OpenGL/test_texture.cpp b/tests/RHI/OpenGL/test_texture.cpp index 3cffa521..5a891b14 100644 --- a/tests/RHI/OpenGL/test_texture.cpp +++ b/tests/RHI/OpenGL/test_texture.cpp @@ -12,7 +12,7 @@ TEST_F(OpenGLTestFixture, Texture_Initialize_2DTexture) { EXPECT_NE(texture.GetID(), 0u); EXPECT_EQ(texture.GetWidth(), 64); EXPECT_EQ(texture.GetHeight(), 64); - EXPECT_EQ(texture.GetType(), OpenGLTextureType::Texture2D); + EXPECT_EQ(texture.GetTextureType(), TextureType::Texture2D); texture.Shutdown(); } @@ -26,7 +26,7 @@ TEST_F(OpenGLTestFixture, Texture_Initialize_CubeMap) { EXPECT_NE(texture.GetID(), 0u); EXPECT_EQ(texture.GetWidth(), 64); EXPECT_EQ(texture.GetHeight(), 64); - EXPECT_EQ(texture.GetType(), OpenGLTextureType::TextureCube); + EXPECT_EQ(texture.GetTextureType(), TextureType::TextureCube); texture.Shutdown(); }