[qrhi] Enabled QRhi renderer by default on Qt 6.7+ with OpenGL fallback.

Esse commit está contido em:
23rd
2026-04-01 08:31:09 +03:00
commit f2cc58e419
5 arquivos alterados com 23 adições e 4 exclusões
+13 -1
Ver Arquivo
@@ -40,6 +40,17 @@ base::options::toggle OptionHighDpiDownscale({
.restartRequired = true,
});
base::options::toggle OptionUseOpenGLRenderer({
.id = kOptionUseOpenGLRenderer,
.name = "Use OpenGL renderer",
.description = "Use the legacy OpenGL rendering backend instead of"
" the default Metal/Direct3D/Vulkan (QRhi) backend.",
.scope = [] {
return QLibraryInfo::version() >= QVersionNumber(6, 7);
},
.restartRequired = true,
});
base::options::toggle OptionFreeType({
.id = kOptionFreeType,
.name = "FreeType font engine",
@@ -309,6 +320,7 @@ base::options::toggle OptionFractionalScalingEnabled({
const char kOptionFractionalScalingEnabled[] = "fractional-scaling-enabled";
const char kOptionHighDpiDownscale[] = "high-dpi-downscale";
const char kOptionFreeType[] = "freetype";
const char kOptionUseOpenGLRenderer[] = "use-opengl-renderer";
Launcher *Launcher::InstanceSetter::Instance = nullptr;
@@ -365,7 +377,7 @@ void Launcher::initHighDpi() {
qputenv("QT_WIDGETS_RHI_BACKEND", "opengl");
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
if (qEnvironmentVariableIsSet("DESKTOP_APP_USE_QRHI")) {
if (!OptionUseOpenGLRenderer.value()) {
qputenv("QT_WIDGETS_RHI", "1");
#ifdef Q_OS_MAC
qputenv("QT_WIDGETS_RHI_BACKEND", "metal");
+1
Ver Arquivo
@@ -14,6 +14,7 @@ namespace Core {
extern const char kOptionFractionalScalingEnabled[];
extern const char kOptionHighDpiDownscale[];
extern const char kOptionFreeType[];
extern const char kOptionUseOpenGLRenderer[];
class Launcher {
public:
@@ -1401,7 +1401,7 @@ QImage Pip::currentVideoFrameImage() const {
Ui::GL::ChosenRenderer Pip::chooseRenderer(
Ui::GL::Capabilities capabilities) {
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
if (qEnvironmentVariableIsSet("DESKTOP_APP_USE_QRHI")) {
if (qEnvironmentVariableIsSet("QT_WIDGETS_RHI")) {
LOG(("Renderer: [QRhi] (PipPanel)"));
_opengl = true;
return {
@@ -1409,7 +1409,7 @@ Ui::GL::ChosenRenderer Pip::chooseRenderer(
.backend = Ui::GL::Backend::QRhi,
};
}
#endif // Qt >= 6.7
#endif // Qt >= 6.8
const auto use = Platform::IsMac()
? true
: capabilities.transparency;
@@ -179,6 +179,7 @@ void SetupExperimental(
addToggle(kModerateCommonGroups);
addToggle(kForceComposeSearchOneColumn);
addToggle(ChatHelpers::kOptionUnlimitedRecentStickers);
addToggle(Core::kOptionUseOpenGLRenderer);
}
} // namespace
+6 -1
Ver Arquivo
@@ -1,7 +1,12 @@
# Compile QRhi shaders (.vert/.frag -> .qsb) at build time.
#
# Usage: include(cmake/qrhi_shaders.cmake)
# Requires: target "Telegram" and function "nice_target_sources" to exist.
find_program(QSB_EXECUTABLE qsb
HINTS "${QT_DIR}/../../../libexec" "${QT_DIR}/../../../bin"
PATHS ENV PATH)
if (QSB_EXECUTABLE)
set(_shader_dir "${CMAKE_CURRENT_SOURCE_DIR}/shaders")
set(_qsb_out_dir "${CMAKE_CURRENT_BINARY_DIR}/shaders")
@@ -36,7 +41,7 @@ if (QSB_EXECUTABLE)
shaders.qrc
)
add_dependencies(Telegram compile_shaders)
message(STATUS "QSB: found ${QSB_EXECUTABLE}, will compile ${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.vert/*.frag")
message(STATUS "QSB: found ${QSB_EXECUTABLE}, will compile ${_shader_dir}/*.vert/*.frag")
else()
message(STATUS "QSB: not found, using pre-compiled .qsb files")
nice_target_sources(Telegram ${CMAKE_CURRENT_SOURCE_DIR}