feat(OpenGL): 初始化 RHICapabilities

- 在 OpenGLDevice 初始化时查询 GL 扩展和硬件限制
- 设置 majorVersion、minorVersion
- 设置几何着色器、计算着色器、细分着色器支持标志
- 设置最大纹理尺寸、最大渲染目标数、最大视口数、各向异性最大值、顶点属性最大数
This commit is contained in:
2026-03-18 02:36:40 +08:00
parent 65ce9c84c6
commit 17e71218e7

View File

@@ -98,6 +98,38 @@ bool OpenGLDevice::InitializeWithExistingWindow(GLFWwindow* window) {
m_deviceInfo.majorVersion = static_cast<uint32_t>(majorVersion); m_deviceInfo.majorVersion = static_cast<uint32_t>(majorVersion);
m_deviceInfo.minorVersion = static_cast<uint32_t>(minorVersion); m_deviceInfo.minorVersion = static_cast<uint32_t>(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<uint32_t>(maxTexSize);
GLint maxCubeSize = 0;
glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxCubeSize);
m_capabilities.maxTextureCubeSize = static_cast<uint32_t>(maxCubeSize);
GLint maxRenderTargets = 0;
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxRenderTargets);
m_capabilities.maxRenderTargets = static_cast<uint32_t>(maxRenderTargets);
m_capabilities.maxColorAttachments = static_cast<uint32_t>(maxRenderTargets);
GLint maxViewports = 0;
glGetIntegerv(GL_MAX_VIEWPORTS, &maxViewports);
m_capabilities.maxViewports = static_cast<uint32_t>(maxViewports);
GLint maxAnisotropy = 0;
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &maxAnisotropy);
m_capabilities.maxAnisotropy = static_cast<uint32_t>(maxAnisotropy);
GLint maxAttribs = 0;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxAttribs);
m_capabilities.maxVertexAttribs = static_cast<uint32_t>(maxAttribs);
m_initialized = true; m_initialized = true;
return true; return true;
} }