| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
Modernizes the code, and fixes a bunch of compiler warnings from using
foreach on non-shared containers.
As a drive-by, fix coding style for pointer variables.
Change-Id: Ida65b6b3c3ce04b2575e0b95bae1e3cca3ea636a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
|
|
|
|
|
|
|
|
| |
Don't crash and make it work as expected.
Task-number: QTBUG-37491
Change-Id: I0b94fdfa0a79dd43b762b03b24e3415762eecd95
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Minor improvements while going through the particles sources:
- Reduce getShadowDatum() calls
- Remove unused m_lastLevel, reloadColor(), m_available
m_velocityFromMovement, maximumAlive, m_pending, m_lastT,
m_last_last_last_emitter, modelIndex
- Color4ub structs can be assigned directly
- Fix pri for shaders_ng files
- Other minor refactoring
Task-number: QTBUG-88124
Change-Id: I5768fed9f4b6379a698849c23436fa38169833a4
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
| |
The implementation is intertwined with the direct GL path and not
really portable to RHI.
Fixes: QTBUG-78574
Change-Id: I6ac8707544c19a24661f07e0e6d2fc405e49cbff
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an affector acts on a particle, it will add it to a set
of "seen" particles. This means an allocation, per particle,
per frame.
In Qt 6 the problem is less dramatic due to the new QHash
implementation, which uses "wider" buckets, but in Qt 5 this is
hundreds of memory allocations (and deallocations) per frame.
Just reimplement a minimal flat-set API for this use case,
and replace the QSet usages with it. On a testcase with
200 active particles, this reduces memory allocations from
~20'000 per second to 0 when the scene is "stable".
Pick-to: 5.15
Change-Id: I4be1e12a23b8dffca91955148532db243e383a4c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The infinite loop was triggered by several issues coincide together.
In short, the direct cause is the particle's born time and lifespan were
represented in 32 bit floats and not precise enough to pass aliveness check as
time grows large.
While the time grows large, the resolution of floating point decreases to the
extent that resolution is even bigger than 2 milliseconds.
Then it will fail to pass the aliveness check. Then, the
dead particles will be treated alive and they are kept inserting into and
popping out of the particles heap, which is similar to a live-lock.
The fix is to separate freeing dead and inserting back alive ones in two
different loops, ensure that the emitter can update time for next frame.
There are still other issues:
1) as the times runs very long, the particle needs several frames's updates
to actually make the states change noticeable, which means animation may
become not so smooth after running for too long (like several days).
May change particle's born/lifespan time to 64 bits in another patch.
2) the particle system's and animation's timers are 32 bit integers,
after 2^31 milliseconds(24.8551348 days), they will overflow. May promote
them to 64 bits in another patch.
3) as the time grows even larger such that the resolution is bigger than 16ms
at 60 hz frame rate, the live-lock may occur again. Because the timer advances/delta
will be not large enough to make dead ones reused.
The next live-lock estimated time is 2^24*16 milliseconds = 3.10689185 days.
The final fixes are 1) and 2)
4) may change the particle system's internal timer be set to arbitrary value
(fast forward to large value) for easier writing autotest for above cases.
Change-Id: I1190c0814c8197876b26dd4182dc4b065dd1ece6
Task-number: QTBUG-64138
Reviewed-by: Vitaly Fanaskov <vitaly.fanaskov@qt.io>
|
|
|
|
|
|
|
|
| |
This is just an alias for QV4::ReturnedValue. We can as well use the
latter.
Change-Id: Ibd2c038a3ca726b39a8f0f05e02922adb9fccbdb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-68933
Change-Id: Ibb5aa227e82825085e7214e17dcffcb17fd44157
Reviewed-by: Topi Reiniö <topi.reinio@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>
|
|
|
|
|
|
|
|
| |
As QJSEngine's handle() method is internal, we can redefine it to return
a pointer to an ExecutionEngine. That makes many things easier.
Change-Id: Ie3df99e0bad5f00ad4fe73182896cd135fa82994
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
| |
Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
| |
A guarded pointer wasn't checked before being de-referenced, that lead
to a crash if an emitter was modified after an affector was deleted, but
before updateCurrentTime() was called.
Change-Id: I6cb605a711319fb77c1e2e87fa9f35427cd7797b
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QSignalMapper ought to be deprecated soon.
It simplifies the code, too.
There is still one use in QQuickGenericShaderEffect which is a bit complicated
to get rid of. A very similar use of QSignalMapper was in use in
QQuickOpenGLShaderEffectCommon but was removed in commit 8c745d80, the same
should be done for QQuickGenericShaderEffect.
(Note the QueuedConnection in qquickparticlesystem is there because the
QSignalMapper used to be in the main thread, meaning a round-trip via the
event loop)
Change-Id: I331b787becbad37f717035bf119bafd7a7214630
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-52325
Change-Id: I38d90b6fb0d7468fb0916bd6dfd1cf07ace4389b
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a particle emitter is not yet complete, calling emittersChanged
through both groupChanged and systemChanged is unnecessary. Only connect
to those signals once after the component is complete, and then call
emittersChanged.
Also do not call emittersChanged when the particle system component is
not complete yet.
Change-Id: I67543ce80c9235bd5f72d95352ec96e97a1cf66b
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
| |
Calls to these functions often occur in sets of two (x, y) or even more
(x, y, vx, vy, etc). By allowing the compiler to inline, it allows for
many CSE opportunities. Also, if your compiler is reasonably good, it
will also auto-vectorize the operations.
Change-Id: I4bffe4826671dd60683b941a569fc6a7b4b34da7
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The reusableIndexes represented a "free-list". Now the allocation
behavior in QQuickParticleGroupData::setSize was to grow by (large)
chunks. That means that as soon setSize was called, a (big) number of
hash entries was created, which are drained over time. This memory would
stay around (and probably unused) as long as the group was alive.
By using a bit vector, the amount of memory is much more compressed,
and finding an entry takes less time. The FreeList "caches" the next
free entry, because allocation and de-allocation behavior is that they
occur bunches: allocate a number of particles, use them, allocate the
same number.
Test case: samegame, 1 player, click 1 set of 3 stones, quit.
QQuickParticleSystem::emittersChanged(), before patch:
- 21 instr. inclusive, 15M in QQuickParticleGroupData::setSize
- 23,000 calls to QHashData::allocateNode
after:
- 13M instr. inclusive, 7M in QQuickParticleGroupData::setSize
- 0 calls to QHashData::allocateNode
Change-Id: If35ea5ed9b29129f210638f6f59275a24eb6afdc
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
| |
Samegame creates about 23,000 particles, so this reduces the memory by
~180kb on 32bit, so ~360kb on 64bit.
Change-Id: I0581524ab232b474c5d43abeabd7ebf6174e740f
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By caching the group id in the particle emitter, and groups in the
painter.
Test case: samegame, 1 player, click 1 set of 3 stones, quit.
QQuickParticleSystem::emittersChanged(), before patch:
- 64M instr. inclusive
- 145,880 calls to findNode (29M instr.)
after:
- 21M instr. inclusive
- 0 calls to findNode
- 25 calls to QQuickParticlePainter::recalculateGroupIds (9800 instr.
inclusive).
Change-Id: I4aba9d50100513c6b7cdd230e30b3aecaf84485a
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
| |
And when in the area, remove 3 unused functions.
Benchmark: start samegame, click '1 player', quit.
Valgrind result: removes/inlines ~90,000 calls.
Change-Id: If911b19b46bf163f7fe678623c068f960296f17e
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
|
| |
Replace QHash<int, QQuickParticleGroupData*> groupData with a
QVarLengthArray, and make sure that those integers (== indices) are
continuous, re-used, and start at zero. That way a whole bunch of qhash
calls, hash node creatrion/deletion, and other overhead is removed.
Change-Id: Ie74fab8a3e3c7b6efa15b7b9ceff1d1a3e9820e9
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
|
| |
From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/
Updated license headers to use new LGPL header instead of LGPL21 one
(in those files which will be under LGPL v3)
Change-Id: Ic36f1a0a1436fe6ac6eeca8c2375a79857e9cb12
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
| |
Change-Id: I02755796e3a5c5a3bb39e125a45d968a750e58e1
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
|
|
|
| |
Change-Id: I417250992dbba3b67e891b0e929c09f2c95da299
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
| |
Change-Id: Id4820ac458f48b10f2bf457144767efdef9e2c07
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
|
|
|
|
|
|
|
| |
x86_64.
Change-Id: Ide7a70baecf6d1ff3ec8160a2cb47f0bd9955e45
Reviewed-by: Alan Alpert <aalpert@blackberry.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>
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/qml/jsruntime/qv4arraydata.cpp
src/qml/jsruntime/qv4context_p.h
src/qml/jsruntime/qv4globalobject.cpp
src/qml/jsruntime/qv4internalclass.cpp
src/quick/items/qquicktext_p.h
src/quick/items/qquicktextedit_p.h
src/quick/items/qquicktextinput_p.h
Change-Id: If07e483e03197cb997ef47a9c647a479cdb09f4c
|
| |
| |
| |
| |
| |
| |
| |
| | |
Since the command just links back to the corresponding module page, only the
first parameter is used, and the version causes more confusion.
Change-Id: I73ed289550c576747132f77b83c1257094059cd1
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
|
|\|
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/quick/items/qquickaccessibleattached_p.h
src/quick/items/qquickwindow.cpp
src/quick/scenegraph/qsgthreadedrenderloop.cpp
Change-Id: I8bf07487a75f9d1b0d6efa5914dd06875fc9654d
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Make sure that ImageData instances, m_shadowData as well as the
QSGGeometry of particle nodes are destroyed together with their
QQuickImageParticle.
Also implement the assignment operator for QQuickParticleData to
avoid its v8Datum pointer to be copied over to the shadow datum
in getShadowDatum. This would cause a double delete of the
QQuickV4ParticleData when trying to call clearShadows() in the
destructor.
Task-number: QTBUG-36782
Change-Id: Ie03f2be0415daeb7f4f6e5f92295a3ab26a62155
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This is more efficient, for the use we're seeing. In addition, reserve the size
in advance, to avoid reallocations.
Change-Id: I987ee7cea1aa32c4b1aad1246b6e22b87efd9cc6
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
| |
| |
| |
| |
| |
| |
| | |
This shaves off around 35ms from samegame setup of a large game.
Change-Id: I91cb7e8d8db5da672e0dcf30a3c0bb0fa855c93f
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
|/
|
|
|
|
|
|
|
|
|
|
|
| |
Before even checking the hash, perform the fast (empty string) check.
If it's not empty, then do a single hash lookup, not two of them. There's no
point doing a second lookup, since if it doesn't exist, we insert anyway.
This takes hash manipulation on samegame on a large screen from ~142ms to ~70ms,
which is expected.
Change-Id: I4e2a099e996f2f5fb95a5b066d7756373a1dbacd
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
|
|
|
|
|
|
|
|
| |
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3 & LICENSE.GPLv2
- Removed LICENSE.GPL
Change-Id: I84a565e2e0caa3b76bf291a7d188a57a4b00e1b0
Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com>
|
|
|
|
|
| |
Change-Id: I4c4577edde96978a986606bf30fbb925f871bd42
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
|
|
|
|
|
|
|
|
|
|
| |
All QML references of the form
<QML-module-name><QML-module-version>::<QML-type>::<member-name> have
had the <QML-module-version> removed i.
Task-number: QTBUG-33776
Change-Id: Idde279e0f254cd24ea44f9841662dd81a2c5bbc6
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
|
|
|
|
|
| |
Change-Id: Ifc48b73a2fbfda22d3c4419cb34dd5307107f688
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
|
|
|
|
|
| |
Change-Id: I87d2183738ec7cfeea846a28f2b9aed79a233f68
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
|
|
|
|
|
| |
Change-Id: I69cd4ccf51c40e2ee63f024a7ccc2d8b35b14ae4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
|
|
|
|
|
|
|
|
|
| |
The handle wraps a V4 Value, so this is the better name for it.
Also added some accessor methods to convert to and from V4
Values.
Change-Id: I327c83feb5bd3be59909001489979e5a3a9d9e67
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
|
|
|
|
|
|
| |
Change-Id: I6c3bd7bebe3d62d1cfd0fa6334544c9db8398c76
Reviewed-by: Akseli Salovaara <akseli.salovaara@digia.com>
Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Previously the particle system was only applying the translaton of the
relative transfrom from any emitters. Now the full transform is used.
Task-number: QTBUG-25518
Change-Id: I4c654837c37dbef8f6f407387ce4ea82cb3b821c
Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
|
|
|
|
|
|
|
| |
Change copyrights and license headers from Nokia to Digia
Change-Id: Ie7f5d49ed8235d7a7845ab68f99ad1c220e64d5c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
|
|
|
|
|
| |
Change-Id: I65e8ecdedde6d0faec8b8d61e320df73100faf2c
Reviewed-by: Bea Lam <bea.lam@nokia.com>
|
|
|
|
|
|
|
| |
Fixing some uses of qdoc commands and other minor fixes
Change-Id: I965f715ad8d7833c5a7b830d644c79ad51735da5
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
|
|
|
|
|
|
|
|
|
|
| |
-To simplify QDoc, \qmlclass is now \qmltype.
-'\instantiates <C+++ class>' is for the types that are defined in C++.
Change-Id: I29242d33daf7b972d8b86a356b9689638866b950
Reviewed-by: Laszlo Papp <lpapp@kde.org>
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Reviewed-by: Martin Smith <martin.smith@nokia.com>
|
|
|
|
|
|
| |
Task-number: QTBUG-26240
Change-Id: Ib58a47deea2706f7fd683106380d1618d8b1d2cd
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
|
|
|
|
|
|
|
|
| |
Matches the convention set in the QtQuick module, for example by
ListView and Flickable.
Change-Id: I8df57ed1ced8128723d790c30c00cc1b2062787d
Reviewed-by: Bea Lam <bea.lam@nokia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-created new groups and converted some overviews into group pages
-edited type documentation and added \ingroup
-articles still need title fixes and link fixes
Groups:
qtquick-visual-types
qtquick-item-graphics
qtquick-shaders
qtquick-canvas
qtquick-text
qtquick-text-validator
qtquick-interaction
qtquick-positioners
qtquick-transformations
qtquick-states
qtquick-animation-define
qtquick-animation-properties
qtquick-animation-control
qtquick-animation-modifiers
qtquick-images-sprites
qtquick-images
qtquick-models
qtquick-containers
qtquick-views
qtquick-paths
qtquick-utility
Task: QTBUG-25685
Change-Id: I81d4df3320bf5daad5cabb5e42408013fb24f464
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
|