summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-02-15 20:44:33 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-02-15 20:44:33 +0100
commit9a67c418ebcd23b7a29dda123cccfd77f7d973fa (patch)
tree3aca6dc846ce966dd39362d4d94c70031afb5f55 /src
parent691d62dcd6c028e509ebb5241bb0a184faf3a5fc (diff)
parentd367ac81d5ef77f02434274524477dc0e5c2b4a4 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: .qmake.conf Change-Id: If24938cb15392873cfd45c49901c6f1cc3e9f128
Diffstat (limited to 'src')
-rw-r--r--src/imports/qtcanvas3d/canvasrenderer.cpp84
-rw-r--r--src/imports/qtcanvas3d/context3d.cpp8
-rw-r--r--src/imports/qtcanvas3d/doc/qtcanvas3d.qdocconf12
-rw-r--r--src/imports/qtcanvas3d/teximage3d.cpp77
-rw-r--r--src/imports/qtcanvas3d/teximage3d_p.h14
5 files changed, 108 insertions, 87 deletions
diff --git a/src/imports/qtcanvas3d/canvasrenderer.cpp b/src/imports/qtcanvas3d/canvasrenderer.cpp
index 760569e..192e8a7 100644
--- a/src/imports/qtcanvas3d/canvasrenderer.cpp
+++ b/src/imports/qtcanvas3d/canvasrenderer.cpp
@@ -318,64 +318,64 @@ void CanvasRenderer::init(QQuickWindow *window, const CanvasContextAttributes &c
*/
void CanvasRenderer::shutDown()
{
- if (!m_glContext)
- return;
-
QMutexLocker locker(&m_shutdownMutex);
- m_fps = 0;
+ if (m_glContext) {
+ if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer)
+ m_glContext->makeCurrent(m_offscreenSurface);
+
+ m_commandQueue.clearResourceMaps();
- if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer)
- m_glContext->makeCurrent(m_offscreenSurface);
+ deleteCommandData();
+ m_executeQueue.clear();
- m_commandQueue.clearResourceMaps();
+ delete m_renderFbo;
+ delete m_displayFbo;
+ delete m_antialiasFbo;
- deleteCommandData();
- m_executeQueue.clear();
+ if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) {
+ delete m_alphaMultiplierFbo;
+ m_alphaMultiplierFbo = 0;
+ glDeleteBuffers(1, &m_alphaMultiplierUVBuffer);
+ glDeleteBuffers(1, &m_alphaMultiplierVertexBuffer);
+ m_alphaMultiplierUVBuffer = 0;
+ m_alphaMultiplierVertexBuffer = 0;
+ delete m_alphaMultiplierProgram;
+ delete m_alphaMultiplierVertexShader;
+ delete m_alphaMultiplierFragmentShader;
+ m_alphaMultiplierProgram = 0;
+ m_alphaMultiplierVertexShader = 0;
+ m_alphaMultiplierFragmentShader = 0;
- delete m_renderFbo;
- delete m_displayFbo;
- delete m_antialiasFbo;
+ m_glContext->doneCurrent();
+ delete m_glContext;
+ }
- if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) {
- delete m_alphaMultiplierFbo;
- m_alphaMultiplierFbo = 0;
- glDeleteBuffers(1, &m_alphaMultiplierUVBuffer);
- glDeleteBuffers(1, &m_alphaMultiplierVertexBuffer);
- m_alphaMultiplierUVBuffer = 0;
- m_alphaMultiplierVertexBuffer = 0;
- delete m_alphaMultiplierProgram;
- delete m_alphaMultiplierVertexShader;
- delete m_alphaMultiplierFragmentShader;
- m_alphaMultiplierProgram = 0;
- m_alphaMultiplierVertexShader = 0;
- m_alphaMultiplierFragmentShader = 0;
+ m_renderFbo = 0;
+ m_displayFbo = 0;
+ m_antialiasFbo = 0;
- m_glContext->doneCurrent();
- delete m_glContext;
- }
+ // m_offscreenSurface is owned by main thread, as on some platforms that is required.
+ if (m_offscreenSurface) {
+ m_offscreenSurface->deleteLater();
+ m_offscreenSurface = 0;
+ }
- m_renderFbo = 0;
- m_displayFbo = 0;
- m_antialiasFbo = 0;
+ m_currentFramebufferId = 0;
+ m_forceViewportRect = QRect();
- delete m_glContextShare;
+ delete m_stateStore;
+ m_stateStore = 0;
- // m_offscreenSurface is owned by main thread, as on some platforms that is required.
- if (m_offscreenSurface) {
- m_offscreenSurface->deleteLater();
- m_offscreenSurface = 0;
+ m_glContext = 0;
}
- m_glContext = 0;
+ delete m_glContextShare;
+
m_glContextQt = 0;
m_glContextShare = 0;
- m_currentFramebufferId = 0;
- m_forceViewportRect = QRect();
-
- delete m_stateStore;
- m_stateStore = 0;
+ m_fps = 0;
}
/*!
diff --git a/src/imports/qtcanvas3d/context3d.cpp b/src/imports/qtcanvas3d/context3d.cpp
index f6bbc75..9d79e6f 100644
--- a/src/imports/qtcanvas3d/context3d.cpp
+++ b/src/imports/qtcanvas3d/context3d.cpp
@@ -5978,14 +5978,14 @@ QVariantList CanvasContext::getSupportedExtensions()
if (!m_isOpenGLES2 ||
(m_contextVersion >= 3
- || m_extensions.contains("OES_standard_derivatives"))) {
+ || m_extensions.contains("GL_OES_standard_derivatives"))) {
list.append(QVariant::fromValue(QStringLiteral("OES_standard_derivatives")));
}
if (m_extensions.contains("GL_EXT_texture_compression_s3tc"))
list.append(QVariant::fromValue(QStringLiteral("WEBGL_compressed_texture_s3tc")));
- if (m_extensions.contains("IMG_texture_compression_pvrtc"))
+ if (m_extensions.contains("GL_IMG_texture_compression_pvrtc"))
list.append(QVariant::fromValue(QStringLiteral("WEBGL_compressed_texture_pvrtc")));
}
@@ -6087,7 +6087,7 @@ QVariant CanvasContext::getExtension(const QString &name)
m_textureProviderExt = new CanvasTextureProvider(this, this);
return QVariant::fromValue(m_textureProviderExt);
} else if (upperCaseName == QStringLiteral("OES_STANDARD_DERIVATIVES") &&
- m_extensions.contains("OES_standard_derivatives")) {
+ m_extensions.contains("GL_OES_standard_derivatives")) {
if (!m_standardDerivatives)
m_standardDerivatives = new QObject(this);
return QVariant::fromValue(m_standardDerivatives);
@@ -6097,7 +6097,7 @@ QVariant CanvasContext::getExtension(const QString &name)
m_compressedTextureS3TC = new CompressedTextureS3TC(this);
return QVariant::fromValue(m_compressedTextureS3TC);
} else if (upperCaseName == QStringLiteral("WEBGL_COMPRESSED_TEXTURE_PVRTC") &&
- m_extensions.contains("IMG_texture_compression_pvrtc")) {
+ m_extensions.contains("GL_IMG_texture_compression_pvrtc")) {
if (!m_compressedTexturePVRTC)
m_compressedTexturePVRTC = new CompressedTexturePVRTC(this);
return QVariant::fromValue(m_compressedTexturePVRTC);
diff --git a/src/imports/qtcanvas3d/doc/qtcanvas3d.qdocconf b/src/imports/qtcanvas3d/doc/qtcanvas3d.qdocconf
index be8e805..c0a7ae4 100644
--- a/src/imports/qtcanvas3d/doc/qtcanvas3d.qdocconf
+++ b/src/imports/qtcanvas3d/doc/qtcanvas3d.qdocconf
@@ -1,8 +1,8 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
project = QtCanvas3D
-description = QtCanvas3D Reference Documentation
-version = 1.1.0
+description = Qt Canvas 3D Reference Documentation
+version = $QT_VERSION
exampledirs = ../../../../examples/canvas3d \
snippets
@@ -18,15 +18,15 @@ depends = qtcore qtgui qtqml qtquick qtquickcontrols qtquicklayouts qtdoc qt
qhp.projects = QtCanvas3D
qhp.QtCanvas3D.file = qtcanvas3d.qhp
-qhp.QtCanvas3D.namespace = org.qt-project.qtcanvas3d.100
+qhp.QtCanvas3D.namespace = org.qt-project.qtcanvas3d.$QT_VERSION_TAG
qhp.QtCanvas3D.virtualFolder = qtcanvas3d
qhp.QtCanvas3D.indexTitle = Qt Canvas 3D
qhp.QtCanvas3D.indexRoot =
-qhp.QtCanvas3D.filterAttributes = qtcanvas3d 1.1.0 qtrefdoc
-qhp.QtCanvas3D.customFilters.Qt.name = QtCanvas3D 1.1.0
-qhp.QtCanvas3D.customFilters.Qt.filterAttributes = qtcanvas3d 1.1.0
+qhp.QtCanvas3D.filterAttributes = qtcanvas3d $QT_VERSION qtrefdoc
+qhp.QtCanvas3D.customFilters.Qt.name = QtCanvas3D $QT_VERSION
+qhp.QtCanvas3D.customFilters.Qt.filterAttributes = qtcanvas3d $QT_VERSION
qhp.QtCanvas3D.subprojects = gettingstarted examples types
qhp.QtCanvas3D.subprojects.gettingstarted.title = Getting Started
qhp.QtCanvas3D.subprojects.gettingstarted.indexTitle = Qt Canvas 3D Getting Started
diff --git a/src/imports/qtcanvas3d/teximage3d.cpp b/src/imports/qtcanvas3d/teximage3d.cpp
index f2e1fc8..315b395 100644
--- a/src/imports/qtcanvas3d/teximage3d.cpp
+++ b/src/imports/qtcanvas3d/teximage3d.cpp
@@ -122,7 +122,6 @@ void CanvasTextureImageFactory::notifyLoadedImages()
if (image->imageState() == CanvasTextureImage::LOADING_FINISHED) {
m_loadingImagesList.removeOne(image);
image->emitImageLoaded();
-
} else if (image->imageState() == CanvasTextureImage::LOADING_ERROR) {
m_loadingImagesList.removeOne(image);
image->emitImageLoadingError();
@@ -137,12 +136,14 @@ void CanvasTextureImageFactory::notifyLoadedImages()
QJSValue CanvasTextureImageFactory::newTexImage()
{
CanvasTextureImage *newImg = new CanvasTextureImage(this, m_qmlEngine);
- connect(newImg, &CanvasTextureImage::imageLoadingStarted,
- this, &CanvasTextureImageFactory::handleImageLoadingStarted);
-
return m_qmlEngine->newQObject(newImg);
}
+void CanvasTextureImageFactory::handleImageDestroyed(CanvasTextureImage *image)
+{
+ m_loadingImagesList.removeOne(image);
+}
+
/*!
* \qmltype TextureImage
* \since QtCanvas3D 1.0
@@ -155,9 +156,10 @@ QJSValue CanvasTextureImageFactory::newTexImage()
* \sa TextureImageFactory
*/
CanvasTextureImage::CanvasTextureImage(CanvasTextureImageFactory *parent, QQmlEngine *engine) :
- CanvasAbstractObject(0, parent),
+ CanvasAbstractObject(0, 0),
m_engine(engine),
- m_networkAccessManager(0),
+ m_networkAccessManager(m_engine->networkAccessManager()),
+ m_networkReply(0),
m_state(INITIALIZED),
m_errorString(""),
m_pixelCache(0),
@@ -165,36 +167,44 @@ CanvasTextureImage::CanvasTextureImage(CanvasTextureImageFactory *parent, QQmlEn
m_pixelCacheFlipY(false),
m_parentFactory(parent)
{
- m_networkAccessManager = new QNetworkAccessManager(this);
- QObject::connect(m_networkAccessManager, &QNetworkAccessManager::finished,
- this, &CanvasTextureImage::handleReply);
}
CanvasTextureImage::CanvasTextureImage(const QImage &source,
int width, int height,
- QObject *parent,
+ CanvasTextureImageFactory *parent,
QQmlEngine *engine) :
- CanvasAbstractObject(0, parent),
+ CanvasAbstractObject(0, 0),
m_engine(engine),
- m_networkAccessManager(0),
+ m_networkAccessManager(m_engine->networkAccessManager()),
+ m_networkReply(0),
m_state(INITIALIZED),
m_errorString(""),
m_pixelCache(0),
m_pixelCacheFormat(CanvasContext::NONE),
- m_pixelCacheFlipY(false)
+ m_pixelCacheFlipY(false),
+ m_parentFactory(parent)
{
- m_networkAccessManager = new QNetworkAccessManager(this);
- QObject::connect(m_networkAccessManager, &QNetworkAccessManager::finished,
- this, &CanvasTextureImage::handleReply);
-
m_image = source.scaled(width, height);
setImageState(LOADING_FINISHED);
}
+void CanvasTextureImage::cleanupNetworkReply()
+{
+ if (m_networkReply) {
+ QObject::disconnect(m_networkReply, &QNetworkReply::finished,
+ this, &CanvasTextureImage::handleReply);
+ m_networkReply->abort();
+ m_networkReply->deleteLater();
+ m_networkReply = 0;
+ }
+}
+
CanvasTextureImage::~CanvasTextureImage()
{
- delete m_networkAccessManager;
- delete m_pixelCache;
+ if (!m_parentFactory.isNull())
+ m_parentFactory->handleImageDestroyed(this);
+ cleanupNetworkReply();
+ delete[] m_pixelCache;
}
/*!
@@ -250,10 +260,14 @@ void CanvasTextureImage::load()
return;
setImageState(LOADING);
+ if (!m_parentFactory.isNull())
+ m_parentFactory->handleImageLoadingStarted(this);
emit imageLoadingStarted(this);
QNetworkRequest request(m_source);
- m_networkAccessManager->get(request);
+ m_networkReply = m_networkAccessManager->get(request);
+ QObject::connect(m_networkReply, &QNetworkReply::finished,
+ this, &CanvasTextureImage::handleReply);
}
/*!
@@ -265,18 +279,19 @@ QString CanvasTextureImage::errorString() const
return m_errorString;
}
-void CanvasTextureImage::handleReply(QNetworkReply *reply)
+void CanvasTextureImage::handleReply()
{
- if (reply->error() != QNetworkReply::NoError) {
- m_errorString = reply->errorString();
- emit errorStringChanged(m_errorString);
- setImageState(LOADING_ERROR);
- return;
+ if (m_networkReply) {
+ if (m_networkReply->error() != QNetworkReply::NoError) {
+ m_errorString = m_networkReply->errorString();
+ emit errorStringChanged(m_errorString);
+ setImageState(LOADING_ERROR);
+ } else {
+ m_image.loadFromData(m_networkReply->readAll());
+ setImageState(LOADING_FINISHED);
+ }
+ cleanupNetworkReply();
}
-
- m_image.loadFromData(reply->readAll());
-
- setImageState(LOADING_FINISHED);
}
QImage &CanvasTextureImage::getImage()
@@ -347,7 +362,7 @@ uchar *CanvasTextureImage::convertToFormat(CanvasContext::glEnums format,
return m_pixelCache;
// Destroy the pixel cache
- delete m_pixelCache;
+ delete[] m_pixelCache;
m_pixelCache = 0;
m_pixelCacheFormat = CanvasContext::NONE;
diff --git a/src/imports/qtcanvas3d/teximage3d_p.h b/src/imports/qtcanvas3d/teximage3d_p.h
index ecb1756..73f1186 100644
--- a/src/imports/qtcanvas3d/teximage3d_p.h
+++ b/src/imports/qtcanvas3d/teximage3d_p.h
@@ -54,6 +54,7 @@
#include "abstractobject3d_p.h"
#include <QtCore/QUrl>
+#include <QtCore/QPointer>
#include <QtGui/QImage>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
@@ -77,6 +78,8 @@ public:
void notifyLoadedImages();
Q_INVOKABLE QJSValue newTexImage();
+ void handleImageDestroyed(CanvasTextureImage *image);
+
private:
QQmlEngine *m_qmlEngine;
QList<CanvasTextureImage *> m_loadingImagesList;
@@ -123,7 +126,7 @@ public:
void emitImageLoadingError();
void load();
- void handleReply(QNetworkReply *reply);
+ void handleReply();
QImage &getImage();
uchar *convertToFormat(CanvasContext::glEnums format, bool flipY = false, bool premultipliedAlpha = false);
@@ -132,7 +135,7 @@ public:
private:
void setImageState(TextureImageState state);
explicit CanvasTextureImage(const QImage &source, int width, int height,
- QObject *parent, QQmlEngine *engine);
+ CanvasTextureImageFactory *parent, QQmlEngine *engine);
signals:
void srcChanged(QUrl source);
@@ -146,8 +149,11 @@ signals:
void imageLoadingFailed(CanvasTextureImage *image);
private:
+ void cleanupNetworkReply();
+
QQmlEngine *m_engine;
- QNetworkAccessManager *m_networkAccessManager;
+ QNetworkAccessManager *m_networkAccessManager; // not owned
+ QNetworkReply *m_networkReply;
QImage m_image;
QUrl m_source;
TextureImageState m_state;
@@ -157,7 +163,7 @@ private:
bool m_pixelCacheFlipY;
QImage m_glImage;
QVariant *m_anyValue;
- CanvasTextureImageFactory *m_parentFactory;
+ QPointer<CanvasTextureImageFactory> m_parentFactory;
};
QT_CANVAS3D_END_NAMESPACE