Opt in via environment variables:
QSG_RHI=1 -> enable using QRhi instead of GL
QSG_RHI_BACKEND -> set to vulkan, metal, d3d11, gl to override the default
(the default is d3d11 on Windows, metal on Mac, gl elsewhere)
Or force a given rhi backend via the existing
QQuickWindow::setSceneGraphBackend().
Otherwise the default behavior is the same as before, the rhi code path
is never active by default.
-no-opengl builds are supported in the sense that they work and default
to the software backend. However, the rhi code path cannot currently be
used in such builds, even though QRhi from qtbase is fully functional
with Vulkan, D3D, or Metal even when qtbase was configured with
-no-opengl. This cannot be utilized by Quick atm due to OpenGL usage
being all over the place in the sources corresponding to the default
backend, and those host the rhi code path as well. This will be cleaned up
hopefully in Qt 6, with the removal all direct OpenGL usage.
Other env.vars.:
QSG_RHI_DEBUG_LAYER=1 -> enable D3D debug or Vulkan validation layer
(assuming the system is set up for this)
QSG_RHI_SHADEREFFECT_DEBUG=1 -> print stuff from ShaderEffect
QSG_SAMPLES=1,2,4,... -> MSAA sample count (but QSurfaceFormat works too)
QT_D3D_ADAPTER_INDEX=0,1,... -> D3D adapter index
QT_VK_PHYSICAL_DEVICE_INDEX=0,1,... -> Vulkan physical device index
QSG_RHI_UINT32_INDEX=1 -> always use uint index data (both
merged/unmerged, convert when needed - with some rhi backends this is
implicit)
QSG_RENDER_LOOP -> to override the render loop as usual. The default
with RHI is threaded for Metal, threaded for Vulkan on Windows, basic
for Vulkan on Linux and Android (to be checked later), while the existing
rules apply for OpenGL.
Not supported when running with QRhi:
- particles
- compressed atlases (though this is transparent to the apps)
- QSGRenderNode
- QQuickRenderControl
- QQuickFramebufferObject
- certain QQuickWindow functionality that depends directly on OpenGL
- anisotropic filtering for textures
- native text may lack some gamma correction
- QSGEngine applicability unclear
- some QML profiler logs may be incorrect or irrelevant
Change-Id: I7822e99ad79e342e4166275da6e9e66498d76521
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The qmlscene --resize-to-root feature has always been missing from
the qml runtime tool; however it was already possible to add it by
writing a custom configuration file. Now we support loading different
configurations from resources as well as from the filesystem, and
the first new configuration being added here is resizeToItem.qml
which provides behavior equivalent to qmlscene --resize-to-root.
When the argument given to --config ends with .qml, by convention
it's to be loaded from the filesystem; whereas configurations from
resources are specified without the .qml extension (to make the
command line shorter).
[ChangeLog][QtQml][qml] The QML Runtime tool now has default behavior
matching qmlscene when the root QML object is an Item: it will be
wrapped in a Window which will resize the Item when the Window is
resized. But you can alternatively use the --config resizeToItem
option, resulting in the same behavior as qmlscene --resizeToRoot:
resizing the root Item programmatically causes the wrapping Window to
be resized. Behavior can still be customized in other ways using the
--config option with an external QML configuration file.
Task-number: QTBUG-53557
Change-Id: Icdcbbd12258105c33b64634049d735e022dfbd06
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
[ChangeLog][QtQml][qml] The QML Runtime tool --quiet option now
disables categorized logging in addition to qDebug, qInfo, qWarning
and qFatal, except for some early QPA-level categorized logging that
occurs during application construction. You can still override
specific categories by setting QT_LOGGING_CONF or QT_LOGGING_RULES.
Change-Id: Icf986a7fa9980d07beed308df8f69fcc4da9d771
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Some advantages:
- support double-hyphen options as well as the existing single-hyphen options
- support translation of the usage text
[ChangeLog][QtQml][qml] The QML Runtime tool now accepts command-line
arguments in double-dash GNU style as well as the old single-dash style.
Task-number: QTBUG-53557
Change-Id: I9929c63841272894640abe254efaea9773eee633
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
A new one has been drawn; use it on all platforms, not just on macOS.
It is now also used as the default window icon, to be more identifiable
when minimized, etc. Of course it can be overridden by plugins that
can be loaded from qml.
[ChangeLog][QtQml][qml] The QML Runtime tool now has an updated
application icon and a default window icon. QtQuick applications
can still use QWindow::setIcon() to override the window icon.
Task-number: QTBUG-70826
Task-number: QTBUG-74662
Change-Id: I8671d0c99f7f4283dbe2dc4c605abb560f7bf1a1
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Name the variables in a self-documenting way. While we're at it, do
initialization at declaration when possible, reorder the public
sections before the private ones, fix comment spacing, and use
function-pointer connect syntax where possible.
Change-Id: I3fddc8f6d27afa197d425fb7ae3baee02acedceb
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
QTranslator::install(QLocale, ...) indirectly uses
QLocale::uiLanguages(), which is the correct way to
ask the system for ui languages.
This was already attempted once in commit 427646b8d7,
but reverted later on in commit 05d8ffb4df, because
it requires shipping .qm files for the native language.
Anyhow, we're shipping empty Qt translations for English
since a while, and also have been fixing our examples
to do so.
[ChangeLog][Important Behavior Changes]
The automatic translation loading in qml, qmlscene
and QQmlApplicationEngine now tries to load translations
for all languages in QLocale::uiLanguages().
This might require shipping an empty translation for the
source language.
Task-number: QTBUG-7329
Task-number: QTBUG-41977
Task-number: QTBUG-69196
Change-Id: Ifcf45b453ee9d05c018f379cc01e192d1b0a3f56
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
From now on we prefer nullptr instead of 0 to clarify cases where
we are assigning or testing a pointer rather than a numeric zero.
Also, replaced cases where 0 was passed as Qt::KeyboardModifiers
with Qt::NoModifier (clang-tidy replaced them with nullptr, which
waas wrong, so it was just as well to make the tests more readable
rather than to revert those lines).
Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
It should be possible to switch it off without globally switching
animations off in Qt.
Change-Id: I3cae6b72b2c6b5c420f21625208de5e273839438
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Change-Id: Ie45a2f01def64941a323973ea27446e3fc85a72b
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
After change dc6b73390b262b9554599cbf40539763b1280261 in qtbase,
the qml runtime was failing at an assertion in
QQmlTypeLoader::getType() which tries to avoid relative URLs
and relative directory paths. It's important to convert
relative paths to fully-qualified paths when converting to
an URL, because QQmlTypeLoader uses it as a cache key, and
we want to avoid ambiguity about which file is being cached.
Task-number: QTBUG-57870
Change-Id: Ib984cf722009f5f04cb67fffbc52d12bcc98df89
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Instead use QT_CONFIG(foo). This change actually detected a few
mis-spelled macros and invalid usages.
Change-Id: I06ac327098dd1a458e6bc379d637b8e2dac52f85
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Mark some local variables or parameters as const
to prevent detach()'ing.
Use qAsConst where is not possible mark as const.
Change-Id: I0a777c3bd855abd3bb1ad0907152360cf4a1050e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This is similar to the Qt.quit() function but also specifies the return
code that the event loop will return.
[ChangeLog][QtQml] Added exit(int retCode) method to the Qt global object.
An application can call Qt.exit to specify a return code of the engine.
Task-number: QTBUG-54360
Change-Id: Iaa319e6dc4d6b99dc3a5c01845e87b936fd2cab0
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
From Qt 5.7 -> tools & applications are lisenced under GPL v3 with some
exceptions, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/
Updated license headers to use new GPL-EXCEPT header instead of LGPL21 one
(in those files which will be under GPL 3 with exceptions)
Change-Id: I04760a0801837cfc516d1c7c02d4f503f6bb70b6
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Re-enable the options after the attributes have their final names.
Add options for enabling scaling.
This reverts commit 051684f125.
Task-number: QTBUG-46615
Task-number: QTBUG-48379
Change-Id: If862061c688f9febff3b9511a4f19649b07d2011
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
To be re-enabled once the attribute names are final.
Task-number: QTBUG-46615
Change-Id: Id463167ab102e3c2f3af4fe39675853eae3bb851
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
This is an amended backport of change 668ccf18d in dev.
Change-Id: I168a4d5a55c34592599a557bef941ce1629c8178
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Make static contain() a member of LoadWatcher() and connect to
QQuickWindow::onOpenGlContextCreated(). Print information similar
to qtdiag.
Change-Id: I0bc6bc43418e4392c6b5e2643d4f7899ff4f4f8b
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
In a QML/C++ application there may be additional code after app.exec().
In a pure QML application this is not the case, and you may wish to call
Qt.quit() during scene creation (before app.exec()).
[ChangeLog][QtQml][qml] qml tool now quits immediately if Qt.quit()
is called before all scenes complete creation.
Change-Id: I5c6fb64769724350ef3d74c34e2ede2d06562e4b
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
The bumping of a version number shouldn't "unpublish" any types.
Change-Id: I01ceb70442cb6643478f75bb5729f3db7c989bfa
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
Especially useful when the program is invoked indirectly by a shell
running the QML file like an executable.
Such script executable often don't have an extension to make their
invocation look like that of binary executables.
[ChangeLog][QtQml] Make it possible to make script without .qml suffix
Change-Id: I5a569bdea185cfa60ce68afa27ae03278b1acdb8
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
The first argument is the command name. There's no need to
compare it against possible arguments.
Change-Id: I776f10b6872286f89f07582b81d4990260ef9ddc
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Change-Id: I61120571787870c0ed17066afb31779b1e6e30e9
Reviewed-by: Iikka Eklund <iikka.eklund@theqtcompany.com>
Not all platforms do have QRegularExpression as it is based on
pcre.
Change-Id: I3247f8b2213f78a6e537f6781d97b0c6382482ad
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This reverts commit 427646b8d7.
It seems that it should have been more correct, but we are still not
shipping English translations, and static QString find_translation()
in qtranslator.cpp will return any language which is in
QLocale::uiLanguages() for which the translation file is found.
That is a long list on OSX.
Reverting the patch means find_translation() is not called in
such cases. This change can be re-done whenever we are more sure
that the attempt to find a translation will succeed in finding a
sensible one, or fall back to not translating, rather than choosing
a language that the user didn't intend.
Task-number: QTBUG-41977
Change-Id: I425946cc71cec96b4f38629eb2b7e80220c5236d
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
As the docs explain, the variant of QTranslator::load() taking a
const QLocale& is better because it "uses QLocale::uiLanguages()
and not simply the locale name, which refers to the formatting of
dates and numbers and not necessarily the UI language." And, using
a default-constructed QLocale permits QLocale::setDefault() to
override the system locale, so for example an application's
main.cpp can do that before constructing a QQmlApplicationEngine.
Task-number: QTBUG-7329
Change-Id: Ia29a4c894087c92b071c0fe484728866f2660fe6
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
This affects the location of the QSettings files or registry entries.
Other parts of Qt are using this organization name so it's good to
have all the settings in the same place.
[ChangeLog][QtQuick] tools and examples consistently use the
QtProject organization name
Change-Id: I1fae4eaed0248411fe95dda9572d38006648b162
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Fix some spelling errors in the command usage string.
Change-Id: Iee94987d0a3dff78e39f588b4c21415ed40a514c
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>