aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/scenegraph/openvg
Commit message (Collapse)AuthorAgeFilesLines
* Fix qtdeclarative build configured with -qreal=floatDonald Carr2019-03-311-4/+4
| | | | | | | There is a sole point of failure in Qt 5.13 beta1 Change-Id: I58a41e310604a8bccbf14f463f734877d6a65a73 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Merge remote-tracking branch 'origin/5.11' into 5.12Qt Forward Merge Bot2018-12-113-5/+16
|\ | | | | | | Change-Id: If18e582a7210dae046426d97af530ab7ef47ddf4
| * Fix leaking resources by OpenVG scene graph backendKirill Burtsev2018-11-143-5/+16
| | | | | | | | | | Change-Id: I4e67c639d8343e39673ef5ea08bda7af033fb19f Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | Add support for horizontal gradients in RectangleMichael Brasser2018-05-032-4/+12
|/ | | | | | | | | [ChangeLog][QtQuick] Added support for horizontal gradients in Rectangle. Change-Id: I4feee8ec93d9fe75a9f91a7afbe33c8d4756cedb Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
* Fix crash with the software renderer and windows with QObject parentSimon Hausmann2018-02-151-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a QQuickWindow is a child of another QObject (such as a Loader) and is scheduled for deletion using a deferred delete event, then a deletion via the parent ends up calling the window's destructor, which will finally end up in ~QObject(), which takes care of removing the posted deferred deletion event from the event queue. In the case of QQuickWindow, the destructor - called before ~QObject - calls windowDestroyed(this) on the SG render loop. The implementation in the software renderer calls QCoreApplication::sendPostedEvents() with QEvent::DeferedDelete, which ends up deleting the same window a second time and resulting in a crash. I can't see a good reason for the existence of the sendPostedEvents() call there. It is not present in the other render loops and according to git blame it stems from the very early first implementation of the software renderer where surely copy & paste from other render loop code was involved back then. The same fix is applied to the single-threaded VG and D3D12 render loops, as they are most likely copy & paste from the software render loop implementation. ASAN trace for tst_qquickwindow::unloadSubWindow() on 5.11 branch that shows invalid access to the QObjectPrivate/QQuickWindowPrivate, which follows the QObject in terms of life-cycle: ==4736==ERROR: AddressSanitizer: heap-use-after-free on address 0x617000011778 at pc 0x7fdd211cfbb3 bp 0x7fffecb47ea0 sp 0x7fffecb47e90 READ of size 8 at 0x617000011778 thread T0 #0 0x7fdd211cfbb2 in QQuickWindow::~QQuickWindow() items/qquickwindow.cpp:1308 #1 0x7fdd21470974 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() items/qquickwindowmodule_p.h:63 #2 0x7fdd21470974 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() .../qqmlprivate.h:103 #3 0x7fdd21470974 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() .../qqmlprivate.h:103 #4 0x7fdd1e24da24 in qDeleteInEventHandler(QObject*) kernel/qobject.cpp:4601 #5 0x7fdd1e253d2f in QObject::event(QEvent*) kernel/qobject.cpp:1240 #6 0x7fdd1fbd1d41 in QWindow::event(QEvent*) kernel/qwindow.cpp:2356 #7 0x7fdd211f778e in QQuickWindow::event(QEvent*) items/qquickwindow.cpp:1628 #8 0x7fdd1e1a4e3c in QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) kernel/qcoreapplication.cpp:1216 #9 0x7fdd1e1a508b in doNotify kernel/qcoreapplication.cpp:1157 #10 0x7fdd1e1a555a in QCoreApplication::notify(QObject*, QEvent*) kernel/qcoreapplication.cpp:1143 #11 0x7fdd1fb87665 in QGuiApplication::notify(QObject*, QEvent*) kernel/qguiapplication.cpp:1723 #12 0x7fdd1e1a52fa in QCoreApplication::notifyInternal2(QObject*, QEvent*) kernel/qcoreapplication.cpp:1067 #13 0x7fdd1e1b6ed2 in QCoreApplication::sendEvent(QObject*, QEvent*) ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:234 #14 0x7fdd1e1b6ed2 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) kernel/qcoreapplication.cpp:1764 #15 0x7fdd1e1b8cda in QCoreApplication::sendPostedEvents(QObject*, int) kernel/qcoreapplication.cpp:1618 #16 0x7fdd210cb034 in QSGSoftwareRenderLoop::windowDestroyed(QQuickWindow*) scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp:100 #17 0x7fdd211cfb8c in QQuickWindow::~QQuickWindow() items/qquickwindow.cpp:1305 [...] 0x617000011778 is located 632 bytes inside of 704-byte region [0x617000011500,0x6170000117c0) freed by thread T0 here: #0 0x7fdd21a8a9d8 in operator delete(void*, unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe19d8) #1 0x7fdd2146fa3c in QQuickWindowQmlImplPrivate::~QQuickWindowQmlImplPrivate() items/qquickwindowmodule.cpp:57 #2 0x7fdd1e26b252 in QScopedPointerDeleter<QObjectData>::cleanup(QObjectData*) [...] #3 0x7fdd1e26b252 in QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::~QScopedPointer() [...] #4 0x7fdd1e26b252 in QObject::~QObject() kernel/qobject.cpp:882 #5 0x7fdd1fbcf51c in QWindow::~QWindow() kernel/qwindow.cpp:211 #6 0x7fdd211d0466 in QQuickWindow::~QQuickWindow() items/qquickwindow.cpp:1297 #7 0x7fdd211d0644 in QQuickWindow::~QQuickWindow() items/qquickwindow.cpp:1335 #8 0x7fdd1e2666b4 in QObjectPrivate::deleteChildren() kernel/qobject.cpp:1995 #9 0x7fdd1e26b329 in QObject::~QObject() kernel/qobject.cpp:1023 [...] Change-Id: Iffa90d365d02b074e2a78c5be2895c9f86a4b80e Task-number: QTBUG-66381 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Merge remote-tracking branch 'origin/5.9' into devLiang Qi2017-07-041-0/+1
|\ | | | | | | | | | | | | | | Conflicts: .qmake.conf src/quick/doc/src/qmltypereference.qdoc Change-Id: Ia58f1c5a98309c32ef8d8e5c893faf261215f19f
| * Delay the deletion of QSGTextures until all windows are synchronizedDominik Holland2017-06-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the 'basic' and the 'windows' render loop the scene graph context is shared. Because of this we cannot start deleting textures after the first window is synchronized as it may contain textures needed by the another window, which is not yet synchronized. QWindowPrivate::syncSceneGraph() is not calling endSync() anymore as it doesn't know whether it is the last window or not. Instead the renderloop is now responsible for calling endSync() once this is safe to do. Change-Id: Icb50ebfb447c928e38b41df7e26f3bfafdb4a811 Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com> Reviewed-by: Gunnar Sletta <gunnar@crimson.no>
* | Merge remote-tracking branch 'origin/5.9' into HEADSimon Hausmann2017-03-236-3/+19
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/qmltooling/qmldbg_debugger/qv4datacollector.cpp src/qml/jit/qv4assembler.cpp src/qml/jit/qv4assembler_p.h src/qml/jit/qv4isel_masm.cpp src/qml/jsruntime/qv4context.cpp src/qml/jsruntime/qv4context_p.h src/qml/jsruntime/qv4engine.cpp src/qml/jsruntime/qv4vme_moth.cpp src/qml/memory/qv4mmdefs_p.h Change-Id: I9966750b7cd9106b78e4c4779f12b95a481cca40
| * Build for for -no-feature-quick-spritePaul Olav Tvete2017-03-226-3/+19
| | | | | | | | | | Change-Id: Iaf26d9cec7f9fa7a5d6d24c729b2dc92737cca1f Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | QSGOpenVGLayer: Fix compilationRobin Burchell2017-03-221-0/+1
|/ | | | | | | Amends 48c31733383d14447d1c383cefca9ca40daa6a87. Change-Id: I9b30af689eaa9ca686b8ec2d034866eb4671ec95 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* OpenVG: Fix glyph cache to actually ref countAndy Nichols2017-02-282-13/+15
| | | | | | | | | In my haste to add the code to cleanup unused glyphs I neglected to add the coded needed to ref count the glyphs. So glyphs that were being used more than once were getting removed too early. Change-Id: If3fa083313c345beac6705956067bee0932f7f60 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Fix a compilation issueJędrzej Nowacki2017-01-312-4/+5
| | | | | | | | | | | | | src/plugins/scenegraph/openvg/qsgopenvgglyphnode.cpp: In member function ‘virtual void QSGOpenVGGlyphNode::render()’: src/plugins/scenegraph/openvg/qsgopenvgglyphnode.cpp:146:90: error: ‘ceil’ was not declared in this scope offscreenSurface = new QOpenVGOffscreenSurface(QSize(ceil(m_bounding_rect.width()), ceil(m_bounding_rect.height()))); src/plugins/scenegraph/openvg/qsgopenvgglyphnode.cpp: In member function ‘virtual void QSGOpenVGGlyphNode::render()’: src/plugins/scenegraph/openvg/qsgopenvgglyphnode.cpp:146:90: error: ‘ceil’ was not declared in this scope offscreenSurface = new QOpenVGOffscreenSurface(QSize(ceil(m_bounding_rect.width()), ceil(m_bounding_rect.height()))); Change-Id: I9993d9629d70eb6031b91c3827e3e2d79b0e1ffc Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Fix qtdeclarative compilationPaolo Angelelli2017-01-245-22/+93
| | | | | | | | On ubuntu 14.04 building qtdeclarative from the dev branch is impossible due to various errors in the openvg plugin. Change-Id: I1f2d7d61c36428e64cf3248e550ac5c4f0baa4b0 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
* Fix Q_QUICK_SG_PROFILE macros in OpenVG renderloopAndy Nichols2016-12-251-4/+8
| | | | | Change-Id: Ied37cc78b5338d17bb72735061be24cb20501d57 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* OpenVG: Fix Recursive LayersAndy Nichols2016-12-135-13/+56
| | | | | | | | OpenVG also needed to ping-pong between two offscreen surfaces like the OpenGL renderer. Change-Id: I41f671d98d361eb114be5c00ebfe62710a971aaa Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* OpenVG: Use QRawFont qHash function in font cacheAndy Nichols2016-12-132-28/+3
| | | | | | | A qHash function was added for QRawFont, so use that instead of our own. Change-Id: Iad8deb8a0e2a727039ec752e38e42cef2127735c Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* OpenVG: Support rendering paths with non-affine transformsAndy Nichols2016-12-1319-197/+586
| | | | | | | | | | | | The current approach to rendering paths (used by Rectangles and Glyph nodes) does not support rendering with non-affine transformations. That is because OpenVG does not support passing a non-affine transformation matrix when rendering paths. So instead when using a non-affine transform we will fallback to rendering to an offscreen VGImage, then rendering that as an image which can have a perspective transform. Change-Id: I01508bcb67b339323cb6400c7ff6d885b62c5e02 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* OpenVG Scenegraph AdaptationAndy Nichols2016-12-1338-0/+6043
This is an OpenVG backend for the Qt Quick 2 scenegraph. Should be feature complete now, but there are still some issues that could be improved in future commits: If Rectangle nodes are rendered with a non-affine transform, they will be rendered incorrectly. This is because paths expect affine transformations. The Glyph cache is a bit cheeky in that it's caching paths, but doing so per font size. It shoudln't need to, but right now I've not though up a good way of getting the transform/scale needed when rendering yet. Change-Id: Ie3c4f2df35d14279b0f9f55e0e10a873328c025b Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>