From ca1fcaca3bc391491111fe951883cb57ac00a61c Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 6 May 2026 03:23:27 +0200 Subject: [PATCH] [opengl] remove GLAD symbols from builds w/o OpenGL (#3922) removes unused symbols from non-OpenGL builds, notably mac I REMEMBER MAKING THIS PR A WHILE AGO but I have no record of it here, so hell lets redo it Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3922 Reviewed-by: crueter Reviewed-by: MaranBr --- src/video_core/CMakeLists.txt | 5 ++- src/yuzu/CMakeLists.txt | 5 ++- src/yuzu/bootmanager.cpp | 31 +++++++++++++------ src/yuzu_cmd/CMakeLists.txt | 16 ++++++++-- .../emu_window/emu_window_sdl2_gl.cpp | 16 ++++------ src/yuzu_cmd/yuzu.cpp | 7 +++++ 6 files changed, 56 insertions(+), 24 deletions(-) diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 25eb7846b4..be53b71393 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -323,7 +323,10 @@ if (ENABLE_OPENGL) endif() target_link_libraries(video_core PUBLIC common core) -target_link_libraries(video_core PUBLIC glad shader_recompiler stb bc_decoder gpu_logging) +target_link_libraries(video_core PUBLIC shader_recompiler stb bc_decoder gpu_logging) +if (ENABLE_OPENGL) + target_link_libraries(video_core PUBLIC glad) +endif() if (YUZU_USE_EXTERNAL_FFMPEG) add_dependencies(video_core ffmpeg-build) diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 3adce1dd8b..ff0312660b 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -411,8 +411,11 @@ endif() target_link_libraries(yuzu PRIVATE nlohmann_json::nlohmann_json) target_link_libraries(yuzu PRIVATE common core input_common frontend_common network video_core qt_common) -target_link_libraries(yuzu PRIVATE Boost::headers glad Qt6::Widgets Qt6::Charts Qt6::Concurrent) +target_link_libraries(yuzu PRIVATE Boost::headers Qt6::Widgets Qt6::Charts Qt6::Concurrent) target_link_libraries(yuzu PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads) +if (ENABLE_OPENGL) + target_link_libraries(yuzu PRIVATE glad) +endif() if (UNIX AND NOT APPLE) target_link_libraries(yuzu PRIVATE Qt6::DBus) diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index 0c0ce6e90c..2408ef265f 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp @@ -8,7 +8,10 @@ #include #include #include + +#ifdef HAS_OPENGL #include +#endif #include #include "common/settings_enums.h" @@ -1039,11 +1042,12 @@ void GRenderWindow::InitializeNull() { } bool GRenderWindow::LoadOpenGL() { +#ifdef HAS_OPENGL auto context = CreateSharedContext(); auto scope = context->Acquire(); if (!gladLoadGL()) { - QMessageBox::warning( - this, tr("Error while initializing OpenGL!"), + QtCommon::Frontend::Warning( + tr("Error while initializing OpenGL!"), tr("Your GPU may not support OpenGL, or you do not have the latest graphics driver.")); return false; } @@ -1052,15 +1056,16 @@ bool GRenderWindow::LoadOpenGL() { const QString renderer = QString::fromUtf8(reinterpret_cast(glGetString(GL_RENDERER))); if (!GLAD_GL_VERSION_4_6) { - QMessageBox::warning(this, tr("Error while initializing OpenGL 4.6!"), - tr("Your GPU may not support OpenGL 4.6, or you do not have the " - "latest graphics driver.

GL Renderer:
%1") - .arg(renderer)); + QtCommon::Frontend::Warning( + tr("Error while initializing OpenGL 4.6!"), + tr("Your GPU may not support OpenGL 4.6, or you do not have the " + "latest graphics driver.

GL Renderer:
%1") + .arg(renderer)); return false; } if (QStringList missing_ext = GetUnsupportedGLExtensions(); !missing_ext.empty()) { - QMessageBox::warning( - this, tr("Error while initializing OpenGL!"), + QtCommon::Frontend::Warning( + tr("Error while initializing OpenGL!"), tr("Your GPU may not support one or more required OpenGL extensions. Please ensure you " "have the latest graphics driver.

GL Renderer:
%1

Unsupported " "extensions:
%2") @@ -1069,10 +1074,17 @@ bool GRenderWindow::LoadOpenGL() { // Non fatal } return true; +#else + QtCommon::Frontend::Warning( + tr("Error while initializing OpenGL!"), + tr("This build doesn't have OpenGL support.")); + return false; +#endif } QStringList GRenderWindow::GetUnsupportedGLExtensions() const { - QStringList missing_ext; + QStringList missing_ext{}; +#ifdef HAS_OPENGL // Extensions required to support some texture formats. if (!GLAD_GL_EXT_texture_compression_s3tc) missing_ext.append(QStringLiteral("EXT_texture_compression_s3tc")); @@ -1082,6 +1094,7 @@ QStringList GRenderWindow::GetUnsupportedGLExtensions() const { LOG_ERROR(Frontend, "GPU does not support all required extensions"); for (const QString& ext : missing_ext) LOG_ERROR(Frontend, "Unsupported GL extension: {}", ext.toStdString()); +#endif return missing_ext; } diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 8f92525ad6..35df53f381 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -15,11 +15,18 @@ function(create_resource file output filename) file(WRITE "${PROJECT_BINARY_DIR}/dist/${output}" "const unsigned char ${filename}[] = {${filedata}};\nconst unsigned ${filename}_size = sizeof(${filename});\n") endfunction() +if (ENABLE_OPENGL) + list(APPEND OPENGL_SOURCES + emu_window/emu_window_sdl2_gl.cpp + emu_window/emu_window_sdl2_gl.h + ) +else() + set(OPENGL_SOURCES "") +endif() + add_executable(yuzu-cmd emu_window/emu_window_sdl2.cpp emu_window/emu_window_sdl2.h - emu_window/emu_window_sdl2_gl.cpp - emu_window/emu_window_sdl2_gl.h emu_window/emu_window_sdl2_null.cpp emu_window/emu_window_sdl2_null.h emu_window/emu_window_sdl2_vk.cpp @@ -28,10 +35,13 @@ add_executable(yuzu-cmd sdl_config.h yuzu.cpp yuzu.rc + ${OPENGL_SOURCES} ) target_link_libraries(yuzu-cmd PRIVATE common core input_common frontend_common video_core) -target_link_libraries(yuzu-cmd PRIVATE glad) +if (ENABLE_OPENGL) + target_link_libraries(yuzu-cmd PRIVATE glad) +endif() if (MSVC) target_link_libraries(yuzu-cmd PRIVATE getopt) endif() diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp index 94a6a69776..448c902131 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp @@ -59,20 +59,16 @@ private: }; bool EmuWindow_SDL2_GL::SupportsRequiredGLExtensions() { - std::vector unsupported_ext; - + std::vector unsupported_ext{}; +#ifdef HAS_OPENGL // Extensions required to support some texture formats. - if (!GLAD_GL_EXT_texture_compression_s3tc) { + if (!GLAD_GL_EXT_texture_compression_s3tc) unsupported_ext.push_back("EXT_texture_compression_s3tc"); - } - if (!GLAD_GL_ARB_texture_compression_rgtc) { + if (!GLAD_GL_ARB_texture_compression_rgtc) unsupported_ext.push_back("ARB_texture_compression_rgtc"); - } - - for (const auto& extension : unsupported_ext) { + for (const auto& extension : unsupported_ext) LOG_CRITICAL(Frontend, "Unsupported GL extension: {}", extension); - } - +#endif return unsupported_ext.empty(); } diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index 8e518d816c..54cc832bf2 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -31,7 +31,9 @@ #include "sdl_config.h" #include "video_core/renderer_base.h" #include "yuzu_cmd/emu_window/emu_window_sdl2.h" +#ifdef HAS_OPENGL #include "yuzu_cmd/emu_window/emu_window_sdl2_gl.h" +#endif #include "yuzu_cmd/emu_window/emu_window_sdl2_null.h" #include "yuzu_cmd/emu_window/emu_window_sdl2_vk.h" @@ -349,17 +351,22 @@ int main(int argc, char** argv) { std::unique_ptr emu_window; switch (Settings::values.renderer_backend.GetValue()) { +#ifdef HAS_OPENGL case Settings::RendererBackend::OpenGL_GLSL: case Settings::RendererBackend::OpenGL_GLASM: case Settings::RendererBackend::OpenGL_SPIRV: emu_window = std::make_unique(&input_subsystem, system, fullscreen); break; +#endif case Settings::RendererBackend::Vulkan: emu_window = std::make_unique(&input_subsystem, system, fullscreen); break; case Settings::RendererBackend::Null: emu_window = std::make_unique(&input_subsystem, system, fullscreen); break; + default: + LOG_CRITICAL(Frontend, "Invalid renderer backend"); + return -1; } #ifdef _WIN32