From 853d2edf9158b4237a963f04cc7f4b58e0315f4b Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 7 Aug 2019 07:37:35 +0200 Subject: submissioncontext fix: devicePixelRatio is not an integer Converting it to int would cause the viewport not to take the whole expected size as the interger conversion would essentially floor the value. Change-Id: Ic608b0e1a0910aadb8b98c3225f999cba6326535 Reviewed-by: Mike Krus --- src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp index 59c2d4286..daf6db717 100644 --- a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp +++ b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp @@ -577,7 +577,7 @@ QSize SubmissionContext::renderTargetSize(const QSize &surfaceSize) const } else { renderTargetSize = m_surface->size(); if (m_surface->surfaceClass() == QSurface::Window) { - int dpr = static_cast(m_surface)->devicePixelRatio(); + const float dpr = static_cast(m_surface)->devicePixelRatio(); renderTargetSize *= dpr; } } -- cgit v1.2.3 From fcf6017b82868c044c8d06ca8092ab8acfe56070 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Tue, 23 Jul 2019 14:01:18 +0200 Subject: GLTexture: glTexParam is not supported on multisampled textures So try to avoid performing these calls on such texture Change-Id: I051fd6a0150d07656687a1f84756d8a3d506ec24 Reviewed-by: Mike Krus --- src/render/renderers/opengl/textures/gltexture.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/render/renderers/opengl/textures/gltexture.cpp b/src/render/renderers/opengl/textures/gltexture.cpp index ce212de03..27b94882a 100644 --- a/src/render/renderers/opengl/textures/gltexture.cpp +++ b/src/render/renderers/opengl/textures/gltexture.cpp @@ -495,6 +495,13 @@ void GLTexture::uploadGLTextureData() void GLTexture::updateGLTextureParameters() { + const bool isMultisampledTexture = (m_actualTarget == QAbstractTexture::Target2DMultisample || + m_actualTarget == QAbstractTexture::Target2DMultisampleArray); + // Multisampled textures can only be accessed by texelFetch in shaders + // and don't support wrap modes and mig/mag filtes + if (isMultisampledTexture) + return; + m_gl->setWrapMode(QOpenGLTexture::DirectionS, static_cast(m_parameters.wrapModeX)); if (m_actualTarget != QAbstractTexture::Target1D && m_actualTarget != QAbstractTexture::Target1DArray && -- cgit v1.2.3 From 4c8dfd84feddee954f048f8ab3366d4d6176c788 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Mon, 29 Jul 2019 15:42:40 +0100 Subject: Fix download test after removal of assets Change-Id: Id7f37b014dec7f395bbf3d2c6c22ea59283257ec Reviewed-by: Paul Lemire --- tests/manual/downloading/main.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/manual/downloading/main.qml b/tests/manual/downloading/main.qml index a78cf605e..f8631e9b1 100644 --- a/tests/manual/downloading/main.qml +++ b/tests/manual/downloading/main.qml @@ -81,7 +81,7 @@ Entity { Mesh { id: mesh - source: "https://codereview.qt-project.org/gitweb?p=qt/qt3d.git;a=blob_plain;hb=refs/heads/dev;f=examples/qt3d/exampleresources/assets/chest/Chest.obj" + source: "https://codereview.qt-project.org/gitweb?p=qt/qt3d.git;a=blob_plain;f=examples/qt3d/exampleresources/assets/obj/plane-10x10.obj" onStatusChanged: console.log("Mesh status " + status) } -- cgit v1.2.3 From 6388eb98a12a639a263ef34553269fc36b582269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Wed, 7 Aug 2019 16:09:14 +0200 Subject: Improve documentation of ObjectPicker Add a reference to Scene3D hoverEnabled Change-Id: I59e282a985ae5af30ff22d7caf433fb3b7cd821b Reviewed-by: Mike Krus --- src/render/picking/qobjectpicker.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/render/picking/qobjectpicker.cpp b/src/render/picking/qobjectpicker.cpp index c3671d018..e15a7cdfc 100644 --- a/src/render/picking/qobjectpicker.cpp +++ b/src/render/picking/qobjectpicker.cpp @@ -109,6 +109,8 @@ namespace Qt3DRender { \sa PickingSettings, Geometry, Attribute, PickEvent, PickTriangleEvent + \note To receive hover events in QtQuick, the hoverEnabled property of Scene3D must also be set. + \note Instances of this component shouldn't be shared, not respecting that condition will most likely result in undefined behavior. */ -- cgit v1.2.3 From 4e2c04a3bb3391ae00a43e83c76451154087a41d Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Mon, 19 Aug 2019 10:35:04 +0200 Subject: Animations: don't assert if mapper is not set We might provide it later, current approach forces it to be set at construction time which doesn't work if you use delayed loading of meshes and mappers. Change-Id: I8ee95d4751cb951d3a99c2fb80b1d5ba77905a2d Reviewed-by: Mike Krus --- src/animation/backend/buildblendtreesjob.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/animation/backend/buildblendtreesjob.cpp b/src/animation/backend/buildblendtreesjob.cpp index be96889fa..3cfa81446 100644 --- a/src/animation/backend/buildblendtreesjob.cpp +++ b/src/animation/backend/buildblendtreesjob.cpp @@ -86,7 +86,8 @@ void BuildBlendTreesJob::run() // Build the format for clip results that should be used by nodes in the blend // tree when used with this animator const ChannelMapper *mapper = m_handler->channelMapperManager()->lookupResource(blendClipAnimator->mapperId()); - Q_ASSERT(mapper); + if (!mapper) + continue; const QVector channelNamesAndTypes = buildRequiredChannelsAndTypes(m_handler, mapper); const QVector channelComponentIndices -- cgit v1.2.3 From bddebae04ef7ccdc3c2b7383aa641dc380318cbc Mon Sep 17 00:00:00 2001 From: Wang Chuan Date: Sat, 17 Aug 2019 00:36:17 +0800 Subject: QDistanceFieldGlyphCache: make sure the arbiter of atlas can be set When using QText2DEntity to display text, the node of QTextureAtlas will be create when traversing the node tree, and it will use root node as its parent node. However, since the children node of root node is being traversed in this moment, QTextureAtlas will not be traversed, that means the change arbiter won't be set, and the change in frontend cannot notify backend. [ChangeLog][Qt3DExtras][QDistanceFieldGlyphCache] make sure the change arbiter of atlas for QText2DEntity can be set when traversing node tree, and add new auto test for this. Fixes: QTBUG-77084 Change-Id: Iad09efe4376ba61f54624965118358a160be42a2 Reviewed-by: Paul Lemire --- src/extras/text/qdistancefieldglyphcache.cpp | 4 +- tests/auto/extras/extras.pro | 3 +- tests/auto/extras/qtext2dentity/qtext2dentity.pro | 13 +++ tests/auto/extras/qtext2dentity/qtext2dentity.qml | 93 ++++++++++++++++++++ tests/auto/extras/qtext2dentity/qtext2dentity.qrc | 5 ++ .../extras/qtext2dentity/tst_qtext2dentity.cpp | 98 ++++++++++++++++++++++ 6 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 tests/auto/extras/qtext2dentity/qtext2dentity.pro create mode 100644 tests/auto/extras/qtext2dentity/qtext2dentity.qml create mode 100644 tests/auto/extras/qtext2dentity/qtext2dentity.qrc create mode 100644 tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp diff --git a/src/extras/text/qdistancefieldglyphcache.cpp b/src/extras/text/qdistancefieldglyphcache.cpp index 30db3ff4e..a3819b8fe 100644 --- a/src/extras/text/qdistancefieldglyphcache.cpp +++ b/src/extras/text/qdistancefieldglyphcache.cpp @@ -284,7 +284,9 @@ DistanceFieldFont* QDistanceFieldGlyphCache::getOrCreateDistanceFieldFont(const actualFont.setPixelSize(QT_DISTANCEFIELD_BASEFONTSIZE(useDoubleRes) * QT_DISTANCEFIELD_SCALE(useDoubleRes)); // create new font cache - DistanceFieldFont *dff = new DistanceFieldFont(actualFont, useDoubleRes, m_rootNode); + // we set the parent node to nullptr, since the parent node of QTextureAtlasses + // will be set when we pass them to QText2DMaterial later + DistanceFieldFont *dff = new DistanceFieldFont(actualFont, useDoubleRes, nullptr); m_fonts.insert(key, dff); return dff; } diff --git a/tests/auto/extras/extras.pro b/tests/auto/extras/extras.pro index bbdf118b3..e5ae28e97 100644 --- a/tests/auto/extras/extras.pro +++ b/tests/auto/extras/extras.pro @@ -6,5 +6,6 @@ contains(QT_CONFIG, private_tests) { qtorusgeometry \ qforwardrenderer \ qfirstpersoncameracontroller \ - qorbitcameracontroller + qorbitcameracontroller \ + qtext2dentity } diff --git a/tests/auto/extras/qtext2dentity/qtext2dentity.pro b/tests/auto/extras/qtext2dentity/qtext2dentity.pro new file mode 100644 index 000000000..1b8bd0c6f --- /dev/null +++ b/tests/auto/extras/qtext2dentity/qtext2dentity.pro @@ -0,0 +1,13 @@ +TEMPLATE = app + +TARGET = tst_qtext2dentity + +QT += 3dcore 3dcore-private 3dextras 3dquickextras qml testlib + +CONFIG += testcase + +SOURCES += \ + tst_qtext2dentity.cpp + +RESOURCES += qtext2dentity.qrc + diff --git a/tests/auto/extras/qtext2dentity/qtext2dentity.qml b/tests/auto/extras/qtext2dentity/qtext2dentity.qml new file mode 100644 index 000000000..bc699acf6 --- /dev/null +++ b/tests/auto/extras/qtext2dentity/qtext2dentity.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt3D.Core 2.0 +import Qt3D.Render 2.0 +import Qt3D.Input 2.0 +import Qt3D.Extras 2.9 + +Entity { + id: sceneRoot + property alias text2DEntity: text + Camera { + id: camera + projectionType: CameraLens.PerspectiveProjection + fieldOfView: 45 + aspectRatio: 16/9 + nearPlane : 0.1 + farPlane : 1000.0 + position: Qt.vector3d( 0.0, 0.0, 140.0 ) + upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) + viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) + } + + OrbitCameraController { + camera: camera + } + + components: [ + RenderSettings { + activeFrameGraph: ForwardRenderer { + clearColor: Qt.rgba(1, 1, 1, 1) + camera: camera + } + }, + // Event Source will be set by the Qt3DQuickWindow + InputSettings { } + ] + + Text2DEntity { + id: text + text: "foo" + width: 200 + height: 40 + color: "darkgrey" + } +} diff --git a/tests/auto/extras/qtext2dentity/qtext2dentity.qrc b/tests/auto/extras/qtext2dentity/qtext2dentity.qrc new file mode 100644 index 000000000..424d200ae --- /dev/null +++ b/tests/auto/extras/qtext2dentity/qtext2dentity.qrc @@ -0,0 +1,5 @@ + + + qtext2dentity.qml + + diff --git a/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp b/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp new file mode 100644 index 000000000..6fcc2e637 --- /dev/null +++ b/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +QVectorlookupNodeByClassName(Qt3DCore::QNode *root, const QString &className) +{ + auto children = root->childNodes(); + QVector childrenList; + for (auto i : children) { + if (i->metaObject()->className() == className) + childrenList << i; + else + childrenList << lookupNodeByClassName(i, className); + } + return childrenList; +} + +class tst_qtext2dentity : public QObject +{ + Q_OBJECT + +private slots: + void checkChangeArbiter(); +}; + +void tst_qtext2dentity::checkChangeArbiter() +{ +#if !defined(QT_OPENGL_ES_2_ANGLE) + // GIVEN + Qt3DExtras::Quick::Qt3DQuickWindow view; + view.setSource(QUrl("qrc:/qtext2dentity.qml")); + view.show(); + QCoreApplication::processEvents(); + + // THEN + auto rootEntity = view.engine()->aspectEngine()->rootEntity(); + QVERIFY(rootEntity != nullptr); + auto atlases = lookupNodeByClassName(rootEntity.data(), "Qt3DExtras::QTextureAtlas"); + QVERIFY(atlases.length() == 1); + auto atlas = atlases[0]; + QTRY_VERIFY(Qt3DCore::QNodePrivate::get(atlas)->m_changeArbiter); +#endif +} + +QTEST_MAIN(tst_qtext2dentity) +#include "tst_qtext2dentity.moc" -- cgit v1.2.3