diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index a1d585254..66d72e346 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -412,29 +412,18 @@ bool OpenGLManager::init_gl() #ifdef _WIN32 // Since AMD driver version 22.7.1, there is probably some bug in the driver that causes the issue with the missing - // texture of the bed. It seems that this issue only triggers when mipmaps are generated manually - // (combined with a texture compression) and when mipmaps are generated through OpenGL glGenerateMipmap is working. - // So, for newer drivers than 22.6.1, the last working driver version, we use mipmaps generated through OpenGL. - if (const auto gl_info = OpenGLManager::get_gl_info(); boost::contains(gl_info.get_vendor(), "ATI Technologies Inc.")) { - // WHQL drivers seem to have one more version number at the end besides non-WHQL drivers. - // WHQL: 4.6.14800 Compatibility Profile Context 22.6.1 30.0.21023.1015 - // Non-WHQL: 4.6.0 Compatibility Profile Context 22.8.1.220810 - std::regex version_rgx(R"(Compatibility\sProfile\sContext\s(\d+)\.(\d+)\.(\d+))"); - if (std::smatch matches; std::regex_search(gl_info.get_version_string(), matches, version_rgx) && matches.size() == 4) { - int version_major = std::stoi(matches[1].str()); - int version_minor = std::stoi(matches[2].str()); - int version_patch = std::stoi(matches[3].str()); - BOOST_LOG_TRIVIAL(debug) << "Found AMD driver version: " << version_major << "." << version_minor << "." << version_patch; - - if (version_major > 22 || (version_major == 22 && version_minor > 6) || (version_major == 22 && version_minor == 6 && version_patch > 1)) { - m_use_manually_generated_mipmaps = false; - BOOST_LOG_TRIVIAL(debug) << "Mipmapping through OpenGL was enabled."; - } - } else { - BOOST_LOG_TRIVIAL(error) << "Not recognized format of version."; - } - } else { - BOOST_LOG_TRIVIAL(error) << "Unable to parse version of AMD driver."; + // texture of the bed (see: https://github.com/prusa3d/PrusaSlicer/issues/8417). + // It seems that this issue only triggers when mipmaps are generated manually + // (combined with a texture compression) with texture size not being power of two. + // When mipmaps are generated through OpenGL function glGenerateMipmap() the driver works fine. + // There is no an easy way to detect the driver version without using Win32 API because the strings returned by OpenGL + // have no standardized format, only some of them contain the driver version. + // Until we do not know that driver will be fixed (if ever) we force the use of glGenerateMipmap() on all cards + // containing the string 'Radeon' in the string returned by glGetString(GL_RENDERER) + const auto& gl_info = OpenGLManager::get_gl_info(); + if (boost::contains(gl_info.get_vendor(), "ATI Technologies Inc.") && boost::contains(gl_info.get_renderer(), "Radeon")) { + m_use_manually_generated_mipmaps = false; + BOOST_LOG_TRIVIAL(debug) << "Mipmapping through OpenGL was enabled."; } #endif }