aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/context2d/qquickcontext2dtexture.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Update copyright headersJani Heikkinen2015-02-121-7/+7
| | | | | | | | | 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>
* Make Canvas use texture atlas for smallish Image based canvases.Gunnar Sletta2014-09-301-13/+6
| | | | | | | | | | | This makes Canvas with Image batchable in the renderer which means that it is feasible to have 100s of small Canvases in a scene, for instance as static icons rendered with a bit of script. Change-Id: I3ad57360d632b7093fd6993afa88ed35c21d178a Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* Update license headers and add new licensesJani Heikkinen2014-08-251-19/+11
| | | | | | | | | - 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>
* Merge branch '5.3' into devGunnar Sletta2014-08-071-19/+31
|\ | | | | | | | | | | | | | | Conflicts: src/quick/items/context2d/qquickcontext2d.cpp src/quick/items/context2d/qquickcontext2dtexture.cpp Change-Id: I1a9b911b3a92333a5dddbaf43275f71bad2006f0
| * More QQuickCanvas cleanup handling.Gunnar Sletta2014-08-011-19/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid calling into QQuickContext2D from QQuickContext2DTexture after QQuickContext2D has been deleted. We acheive this by 1. Giving the texture a direct pointer to the gl context and and surface, so that it doesn't need to go through m_context to get to them (which may have been deleted). 2. Protect access to QQuickContext2DTexture::m_context with a mutex and make sure it is set to 0 in a safe manner when the QQuickContext2D object is deleted. Change-Id: Ie0a30f9fc46f844224838a7cdf2f28a62e8ce322 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
| * Make canvas cleanup work propertly...Gunnar Sletta2014-08-011-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Depending on which mode we are in, we need to run cleanup on the right thread and in the right way. Image canvas doesn't contain any GL resources and can be nuked right away. The actual QSGTexture is managed by the node, so we don't need to worry about it. For FBO it is a bit more complicated. - Threaded: We create a cleanup handler that runs makeCurrent deleteTexture and doneCurrent and then release the surface on the GUI thread. - Immediate: Same as threaded, just right away - Cooperative: Schedule the texture to be deleted on the next sync. The Context doesn't have its own GL context in this case, so don't worry about it. Change-Id: I2d0ae7acfa05561faa52f3cacd767eb18cabaf02 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
| * Use the current context to resolve extensions.Gunnar Sletta2014-08-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | When updating the code to not use direct gl calls, this code was changed to use the context's gl context. The context doesn't have a context when the rendering happens on the same thread as the scene graph rendering and we get a crash. Change-Id: I8adf62c0ed12bb055982a71ba59af76afeefcca1 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Support Canvas.antialiasing without multisample support.Gunnar Sletta2014-08-011-4/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FBO based rendering relies on framebuffer multisampling to do antialiasing, which is often not available on OpenGL ES and even on some desktop chips. As a high-level API, it is quite bad that Canvas users (on embedded in particular) have to choose between quality (Image) or performance (FBO). This change implements super sampling, rendering the content at twice the size and then scaling it down. [ChangeLog][QtQuick][Canvas] Implement antialiasing on FramebufferObject based render targets through super-sampling (SSAA) when framebuffer multisampling is not available. Change-Id: I373f3a645342dac157506b746c1e39b0f3f3f9f2 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Make canvas cleanup work propertly...Gunnar Sletta2014-07-311-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Depending on which mode we are in, we need to run cleanup on the right thread and in the right way. Image canvas doesn't contain any GL resources and can be nuked right away. The actual QSGTexture is managed by the node, so we don't need to worry about it. For FBO it is a bit more complicated. - Threaded: We create a cleanup handler that runs makeCurrent deleteTexture and doneCurrent and then release the surface on the GUI thread. - Immediate: Same as threaded, just right away - Cooperative: Schedule the texture to be deleted on the next sync. The Context doesn't have its own GL context in this case, so don't worry about it. Change-Id: I2d0ae7acfa05561faa52f3cacd767eb18cabaf02 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Use the current context to resolve extensions.Gunnar Sletta2014-07-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | When updating the code to not use direct gl calls, this code was changed to use the context's gl context. The context doesn't have a context when the rendering happens on the same thread as the scene graph rendering and we get a crash. Change-Id: I8adf62c0ed12bb055982a71ba59af76afeefcca1 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Avoid direct GL calls in QuickLaszlo Agocs2014-05-231-4/+5
|/ | | | | Change-Id: I9b8673fb3292c9d5ad2f9e8e63f56dc661699be6 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Fix crashes and incorrect extension queries on GL3+Laszlo Agocs2014-02-251-3/+3
| | | | | | | | | | | | | | | glGetString(GL_EXTENSIONS) is deprecated in OpenGL 3.0+. This means that in core profiles on 3.2+ (or without the fwd compatibility bit on 3.0/3.1), the call is not supported and may return NULL. This causes a crash in at least one place where we try to blindly strstr the result. The correct solution is to use QOpenGLContext::extensions() and hasExtension() which is prepared to handle GL3+. Change-Id: I52fec7dcee001cdc0933af03f5eed4b7c822b2bb Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Add Image::mipmap to support mipmapping of images.Gunnar Sletta2014-02-121-2/+0
| | | | | | | | | [ChangeLog][QtQuick] New feature: Image.mipmap Task-number: QTBUG-19961 Change-Id: I13acb2408d5b126790adaf9d324ad4beda1e3646 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Improve the Canvas threading modelGunnar Sletta2013-12-031-68/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The canvas classes were mixing scene graph resources and GL content across threads. This led to a number of potential crashes in addition to that the FBO based rendering had significant potential for stalling. QQuickContext2DTexture is no longer a QSGTexture with ambiguous ownership. Instead we use textureForNextFrame which is called on the render thread while the GUI is locked to synchronize state from the Context2D's "texture" into the actual QSGTexture. This means that cleanup of the QQuickContext2DTexture and the QSGTexture used for display is no longer in conflict. QQuickPixmap no longer contains a QSGTexture either as these are strictly for use on the scene graph thread. The Images are anyway loaded explicitly as QImage files in QQuickContext2DContext and uploaded again for every Canvas, so relying on the GL paint engine to do the caching will give us the same with less code. I also changed the default strategy to Immediate as that one supports the full API (cooperative does not support readback) and because cooperative is pretty bad for performance since the rendering happens in the sync() step. Task-number: QTBUG-34268 Task-number: QTBUG-31052 Task-number: QTBUG-21935 Task-number: QTBUG-30689 Task-number: QTBUG-29007 Change-Id: Ic540b22d5faa1188e21e56a3beee24191d13f423 Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* Fix license headers of QtQuick sources.Gunnar Sletta2013-09-301-1/+1
| | | | | Change-Id: I3750c47640bf21c3567c5fa1c4667e3e2552942e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Make sure we propegate the filtering state to the internal texture.Gunnar Sletta2013-08-151-1/+1
| | | | | Change-Id: Id928cf35eba254270b29a34129eb977dab34db63 Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
* Make Canvas respect smooth: true/falseGunnar Sletta2013-05-151-0/+1
| | | | | | Change-Id: I6e68fcfc534aca139484a9b2970e61fb22688c58 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-101-1/+1
| | | | | | Change-Id: I6c3bd7bebe3d62d1cfd0fa6334544c9db8398c76 Reviewed-by: Akseli Salovaara <akseli.salovaara@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-231-24/+24
| | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: Ie7f5d49ed8235d7a7845ab68f99ad1c220e64d5c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Use the new antialiasing property for canvas paintingCharles Yin2012-08-281-8/+19
| | | | | Change-Id: I76f21d055696978f2f6936006eea038dd73cce6c Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
* Refactor context2d thread logicCharles Yin2012-07-311-201/+73
| | | | | | | | | | 1. Use QQuickContext2DRenderThread for Threaded rendering 2. Make FBO target works with all render strategies 3. Remove some unnessary locks, call texture methods by invoking meta calls 4. Run existing tests with all render targets and strategies (except Cooperative) Change-Id: I0db5c91d848b86bcc1536c30d7a5804b66a817f1 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
* Introduce QQuickCanvasPixmapCharles Yin2012-06-051-1/+1
| | | | | | | | | | 1. QQuickPixmap now only store textures instead of QImage data, however context2d still need to access the QImage in some places, so cache the loaded images to avoid the expensive GL readback operations. 2. Use texture directly if the render target is FBO. Change-Id: I6228011e5698fa00f2e3420a3a4a305995b8a238 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
* Fix resizing of Canvas item that use FBO as renderTargets.Charles Yin2012-06-041-0/+5
| | | | | | Change-Id: I2a158e7838f637a662700290f9f4fd28ca726d1e Task-number: QTBUG-25992 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
* Enable threaded/immediate rendering for FBO(step 1)Charles Yin2012-05-311-0/+21
| | | | | | | | | 1. Create a new gl context if the scenegraph render thread is different with context2d render thread 2. Expose the gl context and window surface from context2d 3. Get the right current gl context before painting Change-Id: I5e252a8142d760442f9dfb53ed8a8ce289379af9 Reviewed-by: Glenn Watson <glenn.watson@nokia.com>
* Do not use deprecated APIOlivier Goffart2012-04-241-2/+2
| | | | | | | Change-Id: I0c61f9cb4abe926d5f1e0a3acda7117d8d54efb6 Reviewed-by: Simjees Abraham <simjees.abraham@nokia.com> Reviewed-by: Kai Koehne <kai.koehne@nokia.com> Reviewed-by: Matthew Vogt <matthew.vogt@nokia.com>
* Repaint the canvas item properly when canvas resizedCharles Yin2012-03-071-0/+1
| | | | | | Task-number:QTBUG-23594 Change-Id: I703a5190b5b306666ffd61001ff94f296399465f Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
* Continue refactor of Canvas rendering.Justin McPherson2012-03-061-3/+11
| | | | | | | | - Remove sync() - not necessary - Queue buffer before flush Change-Id: If7dea8e56a612d241c67a82eae265febc45059a8 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
* Use NPOT support if available.Justin McPherson2012-03-061-46/+36
| | | | | | | In QQuickContext2DTexture. Change-Id: If0311450658a837b7e2665c041ec2846e3c8c2dd Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
* Rename QDeclarative symbols to QQuick and QQmlMatthew Vogt2012-02-241-1/+1
| | | | | | | | | | | | | Symbols beginning with QDeclarative are already exported by the quick1 module. Users can apply the bin/rename-qtdeclarative-symbols.sh script to modify client code using the previous names of the renamed symbols. Task-number: QTBUG-23737 Change-Id: Ifaa482663767634931e8711a8e9bf6e404859e66 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Refactor Canvas rendering paths.Justin McPherson2012-02-101-66/+38
| | | | | | | Refactor Canvas rendering paths to enable different drawing contexts. Change-Id: If0e00a14baa673fca6b999a787b4e89885bb1e51 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
* Remove "All rights reserved" line from license headers.Jason McDonald2012-01-301-1/+1
| | | | | | | | | | As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: If39bd256b0fa85eba17ea30f8ab87ea27d758908 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Rename QSGTexture::textureSubRect to normalizedTextureSubRect()Gunnar Sletta2012-01-271-1/+1
| | | | | Change-Id: Id61cdaf1078d7b61d39644a80df8067f4ce4ceb0 Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Update obsolete contact address.Jason McDonald2012-01-231-1/+1
| | | | | | | | Replace Nokia contact email address with Qt Project website. Change-Id: I6a730abc0c396fb545a48b2d6938abedac2e3f1c Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
* Update copyright year in license headers.Jason McDonald2012-01-051-1/+1
| | | | | Change-Id: I0a8d99909cac867dce72da70b1bbcb649989a51b Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Say hello to QtQuick moduleKent Hansen2011-12-021-0/+778
This change moves the QtQuick 2 types and C++ API (including SceneGraph) to a new module (AKA library), QtQuick. 99% of this change is moving files from src/declarative to src/quick, and from tests/auto/declarative to tests/auto/qtquick2. The loading of QtQuick 2 ("import QtQuick 2.0") is now delegated to a plugin, src/imports/qtquick2, just like it's done for QtQuick 1. All tools, examples, and tests that use QtQuick C++ API have gotten "QT += quick" or "QT += quick-private" added to their .pro file. A few additional internal QtDeclarative classes had to be exported (via Q_DECLARATIVE_PRIVATE_EXPORT) since they're needed by the QtQuick 2 implementation. The old header locations (e.g. QtDeclarative/qquickitem.h) will still be supported for some time, but will produce compile-time warnings. (To avoid the QtQuick implementation using the compatibility headers (since QtDeclarative's includepath comes first), a few include statements were modified, e.g. from "#include <qsgnode.h>" to "#include <QtQuick/qsgnode.h>".) There's a change in qtbase that automatically adds QtQuick to the module list if QtDeclarative is used. Together with the compatibility headers, this should help reduce the migration pain for existing projects. In theory, simply getting an existing QtDeclarative-based project to compile and link shouldn't require any changes for now -- but porting to the new scheme is of course recommended, and will eventually become mandatory. Task-number: QTBUG-22889 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Change-Id: Ia52be9373172ba2f37e7623231ecb060316c96a7 Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@nokia.com>