From cb716e5da52526eb7f3aead64ba2deef171de83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sun, 24 Oct 2021 15:25:17 +0200 Subject: [PATCH] Fix OpenGL version check --- src/Nazara/OpenGLRenderer/Wrapper/Context.cpp | 10 ++++--- src/Nazara/Shader/GlslWriter.cpp | 26 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index 4cffc5ee3..b77fc7f7f 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -350,6 +350,8 @@ namespace Nz::GL m_params.glMajorVersion = majorVersion; m_params.glMinorVersion = minorVersion; + unsigned int glVersion = majorVersion * 100 + minorVersion * 10; + // Load extensions GLint extensionCount = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &extensionCount); @@ -360,7 +362,7 @@ namespace Nz::GL m_extensionStatus.fill(ExtensionStatus::NotSupported); // Depth clamp - if (m_params.type == ContextType::OpenGL && m_params.glMajorVersion >= 3 && m_params.glMajorVersion >= 2) + if (m_params.type == ContextType::OpenGL && glVersion >= 320) m_extensionStatus[UnderlyingCast(Extension::DepthClamp)] = ExtensionStatus::Core; else if (m_supportedExtensions.count("GL_ARB_depth_clamp")) m_extensionStatus[UnderlyingCast(Extension::DepthClamp)] = ExtensionStatus::ARB; @@ -370,7 +372,7 @@ namespace Nz::GL m_extensionStatus[UnderlyingCast(Extension::DepthClamp)] = ExtensionStatus::Vendor; // SpirV - if (m_params.type == ContextType::OpenGL && m_params.glMajorVersion >= 4 && m_params.glMajorVersion >= 6) + if (m_params.type == ContextType::OpenGL && glVersion >= 460) m_extensionStatus[UnderlyingCast(Extension::SpirV)] = ExtensionStatus::Core; else if (m_supportedExtensions.count("GL_ARB_gl_spirv")) m_extensionStatus[UnderlyingCast(Extension::SpirV)] = ExtensionStatus::ARB; @@ -380,7 +382,7 @@ namespace Nz::GL m_extensionStatus[UnderlyingCast(Extension::TextureCompressionS3tc)] = ExtensionStatus::EXT; // Texture anisotropic filter - if (m_params.type == ContextType::OpenGL && m_params.glMajorVersion >= 4 && m_params.glMajorVersion >= 6) + if (m_params.type == ContextType::OpenGL && glVersion >= 460) m_extensionStatus[UnderlyingCast(Extension::TextureFilterAnisotropic)] = ExtensionStatus::Core; else if (m_supportedExtensions.count("GL_ARB_texture_filter_anisotropic")) m_extensionStatus[UnderlyingCast(Extension::TextureFilterAnisotropic)] = ExtensionStatus::ARB; @@ -393,7 +395,7 @@ namespace Nz::GL #undef NAZARA_OPENGLRENDERER_EXT_FUNC #undef NAZARA_OPENGLRENDERER_FUNC - // If we requested an OpenGL ES context but cannot create one, check for some compatibility extensions + // If we requested an OpenGL ES context but couldn't create one, check for some compatibility extensions if (params.type == ContextType::OpenGL_ES && m_params.type != params.type) { if (m_supportedExtensions.count("GL_ARB_ES3_2_compatibility")) diff --git a/src/Nazara/Shader/GlslWriter.cpp b/src/Nazara/Shader/GlslWriter.cpp index 3fee820e6..53391ccc4 100644 --- a/src/Nazara/Shader/GlslWriter.cpp +++ b/src/Nazara/Shader/GlslWriter.cpp @@ -420,14 +420,11 @@ namespace Nz void GlslWriter::AppendHeader() { unsigned int glslVersion; + unsigned int glVersion = m_environment.glMajorVersion * 100 + m_environment.glMinorVersion * 10; if (m_environment.glES) { - if (m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 2) - glslVersion = 320; - else if (m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 1) - glslVersion = 310; - else if (m_environment.glMajorVersion >= 3) - glslVersion = 300; + if (glVersion >= 300) + glslVersion = glVersion; else if (m_environment.glMajorVersion >= 2) glslVersion = 100; else @@ -435,17 +432,17 @@ namespace Nz } else { - if (m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 3) - glslVersion = m_environment.glMajorVersion * 100 + m_environment.glMinorVersion * 10; - else if (m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 2) + if (glVersion >= 330) + glslVersion = glVersion; + else if (glVersion >= 320) glslVersion = 150; - else if (m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 1) + else if (glVersion >= 310) glslVersion = 140; - else if (m_environment.glMajorVersion >= 3) + else if (glVersion >= 300) glslVersion = 130; - else if (m_environment.glMajorVersion >= 2 && m_environment.glMinorVersion >= 1) + else if (glVersion >= 210) glslVersion = 120; - else if (m_environment.glMajorVersion >= 2) + else if (glVersion >= 200) glslVersion = 110; else throw std::runtime_error("This version of OpenGL does not support shaders"); @@ -553,7 +550,8 @@ namespace Nz { if (node.entryStage.GetResultingValue() == ShaderStageType::Fragment && node.earlyFragmentTests.HasValue() && node.earlyFragmentTests.GetResultingValue()) { - if ((m_environment.glES && m_environment.glMajorVersion >= 3 && m_environment.glMinorVersion >= 1) || (!m_environment.glES && m_environment.glMajorVersion >= 4 && m_environment.glMinorVersion >= 2) || (m_environment.extCallback && m_environment.extCallback("GL_ARB_shader_image_load_store"))) + unsigned int glVersion = m_environment.glMajorVersion * 100 + m_environment.glMinorVersion * 10; + if ((m_environment.glES && glVersion >= 310) || (!m_environment.glES && glVersion >= 420) || (m_environment.extCallback && m_environment.extCallback("GL_ARB_shader_image_load_store"))) { AppendLine("layout(early_fragment_tests) in;"); AppendLine();