feat(OpenGL): 初始化 RHICapabilities
- 在 OpenGLDevice 初始化时查询 GL 扩展和硬件限制 - 设置 majorVersion、minorVersion - 设置几何着色器、计算着色器、细分着色器支持标志 - 设置最大纹理尺寸、最大渲染目标数、最大视口数、各向异性最大值、顶点属性最大数
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user