diff --git a/ui/gl/gl_detection.cpp b/ui/gl/gl_detection.cpp index 91af67f..ea5cc88 100644 --- a/ui/gl/gl_detection.cpp +++ b/ui/gl/gl_detection.cpp @@ -10,6 +10,7 @@ #include "ui/integration.h" #include "base/debug_log.h" #include "base/options.h" +#include "base/platform/base_platform_info.h" #include #include @@ -206,6 +207,15 @@ Capabilities CheckCapabilities(QWidget *widget) { return result; } +Backend ChooseBackendDefault(Capabilities capabilities) { + const auto use = ::Platform::IsMac() + ? true + : ::Platform::IsWindows() + ? capabilities.supported + : capabilities.transparency; + return use ? Backend::OpenGL : Backend::Raster; +} + bool LastCrashCheckFailed() { return QFile::exists(Integration::Instance().openglCheckFilePath()); } diff --git a/ui/gl/gl_detection.h b/ui/gl/gl_detection.h index 45978ae..862be90 100644 --- a/ui/gl/gl_detection.h +++ b/ui/gl/gl_detection.h @@ -25,6 +25,7 @@ struct Capabilities { }; [[nodiscard]] Capabilities CheckCapabilities(QWidget *widget = nullptr); +[[nodiscard]] Backend ChooseBackendDefault(Capabilities capabilities); void ForceDisable(bool disable); diff --git a/ui/gl/gl_window.cpp b/ui/gl/gl_window.cpp index b866d4e..798b533 100644 --- a/ui/gl/gl_window.cpp +++ b/ui/gl/gl_window.cpp @@ -23,25 +23,24 @@ namespace Ui::GL { namespace { constexpr auto kUseNativeChild = false;// ::Platform::IsWindows(); - -[[nodiscard]] Backend DefaultChooseBackend(Capabilities capabilities) { - const auto use = ::Platform::IsMac() - ? true - : ::Platform::IsWindows() - ? capabilities.supported - : capabilities.transparency; - LOG(("OpenGL: %1 (Window)").arg(use ? "[TRUE]" : "[FALSE]")); - return use ? Backend::OpenGL : Backend::Raster; +[[nodiscard]] Fn ChooseBackendWrap( + Fn chooseBackend) { + return [=](Capabilities capabilities) { + const auto backend = chooseBackend(capabilities); + const auto use = backend == Backend::OpenGL; + LOG(("OpenGL: %1 (Window)").arg(use ? "[TRUE]" : "[FALSE]")); + return backend; + }; } } // namespace -Window::Window() : Window(DefaultChooseBackend) { +Window::Window() : Window(ChooseBackendDefault) { } Window::Window(Fn chooseBackend) -: _window(createWindow(chooseBackend)) -, _bodyNativeWrap(createNativeBodyWrap(chooseBackend)) +: _window(createWindow(ChooseBackendWrap(chooseBackend))) +, _bodyNativeWrap(createNativeBodyWrap(ChooseBackendWrap(chooseBackend))) , _body(_bodyNativeWrap ? _bodyNativeWrap.get() : _window->body().get()) { }