fix: OpenGL detection not working correctly

This commit is contained in:
WerWolv 2025-08-23 11:04:15 +02:00
parent ba71a300ec
commit 5c2309bcf7
1 changed files with 24 additions and 15 deletions

View File

@ -58,18 +58,18 @@ namespace hex::init {
this->loadAssets(); this->loadAssets();
{ {
auto glVendor = reinterpret_cast<const char *>(glGetString(GL_VENDOR)); auto glVendorString = reinterpret_cast<const char *>(glGetString(GL_VENDOR));
auto glRenderer = reinterpret_cast<const char *>(glGetString(GL_RENDERER)); auto glRendererString = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
auto glVersion = reinterpret_cast<const char *>(glGetString(GL_VERSION)); auto glVersionString = reinterpret_cast<const char *>(glGetString(GL_VERSION));
auto glShadingLanguageVersion = reinterpret_cast<const char *>(glGetString(GL_SHADING_LANGUAGE_VERSION)); auto glShadingLanguageVersion = reinterpret_cast<const char *>(glGetString(GL_SHADING_LANGUAGE_VERSION));
log::debug("OpenGL Vendor: '{}'", glVendor); log::debug("OpenGL Vendor: '{}'", glVendorString);
log::debug("OpenGL Renderer: '{}'", glRenderer); log::debug("OpenGL Renderer: '{}'", glRendererString);
log::debug("OpenGL Version: '{}'", glVersion); log::debug("OpenGL Version: '{}'", glVersionString);
log::debug("OpenGL Shading Language Version: '{}'", glShadingLanguageVersion); log::debug("OpenGL Shading Language Version: '{}'", glShadingLanguageVersion);
ImHexApi::System::impl::setGPUVendor(glVendor); ImHexApi::System::impl::setGPUVendor(glVendorString);
ImHexApi::System::impl::setGLRenderer(glRenderer); ImHexApi::System::impl::setGLRenderer(glRendererString);
{ {
int glVersionMajor = 0, glVersionMinor = 0; int glVersionMajor = 0, glVersionMinor = 0;
@ -77,6 +77,22 @@ namespace hex::init {
glGetIntegerv(GL_MINOR_VERSION, &glVersionMinor); glGetIntegerv(GL_MINOR_VERSION, &glVersionMinor);
ImHexApi::System::impl::setGLVersion(SemanticVersion(glVersionMajor, glVersionMinor, 0)); ImHexApi::System::impl::setGLVersion(SemanticVersion(glVersionMajor, glVersionMinor, 0));
} }
{
#if !defined(OS_MACOS)
const static auto MinGLVersion = SemanticVersion(3, 1, 0);
#else
const static auto MinGLVersion = SemanticVersion(3, 2, 0);
#endif
const auto &glVersion = ImHexApi::System::getGLVersion();
if (glVersion < MinGLVersion) {
showErrorMessageBox(fmt::format("ImHex requires at least OpenGL {} to run but your system seems to only support up to OpenGL {}!\n\nTry upgrading your GPU drivers or try one of the NoGPU releases to use software rendering instead.", MinGLVersion.get(false), glVersion.get()));
this->exitImGui();
this->exitGLFW();
std::exit(EXIT_FAILURE);
}
}
} }
} }
@ -457,19 +473,12 @@ namespace hex::init {
// Configure used OpenGL version // Configure used OpenGL version
#if defined(OS_MACOS) #if defined(OS_MACOS)
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE); glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE);
glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE); glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE);
#else
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
#endif #endif
// Make splash screen non-resizable, undecorated and transparent // Make splash screen non-resizable, undecorated and transparent
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);
glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);
glfwWindowHint(GLFW_FLOATING, GLFW_FALSE); glfwWindowHint(GLFW_FLOATING, GLFW_FALSE);