From 17e71218e79f7bb220f10485d56a6232c17bc173 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 18 Mar 2026 02:36:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(OpenGL):=20=E5=88=9D=E5=A7=8B=E5=8C=96=20R?= =?UTF-8?q?HICapabilities?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 OpenGLDevice 初始化时查询 GL 扩展和硬件限制 - 设置 majorVersion、minorVersion - 设置几何着色器、计算着色器、细分着色器支持标志 - 设置最大纹理尺寸、最大渲染目标数、最大视口数、各向异性最大值、顶点属性最大数 --- engine/src/RHI/OpenGL/OpenGLDevice.cpp | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/engine/src/RHI/OpenGL/OpenGLDevice.cpp b/engine/src/RHI/OpenGL/OpenGLDevice.cpp index 02065211..f00980b7 100644 --- a/engine/src/RHI/OpenGL/OpenGLDevice.cpp +++ b/engine/src/RHI/OpenGL/OpenGLDevice.cpp @@ -98,6 +98,38 @@ bool OpenGLDevice::InitializeWithExistingWindow(GLFWwindow* window) { m_deviceInfo.majorVersion = static_cast(majorVersion); m_deviceInfo.minorVersion = static_cast(minorVersion); + m_capabilities.majorVersion = majorVersion; + m_capabilities.minorVersion = minorVersion; + m_capabilities.bSupportsGeometryShaders = true; + m_capabilities.bSupportsComputeShaders = GLVersion.major >= 4 && GLVersion.minor >= 3; + m_capabilities.bSupportsTessellation = GLVersion.major >= 4 && GLVersion.minor >= 1; + m_capabilities.bSupportsExplicitMultiThreading = false; + + GLint maxTexSize = 0; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); + m_capabilities.maxTexture2DSize = static_cast(maxTexSize); + + GLint maxCubeSize = 0; + glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeSize); + m_capabilities.maxTextureCubeSize = static_cast(maxCubeSize); + + GLint maxRenderTargets = 0; + glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxRenderTargets); + m_capabilities.maxRenderTargets = static_cast(maxRenderTargets); + m_capabilities.maxColorAttachments = static_cast(maxRenderTargets); + + GLint maxViewports = 0; + glGetIntegerv(GL_MAX_VIEWPORTS, &maxViewports); + m_capabilities.maxViewports = static_cast(maxViewports); + + GLint maxAnisotropy = 0; + glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &maxAnisotropy); + m_capabilities.maxAnisotropy = static_cast(maxAnisotropy); + + GLint maxAttribs = 0; + glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxAttribs); + m_capabilities.maxVertexAttribs = static_cast(maxAttribs); + m_initialized = true; return true; }