From 764924da8ab3255c1b8d1ad5b39f85675f4b855e Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Mon, 27 Apr 2020 11:56:17 +0100 Subject: Fix build for Qt6 - updated dependencies, excluding qtgamepad for now - fixed issues with Q_PROPERTY not supporting forward declarations - fixed for changes in QtQuick private API - fixed for changes in QtOpenGLVersionFunctions API - fixed for removal of QT_OPENGL_ES* macros - fixed for changes in QtConcurrent API - fixed RHI based build Change-Id: I42ccd2f101b7f0a78e2860c6d551722bf6710a11 Reviewed-by: Paul Lemire --- dependencies.yaml | 12 +- examples/qt3d/advancedcustommaterial/main.cpp | 2 +- examples/qt3d/scene3d/main.cpp | 2 +- .../qt3d/simple-cpp/orbittransformcontroller.h | 6 +- examples/qt3d/simplecustommaterial/main.cpp | 2 +- src/animation/frontend/qabstractclipanimator.h | 4 +- src/animation/frontend/qabstractclipblendnode.h | 2 +- src/animation/frontend/qblendedclipanimator.h | 2 +- src/animation/frontend/qclipanimator.h | 3 +- src/animation/frontend/qskeletonmapping.h | 5 +- src/core/geometry/qattribute.h | 2 +- src/core/geometry/qgeometry.h | 2 +- src/core/nodes/qcomponent.h | 1 + src/core/nodes/qnode.h | 1 - src/core/resources/qframeallocator.cpp | 322 +++++++++++++++++++++ src/core/resources/qframeallocator_p.h | 112 +++++++ src/core/resources/qframeallocator_p_p.h | 138 +++++++++ src/core/resources/qhandle_p.h | 7 + src/core/resources/resources.pri | 3 + src/core/transforms/qarmature.h | 2 +- src/core/transforms/qskeleton.h | 2 +- src/core/transforms/qskeletonloader.h | 2 +- src/extras/defaults/qabstractspritesheet.h | 7 +- src/extras/defaults/qforwardrenderer.h | 1 + src/extras/defaults/qspritesheet.h | 2 +- src/extras/defaults/qt3dwindow.cpp | 2 +- src/extras/text/qdistancefieldglyphcache.cpp | 1 + src/input/backend/assignkeyboardfocusjob_p.h | 1 + src/input/frontend/qactioninput.h | 2 +- src/input/frontend/qaxisaccumulator.h | 2 +- src/input/frontend/qkeyboarddevice.h | 3 +- src/input/frontend/qkeyboardhandler.h | 1 + src/input/frontend/qmousedevice.h | 3 - src/input/frontend/qmousehandler.h | 2 +- .../opengl/graphicshelpers/graphicscontext.cpp | 21 +- .../opengl/graphicshelpers/graphicshelperes2.cpp | 2 +- .../opengl/graphicshelpers/graphicshelperes3.cpp | 2 +- .../opengl/graphicshelpers/graphicshelpergl2.cpp | 2 +- .../opengl/graphicshelpers/graphicshelpergl2_p.h | 2 +- .../opengl/graphicshelpers/graphicshelpergl3_2.cpp | 2 +- .../opengl/graphicshelpers/graphicshelpergl3_2_p.h | 2 +- .../opengl/graphicshelpers/graphicshelpergl3_3.cpp | 2 +- .../opengl/graphicshelpers/graphicshelpergl3_3_p.h | 2 +- .../opengl/graphicshelpers/graphicshelpergl4.cpp | 2 +- .../opengl/graphicshelpers/graphicshelpergl4_p.h | 2 +- .../graphicshelpers/graphicshelperinterface_p.h | 1 + .../opengl/graphicshelpers/submissioncontext.cpp | 10 +- .../renderers/opengl/renderer/frameprofiler_p.h | 2 +- .../opengl/renderer/openglvertexarrayobject_p.h | 2 +- src/plugins/renderers/opengl/renderer/renderer.cpp | 1 - .../renderers/opengl/textures/gltexture.cpp | 15 +- .../rhi/graphicshelpers/submissioncontext.cpp | 6 +- .../rhi/graphicshelpers/submissioncontext_p.h | 1 - .../renderers/rhi/managers/rhiresourcemanagers_p.h | 7 + .../renderers/rhi/renderer/rendercommand.cpp | 2 +- .../renderers/rhi/renderer/rendercommand_p.h | 4 +- src/plugins/renderers/rhi/renderer/renderer.cpp | 3 +- src/plugins/renderers/rhi/renderer/renderview.cpp | 2 + .../renderers/rhi/renderer/renderviewbuilder.cpp | 10 +- src/plugins/renderers/rhi/textures/texture_p.h | 2 +- src/quick3d/imports/scene3d/scene3ditem_p.h | 1 + src/quick3d/imports/scene3d/scene3dview_p.h | 7 +- src/quick3d/quick3d/items/quick3dbuffer.cpp | 2 +- src/quick3d/quick3dscene2d/items/qscene2d.h | 2 +- src/quick3d/quick3dscene2d/items/scene2d.cpp | 8 +- src/quick3d/quick3dscene2d/items/scene2d_p.h | 2 +- src/render/framegraph/qblitframebuffer.h | 2 +- src/render/framegraph/qcameraselector.h | 1 + src/render/framegraph/qproximityfilter.h | 1 + src/render/framegraph/qrendertargetselector.h | 2 +- src/render/frontend/qcamera.h | 6 +- src/render/frontend/qlevelofdetail.h | 2 +- src/render/materialsystem/qmaterial.h | 4 +- src/render/materialsystem/qshaderimage.h | 2 +- src/render/materialsystem/qshaderprogrambuilder.h | 2 +- src/render/picking/qpickevent.h | 8 +- src/render/raycasting/qraycastingservice.cpp | 5 +- src/render/renderstates/qstenciloperation.h | 2 +- src/render/renderstates/qstenciltest.h | 2 +- src/render/texture/qabstracttexture.h | 2 +- .../extras/qtext2dentity/tst_qtext2dentity.cpp | 2 +- tests/auto/quick3d/3dinput/3dinput.qml | 3 +- .../tst_filtercompatibletechniquejob.cpp | 2 +- .../graphicshelpergl2/tst_graphicshelpergl2.cpp | 5 +- .../tst_graphicshelpergl3_2.cpp | 5 +- .../graphicshelpergl3_3/graphicshelpergl3_3.pro | 2 +- .../tst_graphicshelpergl3_3.cpp | 5 +- .../graphicshelpergl4/tst_graphicshelpergl4.cpp | 5 +- tests/auto/render/render.pro | 4 +- .../qshadernodesloader/tst_qshadernodesloader.cpp | 11 + tests/manual/boundingvolumes/main.cpp | 2 +- tests/manual/manual-renderloop/main.cpp | 2 +- tests/manual/qtbug-76766/main.cpp | 2 +- .../rendercapture-cpp/orbittransformcontroller.h | 5 +- 94 files changed, 739 insertions(+), 149 deletions(-) create mode 100644 src/core/resources/qframeallocator.cpp create mode 100644 src/core/resources/qframeallocator_p.h create mode 100644 src/core/resources/qframeallocator_p_p.h diff --git a/dependencies.yaml b/dependencies.yaml index 3987d7398..1b9f7383f 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -1,13 +1,13 @@ dependencies: ../qtbase: - ref: a13e8d6660913bec172d1374f78083498c539df0 + ref: 6fbeef4c6b2323fc4b7856520c0f38f8139c9c54 required: true ../qtdeclarative: - ref: 94d385327d932d27b7277e803d0eaa167f792222 - required: false - ../qtgamepad: - ref: 3bf17cf8782d0cf38daaf6fc8afdd33517d382b0 + ref: 119be2f769a1fee1ef115ee99a239264e2daff71 required: false +# ../qtgamepad: +# ref: fb20a2012e650917e294d1614ec17d3b01404b25 +# required: false ../qtimageformats: - ref: eb02e051725510dea7daf0d035ef635efbb6b993 + ref: af03fdb63b46dc3dda5f79cf09c5c4ad2f130c28 required: false diff --git a/examples/qt3d/advancedcustommaterial/main.cpp b/examples/qt3d/advancedcustommaterial/main.cpp index 631e26e43..eef254063 100644 --- a/examples/qt3d/advancedcustommaterial/main.cpp +++ b/examples/qt3d/advancedcustommaterial/main.cpp @@ -55,7 +55,7 @@ void setSurfaceFormat() { QSurfaceFormat format; -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/examples/qt3d/scene3d/main.cpp b/examples/qt3d/scene3d/main.cpp index 2a988a271..4d22a5b68 100644 --- a/examples/qt3d/scene3d/main.cpp +++ b/examples/qt3d/scene3d/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char **argv) { // Set OpenGL requirements QSurfaceFormat format = QSurfaceFormat::defaultFormat(); -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) format.setVersion(4, 1); format.setProfile(QSurfaceFormat::CoreProfile); format.setSamples(4); diff --git a/examples/qt3d/simple-cpp/orbittransformcontroller.h b/examples/qt3d/simple-cpp/orbittransformcontroller.h index 5f41722b6..7a6e8b819 100644 --- a/examples/qt3d/simple-cpp/orbittransformcontroller.h +++ b/examples/qt3d/simple-cpp/orbittransformcontroller.h @@ -55,11 +55,9 @@ #include #include -QT_BEGIN_NAMESPACE +#include -namespace Qt3DCore { -class QTransform; -} +QT_BEGIN_NAMESPACE class OrbitTransformController : public QObject { diff --git a/examples/qt3d/simplecustommaterial/main.cpp b/examples/qt3d/simplecustommaterial/main.cpp index 6ccdcce64..da299e913 100644 --- a/examples/qt3d/simplecustommaterial/main.cpp +++ b/examples/qt3d/simplecustommaterial/main.cpp @@ -55,7 +55,7 @@ void setSurfaceFormat() { QSurfaceFormat format; -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/src/animation/frontend/qabstractclipanimator.h b/src/animation/frontend/qabstractclipanimator.h index 687589b5e..bbdc1c145 100644 --- a/src/animation/frontend/qabstractclipanimator.h +++ b/src/animation/frontend/qabstractclipanimator.h @@ -41,6 +41,8 @@ #define QT3DANIMATION_QABSTRACTCLIPANIMATOR_H #include +#include +#include #include QT_BEGIN_NAMESPACE @@ -48,8 +50,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DAnimation { class QAnimationClip; -class QChannelMapper; -class QClock; class QAbstractClipAnimatorPrivate; class Q_3DANIMATIONSHARED_EXPORT QAbstractClipAnimator : public Qt3DCore::QComponent diff --git a/src/animation/frontend/qabstractclipblendnode.h b/src/animation/frontend/qabstractclipblendnode.h index 3bc6d37d0..12630fbf0 100644 --- a/src/animation/frontend/qabstractclipblendnode.h +++ b/src/animation/frontend/qabstractclipblendnode.h @@ -38,13 +38,13 @@ #define QT3DANIMATION_QABSTRACTCLIPBLENDNODE_H #include +#include #include QT_BEGIN_NAMESPACE namespace Qt3DAnimation { -class QAbstractAnimationClip; class QAbstractClipBlendNodePrivate; class Q_3DANIMATIONSHARED_EXPORT QAbstractClipBlendNode : public Qt3DCore::QNode diff --git a/src/animation/frontend/qblendedclipanimator.h b/src/animation/frontend/qblendedclipanimator.h index 2fb7595aa..67f9551d6 100644 --- a/src/animation/frontend/qblendedclipanimator.h +++ b/src/animation/frontend/qblendedclipanimator.h @@ -42,12 +42,12 @@ #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DAnimation { -class QAbstractClipBlendNode; class QBlendedClipAnimatorPrivate; class Q_3DANIMATIONSHARED_EXPORT QBlendedClipAnimator : public Qt3DAnimation::QAbstractClipAnimator diff --git a/src/animation/frontend/qclipanimator.h b/src/animation/frontend/qclipanimator.h index 6025a5343..d3b789692 100644 --- a/src/animation/frontend/qclipanimator.h +++ b/src/animation/frontend/qclipanimator.h @@ -42,13 +42,12 @@ #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DAnimation { -class QAbstractAnimationClip; -class QChannelMapper; class QClipAnimatorPrivate; class Q_3DANIMATIONSHARED_EXPORT QClipAnimator : public Qt3DAnimation::QAbstractClipAnimator diff --git a/src/animation/frontend/qskeletonmapping.h b/src/animation/frontend/qskeletonmapping.h index 5f37bfeb9..e8fcb3f9a 100644 --- a/src/animation/frontend/qskeletonmapping.h +++ b/src/animation/frontend/qskeletonmapping.h @@ -40,15 +40,12 @@ #ifndef QT3DANIMATION_QSKELETONMAPPING_H #define QT3DANIMATION_QSKELETONMAPPING_H +#include #include #include QT_BEGIN_NAMESPACE -namespace Qt3DCore { -class QAbstractSkeleton; -} - namespace Qt3DAnimation { class QSkeletonMappingPrivate; diff --git a/src/core/geometry/qattribute.h b/src/core/geometry/qattribute.h index aa0e5ce8b..eedb2d32c 100644 --- a/src/core/geometry/qattribute.h +++ b/src/core/geometry/qattribute.h @@ -42,13 +42,13 @@ #include #include +#include #include QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QBuffer; class QAttributePrivate; typedef QSharedPointer QBufferPtr; diff --git a/src/core/geometry/qgeometry.h b/src/core/geometry/qgeometry.h index a619884a0..89b3c7019 100644 --- a/src/core/geometry/qgeometry.h +++ b/src/core/geometry/qgeometry.h @@ -42,12 +42,12 @@ #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QAttribute; class QGeometryPrivate; class Q_3DCORESHARED_EXPORT QGeometry : public Qt3DCore::QNode diff --git a/src/core/nodes/qcomponent.h b/src/core/nodes/qcomponent.h index 182a21e50..f07b34c9f 100644 --- a/src/core/nodes/qcomponent.h +++ b/src/core/nodes/qcomponent.h @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { +class QEntity; class QComponentPrivate; class Q_3DCORESHARED_EXPORT QComponent : public QNode diff --git a/src/core/nodes/qnode.h b/src/core/nodes/qnode.h index f24daf63f..e6914919d 100644 --- a/src/core/nodes/qnode.h +++ b/src/core/nodes/qnode.h @@ -52,7 +52,6 @@ namespace Qt3DCore { class QNode; class QNodePrivate; -class QEntity; class QAspectEngine; #if defined(QT_BUILD_INTERNAL) diff --git a/src/core/resources/qframeallocator.cpp b/src/core/resources/qframeallocator.cpp new file mode 100644 index 000000000..e85ae4057 --- /dev/null +++ b/src/core/resources/qframeallocator.cpp @@ -0,0 +1,322 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* !\internal + \class Qt3DCore::QFrameAllocator + \inmodule Qt3DCore + \brief Provides a pool of memory chunks to be used to allocate objects on a per frame basis. + + The memory can be recycled by following frames by calling clear which won't deallocate any memory. + + \note Be really careful when allocating polymorphic types. You must be + sure to call deallocate with the subclass type to properly release all + memory. +*/ + +#include "qframeallocator_p.h" +#include "qframeallocator_p_p.h" + +QT_BEGIN_NAMESPACE + +namespace Qt3DCore { + +QFrameAllocatorPrivate::QFrameAllocatorPrivate() + : m_maxObjectSize(0U) + , m_alignment(0U) +{ +} + +QFrameAllocator::QFrameAllocator(uint maxObjectSize, uint alignment, uint pageSize) + : d_ptr(new QFrameAllocatorPrivate) +{ + Q_ASSERT(alignment && pageSize && pageSize < UCHAR_MAX); + Q_D(QFrameAllocator); + d->m_maxObjectSize = maxObjectSize; + d->m_alignment = alignment; + d->m_allocatorPool.resize(d->allocatorIndexFromSize(maxObjectSize) + 1); + for (int i = 0, n = d->m_allocatorPool.size(); i < n; ++i) + d->m_allocatorPool[i].init((i + 1) * d->m_alignment, pageSize); +} + +QFrameAllocator::~QFrameAllocator() +{ + Q_D(QFrameAllocator); + for (int i = 0, n = d->m_allocatorPool.size(); i < n; ++i) + d->m_allocatorPool[i].release(); +} + +// Clear all memory chunks, allocated memory is not released +void QFrameAllocator::clear() +{ + Q_D(QFrameAllocator); + for (int i = 0, n = d->m_allocatorPool.size(); i < n; ++i) + d->m_allocatorPool[i].clear(); +} + +// Trim excess memory used by chunks +void QFrameAllocator::trim() +{ + Q_D(QFrameAllocator); + for (int i = 0, n = d->m_allocatorPool.size(); i < n; ++i) + d->m_allocatorPool[i].trim(); +} + +uint QFrameAllocator::maxObjectSize() const +{ + Q_D(const QFrameAllocator); + return d->m_maxObjectSize; +} + +int QFrameAllocator::allocatorPoolSize() const +{ + Q_D(const QFrameAllocator); + return d->m_allocatorPool.size(); +} + +bool QFrameAllocator::isEmpty() const +{ + Q_D(const QFrameAllocator); + for (const QFixedFrameAllocator &allocator : d->m_allocatorPool) { + if (!allocator.isEmpty()) + return false; + } + return true; +} + +uint QFrameAllocator::totalChunkCount() const +{ + Q_D(const QFrameAllocator); + uint chunkCount = 0; + for (const QFixedFrameAllocator& allocator : d->m_allocatorPool) + chunkCount += allocator.chunkCount(); + return chunkCount; +} + +QFixedFrameAllocator::QFixedFrameAllocator() + : m_blockSize(0) + , m_nbrBlock(0) + , m_lastAllocatedChunck(nullptr) + , m_lastFreedChunck(nullptr) +{ +} + +QFixedFrameAllocator::~QFixedFrameAllocator() +{ + release(); +} + +void QFixedFrameAllocator::init(uint blockSize, uchar pageSize) +{ + m_blockSize = blockSize; + m_nbrBlock = pageSize; +} + +void *QFixedFrameAllocator::allocate() +{ + Q_ASSERT(m_blockSize); + return scan().allocate(m_blockSize); +} + +QFrameChunk &QFixedFrameAllocator::scan() +{ + Q_ASSERT(m_blockSize); + Q_ASSERT(m_nbrBlock); + + if (m_lastAllocatedChunck && m_lastAllocatedChunck->m_blocksAvailable) + return *m_lastAllocatedChunck; + + for (int i = 0; i < m_chunks.size(); i++) { + if (m_chunks[i].m_blocksAvailable > 0) { + m_lastAllocatedChunck = m_chunks.begin() + i; + return *m_lastAllocatedChunck; + } + } + m_chunks.resize(m_chunks.size() + 1); + QFrameChunk &newChunk = m_chunks.last(); + newChunk.init(m_blockSize, m_nbrBlock); + m_lastAllocatedChunck = &newChunk; + m_lastFreedChunck = &newChunk; + return newChunk; +} + +void QFixedFrameAllocator::deallocate(void *ptr) +{ + Q_ASSERT(m_blockSize && m_nbrBlock); + if (!m_chunks.empty() && ptr != nullptr) { + if (m_lastFreedChunck != nullptr && m_lastFreedChunck->contains(ptr, m_blockSize)) + m_lastFreedChunck->deallocate(ptr, m_blockSize); + else { + for (int i = 0; i < m_chunks.size(); i++) { + if (m_chunks[i].contains(ptr, m_blockSize)) { + m_chunks[i].deallocate(ptr, m_blockSize); + m_lastFreedChunck = m_chunks.begin() + i; + break ; + } + } + } + } +} + +void QFixedFrameAllocator::trim() +{ + for (int i = m_chunks.size() - 1; i >= 0; i--) { + if (m_chunks.at(i).isEmpty()) { + m_chunks[i].release(); + if (m_lastAllocatedChunck == &m_chunks[i]) + m_lastAllocatedChunck = nullptr; + if (m_lastFreedChunck == &m_chunks[i]) + m_lastFreedChunck = nullptr; + m_chunks.removeAt(i); + } + } +} + +void QFixedFrameAllocator::release() +{ + for (int i = m_chunks.size() - 1; i >= 0; i--) + m_chunks[i].release(); + m_chunks.clear(); + m_lastAllocatedChunck = nullptr; + m_lastFreedChunck = nullptr; +} + +// Allows to reuse chunks without having to reinitialize and reallocate them +void QFixedFrameAllocator::clear() +{ + for (int i = m_chunks.size() - 1; i >= 0; i--) + m_chunks[i].clear(m_blockSize, m_nbrBlock); +} + +bool QFixedFrameAllocator::isEmpty() const +{ + for (const QFrameChunk &chunck : m_chunks) { + if (chunck.m_blocksAvailable != chunck.m_maxBlocksAvailable) + return false; + } + return true; +} + +// QFrameChuck is agnostic about blocksize +// However if it was initialized with a block size of 16 +// You should then pass 16 to allocate and deallocate +void QFrameChunk::init(uint blockSize, uchar blocks) +{ + m_data = new uchar[blockSize * blocks]; + m_firstAvailableBlock = 0; + m_blocksAvailable = blocks; + m_maxBlocksAvailable = blocks; + uchar *p = m_data; + // Init each block with its position stored in its first byte + for (uchar i = 0; i < blocks; p += blockSize) + *p = ++i; +#ifdef QFRAMEALLOCATOR_DEBUG + VALGRIND_CREATE_MEMPOOL(m_data, 0, true); + VALGRIND_MAKE_MEM_NOACCESS(m_data, blockSize * blocks); + VALGRIND_MEMPOOL_ALLOC(m_data, m_data, blockSize * blocks); +#endif +} + +void *QFrameChunk::allocate(uint blockSize) +{ + if (m_blocksAvailable == 0) + return nullptr; + uchar *r = m_data + (m_firstAvailableBlock * blockSize); + m_firstAvailableBlock = *r; + --m_blocksAvailable; + return r; +} + +// Shouldn't be called more than once for the same pointer +void QFrameChunk::deallocate(void *p, uint blockSize) +{ + if (p >= m_data) { + uchar *toRelease = static_cast(p); + uchar oldFreeBlock = m_firstAvailableBlock; + m_firstAvailableBlock = static_cast((toRelease - m_data) / blockSize); + *toRelease = oldFreeBlock; + ++m_blocksAvailable; + } +} + +bool QFrameChunk::contains(void *p, uint blockSize) +{ + uchar *c = static_cast(p); + return (m_data <= c && c < m_data + blockSize * m_maxBlocksAvailable); +} + +// Reset chunck without releasing heap allocated memory +void QFrameChunk::clear(uint blockSize, uchar blocks) +{ + m_firstAvailableBlock = 0; + m_blocksAvailable = blocks; + + uchar *p = m_data; + // Init each block with its position stored in its first byte + for (uchar i = 0; i < blocks; p += blockSize) + *p = ++i; +} + +void QFrameChunk::release() +{ +#ifdef QFRAMEALLOCATOR_DEBUG + VALGRIND_MEMPOOL_FREE(m_data, m_data); + VALGRIND_DESTROY_MEMPOOL(m_data); +#endif + delete [] m_data; +} + +void* QFrameAllocator::allocateRawMemory(size_t size) +{ + Q_D(QFrameAllocator); + Q_ASSERT(size <= d->m_maxObjectSize); + uint allocatorIndex = d->allocatorIndexFromSize(uint(size)); + return d->allocateAtChunk(allocatorIndex); +} + +void QFrameAllocator::deallocateRawMemory(void* ptr, size_t size) +{ + Q_D(QFrameAllocator); + Q_ASSERT(size <= d->m_maxObjectSize); + uint allocatorIndex = d->allocatorIndexFromSize(uint(size)); + d->deallocateAtChunck(ptr, allocatorIndex); +} + +} // Qt3D + +QT_END_NAMESPACE diff --git a/src/core/resources/qframeallocator_p.h b/src/core/resources/qframeallocator_p.h new file mode 100644 index 000000000..4c2b5a961 --- /dev/null +++ b/src/core/resources/qframeallocator_p.h @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DCORE_QFRAMEALLOCATOR_P_H +#define QT3DCORE_QFRAMEALLOCATOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#ifdef QFRAMEALLOCATOR_DEBUG +#include +#include +#endif + +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +namespace Qt3DCore { + +class QFrameAllocatorPrivate; + +class Q_3DCORE_PRIVATE_EXPORT QFrameAllocator +{ +public: + explicit QFrameAllocator(uint maxObjectSize, uint alignment = 16, uint pageSize = 128); + ~QFrameAllocator(); + + template + T* allocate() + { + void* ptr = allocateRawMemory(sizeof(T)); + new (ptr) T(); // Don't forget to call the constructor of the object using the placement new operator + return static_cast(ptr); + } + + template + void deallocate(T *ptr) + { + ptr->~T(); // Call destructor + deallocateRawMemory(ptr, sizeof(T)); + } + + void* allocateRawMemory(size_t size); + + void deallocateRawMemory(void *ptr, size_t size); + + void clear(); + void trim(); + uint maxObjectSize() const; + uint totalChunkCount() const; + int allocatorPoolSize() const; + bool isEmpty() const; + +private: + Q_DECLARE_PRIVATE(QFrameAllocator) + const QScopedPointer d_ptr; +}; + +} // Qt3D + +QT_END_NAMESPACE + +#endif // QFRAMEALLOCATOR_P_H diff --git a/src/core/resources/qframeallocator_p_p.h b/src/core/resources/qframeallocator_p_p.h new file mode 100644 index 000000000..bf4e0a2b1 --- /dev/null +++ b/src/core/resources/qframeallocator_p_p.h @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DCORE_QFRAMEALLOCATOR_P_P_H +#define QT3DCORE_QFRAMEALLOCATOR_P_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +namespace Qt3DCore { + +class QFrameAllocator; + +struct Q_AUTOTEST_EXPORT QFrameChunk +{ + void init(uint blockSize, uchar blocks); + void *allocate(uint blockSize); + + void deallocate(void *p, uint blockSize); + bool contains(void *p, uint blockSize); + void clear(uint blockSize, uchar blocks); + void release(); + + inline bool isEmpty() const { return m_blocksAvailable == m_maxBlocksAvailable; } + + uchar *m_data; + uchar m_firstAvailableBlock; + uchar m_blocksAvailable; + uchar m_maxBlocksAvailable; +}; + +class Q_AUTOTEST_EXPORT QFixedFrameAllocator +{ +public: + QFixedFrameAllocator(); + ~QFixedFrameAllocator(); + + void init(uint blockSize, uchar pageSize = 128); + void *allocate(); + void deallocate(void *ptr); + void trim(); + void release(); + void clear(); + bool isEmpty() const; + + inline int chunkCount() const { return m_chunks.size(); } + inline uchar pageSize() const { return m_nbrBlock; } + inline uint blockSize() const { return m_blockSize; } + +private: + QFrameChunk &scan(); + +private: + uint m_blockSize; + uchar m_nbrBlock; + QVector m_chunks; + QFrameChunk *m_lastAllocatedChunck; + QFrameChunk *m_lastFreedChunck; +}; + +class QFrameAllocatorPrivate +{ +public: + QFrameAllocatorPrivate(); + + inline void *allocateAtChunk(uint allocatorIndex) + { + return m_allocatorPool[allocatorIndex].allocate(); + } + + inline void deallocateAtChunck(void *ptr, uint allocatorIndex) + { + m_allocatorPool[allocatorIndex].deallocate(ptr); + } + + inline uint allocatorIndexFromSize(uint targetSize) const + { + return (targetSize + m_alignment - 1) / m_alignment - 1; + } + + uint m_maxObjectSize; + uint m_alignment; + QVector m_allocatorPool; +}; + +} // Qt3D + +QT_END_NAMESPACE + +#endif // QT3DCORE_QFRAMEALLOCATOR_P_P_H diff --git a/src/core/resources/qhandle_p.h b/src/core/resources/qhandle_p.h index 46bd5f5d4..15f34fe98 100644 --- a/src/core/resources/qhandle_p.h +++ b/src/core/resources/qhandle_p.h @@ -123,6 +123,13 @@ uint qHash(const QHandle &h, uint seed) return qHash(h.handle(), seed); } +template +uint qHash(const QHandle &h) +{ + using QT_PREPEND_NAMESPACE(qHash); + return qHash(h.handle()); +} + } // Qt3DCore // simpler than fighting the Q_DECLARE_TYPEINFO macro, use QString as a dummy to get movable semantics diff --git a/src/core/resources/resources.pri b/src/core/resources/resources.pri index d25070d56..8fa4791c3 100644 --- a/src/core/resources/resources.pri +++ b/src/core/resources/resources.pri @@ -1,9 +1,12 @@ HEADERS += \ + $$PWD/qframeallocator_p.h \ + $$PWD/qframeallocator_p_p.h \ $$PWD/qloadgltf_p.h \ $$PWD/qresourcemanager_p.h \ $$PWD/qhandle_p.h SOURCES += \ + $$PWD/qframeallocator.cpp \ $$PWD/qresourcemanager.cpp diff --git a/src/core/transforms/qarmature.h b/src/core/transforms/qarmature.h index 5e02f99c3..34f91e280 100644 --- a/src/core/transforms/qarmature.h +++ b/src/core/transforms/qarmature.h @@ -42,13 +42,13 @@ #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DCore { class QArmaturePrivate; -class QAbstractSkeleton; class Q_3DCORESHARED_EXPORT QArmature : public Qt3DCore::QComponent { diff --git a/src/core/transforms/qskeleton.h b/src/core/transforms/qskeleton.h index 51763b488..871d3b3b4 100644 --- a/src/core/transforms/qskeleton.h +++ b/src/core/transforms/qskeleton.h @@ -41,13 +41,13 @@ #define QT3DCORE_QSKELETON_H #include +#include #include QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QJoint; class QSkeletonPrivate; class Q_3DCORESHARED_EXPORT QSkeleton : public QAbstractSkeleton diff --git a/src/core/transforms/qskeletonloader.h b/src/core/transforms/qskeletonloader.h index 23b8cdda4..d3297a67f 100644 --- a/src/core/transforms/qskeletonloader.h +++ b/src/core/transforms/qskeletonloader.h @@ -41,6 +41,7 @@ #define QT3DCORE_QSKELETONLOADER_H #include +#include #include #include @@ -48,7 +49,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { -class QJoint; class QSkeletonLoaderPrivate; class Q_3DCORESHARED_EXPORT QSkeletonLoader : public QAbstractSkeleton diff --git a/src/extras/defaults/qabstractspritesheet.h b/src/extras/defaults/qabstractspritesheet.h index ec72473f9..d52d801fd 100644 --- a/src/extras/defaults/qabstractspritesheet.h +++ b/src/extras/defaults/qabstractspritesheet.h @@ -42,17 +42,12 @@ #include #include +#include #include #include QT_BEGIN_NAMESPACE -namespace Qt3DRender { - -class QAbstractTexture; - -} // namespace Qt3DRender - namespace Qt3DExtras { class QAbstractSpriteSheetPrivate; diff --git a/src/extras/defaults/qforwardrenderer.h b/src/extras/defaults/qforwardrenderer.h index 22334373c..165b17a41 100644 --- a/src/extras/defaults/qforwardrenderer.h +++ b/src/extras/defaults/qforwardrenderer.h @@ -42,6 +42,7 @@ #include #include +#include #include #include #include diff --git a/src/extras/defaults/qspritesheet.h b/src/extras/defaults/qspritesheet.h index d1faeb825..93c4262b0 100644 --- a/src/extras/defaults/qspritesheet.h +++ b/src/extras/defaults/qspritesheet.h @@ -41,6 +41,7 @@ #define QT3DEXTRAS_QSPRITESHEET_H #include +#include #include #include @@ -48,7 +49,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DExtras { -class QSpriteSheetItem; class QSpriteSheetPrivate; class Q_3DEXTRASSHARED_EXPORT QSpriteSheet : public QAbstractSpriteSheet diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp index 8fcc77a29..34264a89f 100644 --- a/src/extras/defaults/qt3dwindow.cpp +++ b/src/extras/defaults/qt3dwindow.cpp @@ -298,7 +298,7 @@ void setupWindowSurface(QWindow *window, Qt3DRender::API api) noexcept break; } QSurfaceFormat format = QSurfaceFormat::defaultFormat(); -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/src/extras/text/qdistancefieldglyphcache.cpp b/src/extras/text/qdistancefieldglyphcache.cpp index 66d2c0495..63621848c 100644 --- a/src/extras/text/qdistancefieldglyphcache.cpp +++ b/src/extras/text/qdistancefieldglyphcache.cpp @@ -44,6 +44,7 @@ #include "qdistancefieldglyphcache_p.h" #include "qtextureatlas_p.h" +#include #include #include #include diff --git a/src/input/backend/assignkeyboardfocusjob_p.h b/src/input/backend/assignkeyboardfocusjob_p.h index 200fd72f1..0789a8dbc 100644 --- a/src/input/backend/assignkeyboardfocusjob_p.h +++ b/src/input/backend/assignkeyboardfocusjob_p.h @@ -51,6 +51,7 @@ // We mean it. // +#include #include #include diff --git a/src/input/frontend/qactioninput.h b/src/input/frontend/qactioninput.h index 7bc9a768d..86dfcb282 100644 --- a/src/input/frontend/qactioninput.h +++ b/src/input/frontend/qactioninput.h @@ -41,6 +41,7 @@ #define QT3DINPUT_QACTIONINPUT_H #include +#include #include #include @@ -48,7 +49,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { -class QAbstractPhysicalDevice; class QActionInputPrivate; class Q_3DINPUTSHARED_EXPORT QActionInput : public Qt3DInput::QAbstractActionInput diff --git a/src/input/frontend/qaxisaccumulator.h b/src/input/frontend/qaxisaccumulator.h index 4f12f2a69..e767b426f 100644 --- a/src/input/frontend/qaxisaccumulator.h +++ b/src/input/frontend/qaxisaccumulator.h @@ -41,13 +41,13 @@ #define QT3DINPUT_QAXISACCUMULATOR_H #include +#include #include QT_BEGIN_NAMESPACE namespace Qt3DInput { -class QAxis; class QAxisAccumulatorPrivate; class Q_3DINPUTSHARED_EXPORT QAxisAccumulator : public Qt3DCore::QComponent diff --git a/src/input/frontend/qkeyboarddevice.h b/src/input/frontend/qkeyboarddevice.h index ee4b864f7..8b309f6a7 100644 --- a/src/input/frontend/qkeyboarddevice.h +++ b/src/input/frontend/qkeyboarddevice.h @@ -40,7 +40,7 @@ #ifndef QT3DINPUT_INPUT_QKEYBOARDDEVICE_H #define QT3DINPUT_INPUT_QKEYBOARDDEVICE_H -#include +#include #include #include @@ -49,7 +49,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { class QKeyboardDevicePrivate; -class QKeyboardHandler; class Q_3DINPUTSHARED_EXPORT QKeyboardDevice : public Qt3DInput::QAbstractPhysicalDevice { diff --git a/src/input/frontend/qkeyboardhandler.h b/src/input/frontend/qkeyboardhandler.h index 1ee9ef1af..6dac60c37 100644 --- a/src/input/frontend/qkeyboardhandler.h +++ b/src/input/frontend/qkeyboardhandler.h @@ -56,6 +56,7 @@ class Q_3DINPUTSHARED_EXPORT QKeyboardHandler : public Qt3DCore::QComponent Q_OBJECT Q_PROPERTY(Qt3DInput::QKeyboardDevice *sourceDevice READ sourceDevice WRITE setSourceDevice NOTIFY sourceDeviceChanged) Q_PROPERTY(bool focus READ focus WRITE setFocus NOTIFY focusChanged) + Q_MOC_INCLUDE("Qt3DInput/qkeyboarddevice.h") public: explicit QKeyboardHandler(QNode *parent = nullptr); ~QKeyboardHandler(); diff --git a/src/input/frontend/qmousedevice.h b/src/input/frontend/qmousedevice.h index 66ad39e0f..3f8850d49 100644 --- a/src/input/frontend/qmousedevice.h +++ b/src/input/frontend/qmousedevice.h @@ -48,11 +48,8 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { class QMouseDevicePrivate; -class QMouseHandler; - class QMouseInput; - class Q_3DINPUTSHARED_EXPORT QMouseDevice : public Qt3DInput::QAbstractPhysicalDevice { Q_OBJECT diff --git a/src/input/frontend/qmousehandler.h b/src/input/frontend/qmousehandler.h index 307d30e9f..e895d8dd3 100644 --- a/src/input/frontend/qmousehandler.h +++ b/src/input/frontend/qmousehandler.h @@ -42,13 +42,13 @@ #include #include +#include #include QT_BEGIN_NAMESPACE namespace Qt3DInput { -class QMouseDevice; class QMouseHandlerPrivate; class Q_3DINPUTSHARED_EXPORT QMouseHandler : public Qt3DCore::QComponent diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicscontext.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicscontext.cpp index 30a8184b5..5daef2d47 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicscontext.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicscontext.cpp @@ -63,7 +63,8 @@ #include #include -#if !defined(QT_OPENGL_ES_2) +#if !QT_CONFIG(opengles2) +#include #include #include #include @@ -384,19 +385,19 @@ GraphicsHelperInterface *GraphicsContext::resolveHighestOpenGLFunctions() } glHelper->initializeHelper(m_gl, nullptr); } -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) else { QAbstractOpenGLFunctions *glFunctions = nullptr; - if ((glFunctions = m_gl->versionFunctions()) != nullptr) { + if ((glFunctions = QOpenGLVersionFunctionsFactory::get()) != nullptr) { qCDebug(Backend) << Q_FUNC_INFO << " Building OpenGL 4.3"; glHelper = new GraphicsHelperGL4(); - } else if ((glFunctions = m_gl->versionFunctions()) != nullptr) { + } else if ((glFunctions = QOpenGLVersionFunctionsFactory::get()) != nullptr) { qCDebug(Backend) << Q_FUNC_INFO << " Building OpenGL 3.3"; glHelper = new GraphicsHelperGL3_3(); - } else if ((glFunctions = m_gl->versionFunctions()) != nullptr) { + } else if ((glFunctions = QOpenGLVersionFunctionsFactory::get()) != nullptr) { qCDebug(Backend) << Q_FUNC_INFO << " Building OpenGL 3.2"; glHelper = new GraphicsHelperGL3_2(); - } else if ((glFunctions = m_gl->versionFunctions()) != nullptr) { + } else if ((glFunctions = QOpenGLVersionFunctionsFactory::get()) != nullptr) { qCDebug(Backend) << Q_FUNC_INFO << " Building OpenGL 2 Helper"; glHelper = new GraphicsHelperGL2(); } @@ -892,7 +893,7 @@ GLint GraphicsContext::elementType(GLint type) case GL_FLOAT_VEC4: return GL_FLOAT; -#ifndef QT_OPENGL_ES_2 // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 +#if !QT_CONFIG(opengles2) // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 case GL_DOUBLE: #ifdef GL_DOUBLE_VEC3 // For compiling on pre GL 4.1 systems case GL_DOUBLE_VEC2: @@ -912,7 +913,7 @@ GLint GraphicsContext::tupleSizeFromType(GLint type) { switch (type) { case GL_FLOAT: -#ifndef QT_OPENGL_ES_2 // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 +#if !QT_CONFIG(opengles2) // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 case GL_DOUBLE: #endif case GL_UNSIGNED_BYTE: @@ -948,7 +949,7 @@ GLuint GraphicsContext::byteSizeFromType(GLint type) { switch (type) { case GL_FLOAT: return sizeof(float); -#ifndef QT_OPENGL_ES_2 // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 +#if !QT_CONFIG(opengles2) // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 case GL_DOUBLE: return sizeof(double); #endif case GL_UNSIGNED_BYTE: return sizeof(unsigned char); @@ -990,7 +991,7 @@ GLint GraphicsContext::glDataTypeFromAttributeDataType(Qt3DCore::QAttribute::Ver #ifdef GL_HALF_FLOAT return GL_HALF_FLOAT; #endif -#ifndef QT_OPENGL_ES_2 // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 +#if !QT_CONFIG(opengles2) // Otherwise compile error as Qt defines GL_DOUBLE as GL_FLOAT when using ES2 case QAttribute::Double: return GL_DOUBLE; #endif diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes2.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes2.cpp index 3ae9ed932..72cee57a4 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes2.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes2.cpp @@ -79,7 +79,7 @@ GraphicsHelperES2::~GraphicsHelperES2() } void GraphicsHelperES2::initializeHelper(QOpenGLContext *context, - QAbstractOpenGLFunctions *) + QAbstractOpenGLFunctions *) { Q_ASSERT(context); m_funcs = context->functions(); diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes3.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes3.cpp index 97a256b9c..c4a68229c 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes3.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperes3.cpp @@ -180,7 +180,7 @@ GraphicsHelperES3::~GraphicsHelperES3() } void GraphicsHelperES3::initializeHelper(QOpenGLContext *context, - QAbstractOpenGLFunctions *functions) + QAbstractOpenGLFunctions *functions) { GraphicsHelperES2::initializeHelper(context, functions); m_extraFuncs = context->extraFunctions(); diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp index 6989be743..45704076b 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include "graphicshelpergl2_p.h" -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) #include #include #include diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h index 7eac312b8..cb38ea481 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h @@ -53,7 +53,7 @@ #include -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) QT_BEGIN_NAMESPACE diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp index cb0a62224..021c668b2 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp @@ -39,7 +39,7 @@ #include "graphicshelpergl3_2_p.h" -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) #include #include #include diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h index a7396dc87..3e363337d 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h @@ -54,7 +54,7 @@ #include #include -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) QT_BEGIN_NAMESPACE diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp index f5a61aa4b..200d9c3eb 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp @@ -39,7 +39,7 @@ #include "graphicshelpergl3_3_p.h" -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) #include #include #include diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h index 3b667420c..68eebe987 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h @@ -54,7 +54,7 @@ #include #include -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) QT_BEGIN_NAMESPACE diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp index 96e055870..0a36e6a24 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp @@ -39,7 +39,7 @@ #include "graphicshelpergl4_p.h" -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) #include #include #include diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h index 1fa390806..8d3e8f957 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h @@ -54,7 +54,7 @@ #include #include -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) QT_BEGIN_NAMESPACE diff --git a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h index bbbf05ee0..b574c34a1 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h +++ b/src/plugins/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h @@ -53,6 +53,7 @@ #include #include +#include #include #include #include diff --git a/src/plugins/renderers/opengl/graphicshelpers/submissioncontext.cpp b/src/plugins/renderers/opengl/graphicshelpers/submissioncontext.cpp index d4d3457ab..0cba8760c 100644 --- a/src/plugins/renderers/opengl/graphicshelpers/submissioncontext.cpp +++ b/src/plugins/renderers/opengl/graphicshelpers/submissioncontext.cpp @@ -66,7 +66,7 @@ #include #include -#if !defined(QT_OPENGL_ES_2) +#if !QT_CONFIG(opengles2) #include #include #include @@ -628,7 +628,7 @@ QImage SubmissionContext::readFramebuffer(const QRect &rect) case QAbstractTexture::RGBA8_UNorm: case QAbstractTexture::RGBA8U: case QAbstractTexture::SRGB8_Alpha8: -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format = GL_RGBA; imageFormat = QImage::Format_RGBA8888_Premultiplied; #else @@ -644,7 +644,7 @@ QImage SubmissionContext::readFramebuffer(const QRect &rect) case QAbstractTexture::RGBFormat: case QAbstractTexture::RGB8U: case QAbstractTexture::RGB8_UNorm: -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format = GL_RGBA; imageFormat = QImage::Format_RGBX8888; #else @@ -656,7 +656,7 @@ QImage SubmissionContext::readFramebuffer(const QRect &rect) bytes = area * 4; stride = rect.width() * 4; break; -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) case QAbstractTexture::RG11B10F: bytes = area * 4; format = GL_RGB; @@ -1074,7 +1074,7 @@ void SubmissionContext::resetMasked(qint64 maskOfStatesToReset) if (maskOfStatesToReset & LineWidthMask) funcs->glLineWidth(1.0f); -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) if (maskOfStatesToReset & RasterModeMask) m_glHelper->rasterMode(GL_FRONT_AND_BACK, GL_FILL); #endif diff --git a/src/plugins/renderers/opengl/renderer/frameprofiler_p.h b/src/plugins/renderers/opengl/renderer/frameprofiler_p.h index 591ace53e..f1d235724 100644 --- a/src/plugins/renderers/opengl/renderer/frameprofiler_p.h +++ b/src/plugins/renderers/opengl/renderer/frameprofiler_p.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) +#if !defined(QT_NO_OPENGL) && !QT_CONFIG(opengles2) #define QT3D_SUPPORTS_GL_MONITOR #endif diff --git a/src/plugins/renderers/opengl/renderer/openglvertexarrayobject_p.h b/src/plugins/renderers/opengl/renderer/openglvertexarrayobject_p.h index ff58b3074..7ab7fbb05 100644 --- a/src/plugins/renderers/opengl/renderer/openglvertexarrayobject_p.h +++ b/src/plugins/renderers/opengl/renderer/openglvertexarrayobject_p.h @@ -51,7 +51,7 @@ // We mean it. // -#include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp index 57ee5ec88..45b74d924 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.cpp +++ b/src/plugins/renderers/opengl/renderer/renderer.cpp @@ -866,7 +866,6 @@ void Renderer::enqueueRenderView(RenderView *renderView, int submitOrder) } bool Renderer::canRender() const - { // Make sure that we've not been told to terminate if (m_renderThread && !m_running.loadRelaxed()) { diff --git a/src/plugins/renderers/opengl/textures/gltexture.cpp b/src/plugins/renderers/opengl/textures/gltexture.cpp index 30247a719..a44ef6877 100644 --- a/src/plugins/renderers/opengl/textures/gltexture.cpp +++ b/src/plugins/renderers/opengl/textures/gltexture.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -55,7 +56,7 @@ #include #include -#if !defined(QT_OPENGL_ES_2) +#if !QT_CONFIG(opengles2) #include #include #endif @@ -660,7 +661,7 @@ void GLTexture::introspectPropertiesFromSharedTextureId() const QAbstractTexture::Target targets[] = { QAbstractTexture::Target2D, QAbstractTexture::TargetCubeMap, -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) QAbstractTexture::Target1D, QAbstractTexture::Target1DArray, QAbstractTexture::Target3D, @@ -673,13 +674,13 @@ void GLTexture::introspectPropertiesFromSharedTextureId() #endif }; -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) // Try to find texture target with GL 4.5 functions const QPair ctxGLVersion = ctx->format().version(); if (ctxGLVersion.first > 4 || (ctxGLVersion.first == 4 && ctxGLVersion.second >= 5)) { // Only for GL 4.5+ #ifdef GL_TEXTURE_TARGET - QOpenGLFunctions_4_5_Core *gl5 = ctx->versionFunctions(); + QOpenGLFunctions_4_5_Core *gl5 = QOpenGLVersionFunctionsFactory::get(); if (gl5 != nullptr) gl5->glGetTextureParameteriv(m_sharedTextureId, GL_TEXTURE_TARGET, reinterpret_cast(&m_properties.target)); #endif @@ -694,7 +695,7 @@ void GLTexture::introspectPropertiesFromSharedTextureId() const GLenum targetBindings[] = { GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_CUBE_MAP, -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) GL_TEXTURE_BINDING_1D, GL_TEXTURE_BINDING_1D_ARRAY, GL_TEXTURE_BINDING_3D, @@ -748,10 +749,10 @@ void GLTexture::introspectPropertiesFromSharedTextureId() gl->glGetTexParameteriv(int(m_properties.target), GL_TEXTURE_WRAP_S, reinterpret_cast(&m_parameters.wrapModeY)); gl->glGetTexParameteriv(int(m_properties.target), GL_TEXTURE_WRAP_T, reinterpret_cast(&m_parameters.wrapModeZ)); -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) // Try to retrieve dimensions (not available on ES 2.0) if (!ctx->isOpenGLES()) { - QOpenGLFunctions_3_1 *gl3 = ctx->versionFunctions(); + QOpenGLFunctions_3_1 *gl3 = QOpenGLVersionFunctionsFactory::get(); if (!gl3) { qWarning() << "Failed to retrieve shared texture dimensions"; return; diff --git a/src/plugins/renderers/rhi/graphicshelpers/submissioncontext.cpp b/src/plugins/renderers/rhi/graphicshelpers/submissioncontext.cpp index 5b217929c..2d0292d9d 100644 --- a/src/plugins/renderers/rhi/graphicshelpers/submissioncontext.cpp +++ b/src/plugins/renderers/rhi/graphicshelpers/submissioncontext.cpp @@ -39,6 +39,7 @@ #include "submissioncontext_p.h" +#include #include #include #include @@ -60,7 +61,6 @@ #include #include #include -#include #include #include #include @@ -96,6 +96,8 @@ QT_BEGIN_NAMESPACE +using namespace Qt3DCore; + namespace Qt3DRender { namespace Render { namespace Rhi { @@ -1514,7 +1516,7 @@ void SubmissionContext::uploadDataToRHIBuffer(Buffer *buffer, RHIBuffer *b, bool // Note: we are only storing the updates data CPU side at this point // actually upload will be performed when the buffer will be bound // as we would otherwise need to know the usage type of the buffer - QVector updates = std::move(buffer->pendingBufferUpdates()); + QVector updates = std::move(buffer->pendingBufferUpdates()); for (auto it = updates.begin(); it != updates.end(); ++it) { auto update = it; // We have a partial update diff --git a/src/plugins/renderers/rhi/graphicshelpers/submissioncontext_p.h b/src/plugins/renderers/rhi/graphicshelpers/submissioncontext_p.h index 7578639e6..979bf7ec9 100644 --- a/src/plugins/renderers/rhi/graphicshelpers/submissioncontext_p.h +++ b/src/plugins/renderers/rhi/graphicshelpers/submissioncontext_p.h @@ -54,7 +54,6 @@ #include #include -#include #include #include #include diff --git a/src/plugins/renderers/rhi/managers/rhiresourcemanagers_p.h b/src/plugins/renderers/rhi/managers/rhiresourcemanagers_p.h index 34758530d..3d78c5d07 100644 --- a/src/plugins/renderers/rhi/managers/rhiresourcemanagers_p.h +++ b/src/plugins/renderers/rhi/managers/rhiresourcemanagers_p.h @@ -132,6 +132,13 @@ inline uint qHash(const GraphicsPipelineIdentifier &key, uint seed) return qHash(p, seed) + qHash(key.renderViewIndex, seed); } +inline uint qHash(const GraphicsPipelineIdentifier &key) +{ + const QPair p = { key.geometry, key.shader }; + using QT_PREPEND_NAMESPACE(qHash); + return qHash(p) + qHash(key.renderViewIndex); +} + inline bool operator==(const GraphicsPipelineIdentifier &a, const GraphicsPipelineIdentifier &b) { return a.geometry == b.geometry && a.shader == b.shader diff --git a/src/plugins/renderers/rhi/renderer/rendercommand.cpp b/src/plugins/renderers/rhi/renderer/rendercommand.cpp index 8320abac1..065bc71a0 100644 --- a/src/plugins/renderers/rhi/renderer/rendercommand.cpp +++ b/src/plugins/renderers/rhi/renderer/rendercommand.cpp @@ -62,7 +62,7 @@ RenderCommand::RenderCommand() m_instanceCount(0), m_indexOffset(0), m_indexAttributeByteOffset(0), - m_indexAttributeDataType(Qt3DRender::QAttribute::UnsignedShort), + m_indexAttributeDataType(Qt3DCore::QAttribute::UnsignedShort), m_indirectAttributeByteOffset(0), m_drawIndexed(false), m_drawIndirect(false), diff --git a/src/plugins/renderers/rhi/renderer/rendercommand_p.h b/src/plugins/renderers/rhi/renderer/rendercommand_p.h index e6924a60c..decc87230 100644 --- a/src/plugins/renderers/rhi/renderer/rendercommand_p.h +++ b/src/plugins/renderers/rhi/renderer/rendercommand_p.h @@ -62,7 +62,7 @@ #include #include #include -#include +#include QT_BEGIN_NAMESPACE class QRhiGraphicsPipeline; @@ -137,7 +137,7 @@ public: int m_instanceCount; int m_indexOffset; uint m_indexAttributeByteOffset; - Qt3DRender::QAttribute::VertexBaseType m_indexAttributeDataType; + Qt3DCore::QAttribute::VertexBaseType m_indexAttributeDataType; uint m_indirectAttributeByteOffset; bool m_drawIndexed; bool m_drawIndirect; diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp index ee9a26a98..c27a4e097 100644 --- a/src/plugins/renderers/rhi/renderer/renderer.cpp +++ b/src/plugins/renderers/rhi/renderer/renderer.cpp @@ -73,7 +73,6 @@ #include #include #include -#include #include #include #include @@ -1286,7 +1285,7 @@ void Renderer::lookForDownloadableBuffers() const QVector activeBufferHandles = m_nodesManager->bufferManager()->activeHandles(); for (const HBuffer &handle : activeBufferHandles) { Buffer *buffer = m_nodesManager->bufferManager()->data(handle); - if (buffer->access() & QBuffer::Read) + if (buffer->access() & Qt3DCore::QBuffer::Read) m_downloadableBuffers.push_back(buffer->peerId()); } } diff --git a/src/plugins/renderers/rhi/renderer/renderview.cpp b/src/plugins/renderers/rhi/renderer/renderview.cpp index 54295ef5f..789118f60 100644 --- a/src/plugins/renderers/rhi/renderer/renderview.cpp +++ b/src/plugins/renderers/rhi/renderer/renderview.cpp @@ -621,6 +621,8 @@ EntityRenderCommandData RenderView::buildDrawRenderCommands(const QVector attributeIds = geometry->attributes(); for (Qt3DCore::QNodeId attributeId : attributeIds) { + using namespace Qt3DCore; + Attribute *attribute = m_manager->attributeManager()->lookupResource(attributeId); switch (attribute->attributeType()) { diff --git a/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp b/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp index 6455d2e10..72c27de1d 100644 --- a/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp +++ b/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp @@ -466,9 +466,13 @@ public: m_renderer->cache()->leafNodeCache[m_leafNode]; dataCacheForLeaf.materialParameterGatherer.clear(); - for (const auto &materialGatherer : qAsConst(m_materialParameterGathererJobs)) - dataCacheForLeaf.materialParameterGatherer.unite( - materialGatherer->materialToPassAndParameter()); + for (const auto &materialGatherer : qAsConst(m_materialParameterGathererJobs)) { + const MaterialParameterGathererData &source = materialGatherer->materialToPassAndParameter(); + for (auto it = std::begin(source); it != std::end(source); ++it) { + Q_ASSERT(!dataCacheForLeaf.materialParameterGatherer.contains(it.key())); + dataCacheForLeaf.materialParameterGatherer.insert(it.key(), it.value()); + } + } } private: diff --git a/src/plugins/renderers/rhi/textures/texture_p.h b/src/plugins/renderers/rhi/textures/texture_p.h index 536cb962e..c78bc1c1b 100644 --- a/src/plugins/renderers/rhi/textures/texture_p.h +++ b/src/plugins/renderers/rhi/textures/texture_p.h @@ -53,7 +53,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/quick3d/imports/scene3d/scene3ditem_p.h b/src/quick3d/imports/scene3d/scene3ditem_p.h index 0beaf94c0..5cd94d74b 100644 --- a/src/quick3d/imports/scene3d/scene3ditem_p.h +++ b/src/quick3d/imports/scene3d/scene3ditem_p.h @@ -53,6 +53,7 @@ #include #include +#include QT_BEGIN_NAMESPACE diff --git a/src/quick3d/imports/scene3d/scene3dview_p.h b/src/quick3d/imports/scene3d/scene3dview_p.h index ffb80f93b..c39c81dd8 100644 --- a/src/quick3d/imports/scene3d/scene3dview_p.h +++ b/src/quick3d/imports/scene3d/scene3dview_p.h @@ -53,16 +53,13 @@ #include #include +#include +#include "scene3ditem_p.h" QT_BEGIN_NAMESPACE class QSGTexture; -namespace Qt3DCore { -class QEntity; -class QNode; -} - namespace Qt3DRender { class QLayer; diff --git a/src/quick3d/quick3d/items/quick3dbuffer.cpp b/src/quick3d/quick3d/items/quick3dbuffer.cpp index 7beb1cc90..dd2c4dca4 100644 --- a/src/quick3d/quick3d/items/quick3dbuffer.cpp +++ b/src/quick3d/quick3d/items/quick3dbuffer.cpp @@ -71,7 +71,7 @@ QByteArray Quick3DBuffer::convertToRawData(const QJSValue &jsValue) Q_ASSERT(m_v4engine); QV4::Scope scope(m_v4engine); QV4::Scoped typedArray(scope, - QJSValuePrivate::convertedToValue(m_v4engine, jsValue)); + QJSValuePrivate::convertToReturnedValue(m_v4engine, jsValue)); if (!typedArray) return QByteArray(); diff --git a/src/quick3d/quick3dscene2d/items/qscene2d.h b/src/quick3d/quick3dscene2d/items/qscene2d.h index 136d6347f..22708bf21 100644 --- a/src/quick3d/quick3dscene2d/items/qscene2d.h +++ b/src/quick3d/quick3dscene2d/items/qscene2d.h @@ -43,7 +43,7 @@ #include #include -#include +#include #include diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp index 2b0a6580d..4e2dbcd18 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp @@ -244,7 +244,7 @@ void Scene2D::initializeRender() m_context->makeCurrent(m_sharedObject->m_surface); m_sharedObject->m_renderControl->initialize(m_context); -#ifdef QT_OPENGL_ES_2_ANGLE +#if QT_CONFIG(angle) m_usingAngle = false; if (m_context->isOpenGLES()) { const char *versionStr = reinterpret_cast( @@ -309,7 +309,7 @@ void Scene2D::render() const Qt3DRender::Render::Attachment *attachmentData = nullptr; QMutex *textureLock = nullptr; -#ifdef QT_OPENGL_ES_2_ANGLE +#if QT_CONFIG(angle) QScopedPointer surfaceLocker; if (m_usingAngle) surfaceLocker.reset(new SurfaceLocker(m_sharedObject->m_surface)); @@ -329,7 +329,7 @@ void Scene2D::render() new Scene2DEvent(Scene2DEvent::Render)); return; } -#ifdef QT_OPENGL_ES_2_ANGLE +#if QT_CONFIG(angle) if (m_usingAngle == false) textureLock->lock(); #else @@ -382,7 +382,7 @@ void Scene2D::render() m_context->functions()->glFlush(); if (texture->isAutoMipMapGenerationEnabled()) texture->generateMipMaps(); -#ifdef QT_OPENGL_ES_2_ANGLE +#if QT_CONFIG(angle) if (m_usingAngle == false) textureLock->unlock(); #else diff --git a/src/quick3d/quick3dscene2d/items/scene2d_p.h b/src/quick3d/quick3dscene2d/items/scene2d_p.h index c7626f73d..539602b2d 100644 --- a/src/quick3d/quick3dscene2d/items/scene2d_p.h +++ b/src/quick3d/quick3dscene2d/items/scene2d_p.h @@ -119,7 +119,7 @@ public: Qt3DRender::Quick::QScene2D::RenderPolicy m_renderPolicy; QVector m_entities; Qt3DRender::QPickEventPtr m_cachedPickEvent; -#ifdef QT_OPENGL_ES_2_ANGLE +#if QT_CONFIG(angle) bool m_usingAngle; #endif QVector m_connections; diff --git a/src/render/framegraph/qblitframebuffer.h b/src/render/framegraph/qblitframebuffer.h index 22c422928..75943ee2c 100644 --- a/src/render/framegraph/qblitframebuffer.h +++ b/src/render/framegraph/qblitframebuffer.h @@ -42,6 +42,7 @@ #include #include +#include #include QT_BEGIN_NAMESPACE @@ -49,7 +50,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { class QBlitFramebufferPrivate; -class QRenderTarget; class Q_3DRENDERSHARED_EXPORT QBlitFramebuffer : public QFrameGraphNode { diff --git a/src/render/framegraph/qcameraselector.h b/src/render/framegraph/qcameraselector.h index 61d730f57..99e108af0 100644 --- a/src/render/framegraph/qcameraselector.h +++ b/src/render/framegraph/qcameraselector.h @@ -40,6 +40,7 @@ #ifndef QT3DRENDER_QCAMERASELECTOR_H #define QT3DRENDER_QCAMERASELECTOR_H +#include #include #include diff --git a/src/render/framegraph/qproximityfilter.h b/src/render/framegraph/qproximityfilter.h index 56b48c46f..860807773 100644 --- a/src/render/framegraph/qproximityfilter.h +++ b/src/render/framegraph/qproximityfilter.h @@ -40,6 +40,7 @@ #ifndef QT3DRENDER_QPROXIMITYFILTER_H #define QT3DRENDER_QPROXIMITYFILTER_H +#include #include QT_BEGIN_NAMESPACE diff --git a/src/render/framegraph/qrendertargetselector.h b/src/render/framegraph/qrendertargetselector.h index cb6c679ff..84fdfe82e 100644 --- a/src/render/framegraph/qrendertargetselector.h +++ b/src/render/framegraph/qrendertargetselector.h @@ -44,13 +44,13 @@ #include #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DRender { class QRenderTargetSelectorPrivate; -class QRenderTarget; class Q_3DRENDERSHARED_EXPORT QRenderTargetSelector : public QFrameGraphNode { diff --git a/src/render/frontend/qcamera.h b/src/render/frontend/qcamera.h index b57f57957..82a1c04bd 100644 --- a/src/render/frontend/qcamera.h +++ b/src/render/frontend/qcamera.h @@ -41,6 +41,7 @@ #define QT3DRENDER_CAMERA_H #include +#include #include #include #include @@ -49,11 +50,6 @@ QT_BEGIN_NAMESPACE -namespace Qt3DCore { -class QEntity; -class QTransform; -} - namespace Qt3DRender { class QCameraPrivate; diff --git a/src/render/frontend/qlevelofdetail.h b/src/render/frontend/qlevelofdetail.h index 1192ff1e8..f31c90db7 100644 --- a/src/render/frontend/qlevelofdetail.h +++ b/src/render/frontend/qlevelofdetail.h @@ -43,6 +43,7 @@ #include #include #include +#include #include @@ -50,7 +51,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QCamera; class QLevelOfDetailPrivate; class Q_3DRENDERSHARED_EXPORT QLevelOfDetail : public Qt3DCore::QComponent diff --git a/src/render/materialsystem/qmaterial.h b/src/render/materialsystem/qmaterial.h index 74feb3675..2d306d016 100644 --- a/src/render/materialsystem/qmaterial.h +++ b/src/render/materialsystem/qmaterial.h @@ -44,15 +44,15 @@ #include #include +#include +#include QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QAbstractTexture; class QParameter; class QMaterialPrivate; -class QEffect; class Q_3DRENDERSHARED_EXPORT QMaterial : public Qt3DCore::QComponent { diff --git a/src/render/materialsystem/qshaderimage.h b/src/render/materialsystem/qshaderimage.h index cc9d3c728..de323f6c6 100644 --- a/src/render/materialsystem/qshaderimage.h +++ b/src/render/materialsystem/qshaderimage.h @@ -42,12 +42,12 @@ #include #include +#include QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QAbstractTexture; class QShaderImagePrivate; class Q_3DRENDERSHARED_EXPORT QShaderImage : public Qt3DCore::QNode diff --git a/src/render/materialsystem/qshaderprogrambuilder.h b/src/render/materialsystem/qshaderprogrambuilder.h index fa8f77ea0..2280306b3 100644 --- a/src/render/materialsystem/qshaderprogrambuilder.h +++ b/src/render/materialsystem/qshaderprogrambuilder.h @@ -42,6 +42,7 @@ #include #include +#include #include @@ -49,7 +50,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QShaderProgram; class QShaderProgramBuilderPrivate; class Q_3DRENDERSHARED_EXPORT QShaderProgramBuilder : public Qt3DCore::QNode diff --git a/src/render/picking/qpickevent.h b/src/render/picking/qpickevent.h index 854008aaf..0733499bf 100644 --- a/src/render/picking/qpickevent.h +++ b/src/render/picking/qpickevent.h @@ -43,19 +43,15 @@ #include #include #include +#include +#include #include QT_BEGIN_NAMESPACE -namespace Qt3DCore { -class QEntity; -} - namespace Qt3DRender { -class QViewport; class QPickEventPrivate; - class QPickEvent; typedef QSharedPointer QPickEventPtr; diff --git a/src/render/raycasting/qraycastingservice.cpp b/src/render/raycasting/qraycastingservice.cpp index bdb1557f7..e9a88e3a3 100644 --- a/src/render/raycasting/qraycastingservice.cpp +++ b/src/render/raycasting/qraycastingservice.cpp @@ -194,8 +194,9 @@ QQueryHandle QRayCastingService::query(const QRay3D &ray, // Blocking mapReduce #if QT_CONFIG(concurrent) - FutureQueryResult future = QtConcurrent::run(d, &QRayCastingServicePrivate::collides, - ray, provider, mode, handle); + FutureQueryResult future = QtConcurrent::run([d, ray, provider, mode, handle]{ + return d->collides(ray, provider, mode, handle); + }); d->m_results.insert(handle, future); #else d->m_results.insert(handle, d->collides(ray, provider, mode, handle)); diff --git a/src/render/renderstates/qstenciloperation.h b/src/render/renderstates/qstenciloperation.h index 3e2cbacea..313d1726b 100644 --- a/src/render/renderstates/qstenciloperation.h +++ b/src/render/renderstates/qstenciloperation.h @@ -41,13 +41,13 @@ #define QT3DRENDER_QSTENCILOPERATION_H #include +#include QT_BEGIN_NAMESPACE namespace Qt3DRender { class QStencilOperationPrivate; -class QStencilOperationArguments; class Q_3DRENDERSHARED_EXPORT QStencilOperation : public QRenderState { diff --git a/src/render/renderstates/qstenciltest.h b/src/render/renderstates/qstenciltest.h index 1faaa524c..518255dbe 100644 --- a/src/render/renderstates/qstenciltest.h +++ b/src/render/renderstates/qstenciltest.h @@ -42,13 +42,13 @@ #define QT3DRENDER_QSTENCILTEST_H #include +#include QT_BEGIN_NAMESPACE namespace Qt3DRender { class QStencilTestPrivate; -class QStencilTestArguments; class Q_3DRENDERSHARED_EXPORT QStencilTest : public QRenderState { diff --git a/src/render/texture/qabstracttexture.h b/src/render/texture/qabstracttexture.h index 37329b61a..f46344eff 100644 --- a/src/render/texture/qabstracttexture.h +++ b/src/render/texture/qabstracttexture.h @@ -41,6 +41,7 @@ #define QT3DRENDER_QABSTRACTTEXTURE_H #include +#include #include #include @@ -49,7 +50,6 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { class QAbstractTexturePrivate; -class QTextureWrapMode; class QAbstractTextureImage; class QTextureDataUpdate; diff --git a/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp b/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp index 6fcc2e637..e2917789e 100644 --- a/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp +++ b/tests/auto/extras/qtext2dentity/tst_qtext2dentity.cpp @@ -77,7 +77,7 @@ private slots: void tst_qtext2dentity::checkChangeArbiter() { -#if !defined(QT_OPENGL_ES_2_ANGLE) +#if !QT_CONFIG(angle) // GIVEN Qt3DExtras::Quick::Qt3DQuickWindow view; view.setSource(QUrl("qrc:/qtext2dentity.qml")); diff --git a/tests/auto/quick3d/3dinput/3dinput.qml b/tests/auto/quick3d/3dinput/3dinput.qml index 9ae53f66a..b95a8d460 100644 --- a/tests/auto/quick3d/3dinput/3dinput.qml +++ b/tests/auto/quick3d/3dinput/3dinput.qml @@ -47,6 +47,7 @@ Item { QQ3Input20.AxisSetting {} //Qt3DInput::QAxisSetting QQ3Input20.AnalogAxisInput {} //Qt3DInput::QAnalogAxisInput QQ3Input20.ButtonAxisInput {} //Qt3DInput::QButtonAxisInput - QQ3Input20.GamepadInput {} //Qt3DInput::QGamepadInput + // Disabled for Qt 6 + // QQ3Input20.GamepadInput {} //Qt3DInput::QGamepadInput } diff --git a/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp b/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp index e5c34f804..7d897a358 100644 --- a/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp +++ b/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp @@ -179,7 +179,7 @@ private Q_SLOTS: void initTestCase() { QSurfaceFormat format; -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/tests/auto/render/opengl/graphicshelpergl2/tst_graphicshelpergl2.cpp b/tests/auto/render/opengl/graphicshelpergl2/tst_graphicshelpergl2.cpp index 5a1d22283..f733697f7 100644 --- a/tests/auto/render/opengl/graphicshelpergl2/tst_graphicshelpergl2.cpp +++ b/tests/auto/render/opengl/graphicshelpergl2/tst_graphicshelpergl2.cpp @@ -33,13 +33,14 @@ #include #include #include +#include #include #include #include #include #include -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) #define TEST_SHOULD_BE_PERFORMED 1 @@ -153,7 +154,7 @@ private Q_SLOTS: return; } - if ((m_func = m_glContext.versionFunctions()) != nullptr) { + if ((m_func = QOpenGLVersionFunctionsFactory::get()) != nullptr) { if (m_glContext.hasExtension(QByteArrayLiteral("GL_ARB_framebuffer_object"))) { m_fboFuncs = new QOpenGLExtension_ARB_framebuffer_object(); m_fboFuncs->initializeOpenGLFunctions(); diff --git a/tests/auto/render/opengl/graphicshelpergl3_2/tst_graphicshelpergl3_2.cpp b/tests/auto/render/opengl/graphicshelpergl3_2/tst_graphicshelpergl3_2.cpp index 08c30dc15..e784e5b9a 100644 --- a/tests/auto/render/opengl/graphicshelpergl3_2/tst_graphicshelpergl3_2.cpp +++ b/tests/auto/render/opengl/graphicshelpergl3_2/tst_graphicshelpergl3_2.cpp @@ -32,12 +32,13 @@ #include #include #include +#include #include #include #include #include -#if !defined(QT_OPENGL_ES_2) && defined(QT_OPENGL_3_2) +#if !QT_CONFIG(opengles2) && defined(QT_OPENGL_3_2) #define TEST_SHOULD_BE_PERFORMED 1 @@ -207,7 +208,7 @@ private Q_SLOTS: return; } - if ((m_func = m_glContext.versionFunctions()) != nullptr) { + if ((m_func = QOpenGLVersionFunctionsFactory::get()) != nullptr) { m_glHelper.initializeHelper(&m_glContext, m_func); m_initializationSuccessful = true; } diff --git a/tests/auto/render/opengl/graphicshelpergl3_3/graphicshelpergl3_3.pro b/tests/auto/render/opengl/graphicshelpergl3_3/graphicshelpergl3_3.pro index 5ef0b6806..ae8e06eba 100644 --- a/tests/auto/render/opengl/graphicshelpergl3_3/graphicshelpergl3_3.pro +++ b/tests/auto/render/opengl/graphicshelpergl3_3/graphicshelpergl3_3.pro @@ -2,7 +2,7 @@ TEMPLATE = app TARGET = tst_graphicshelpergl3_3 -QT += 3dcore 3dcore-private 3drender 3drender-private testlib +QT += 3dcore 3dcore-private 3drender 3drender-private testlib opengl CONFIG += testcase diff --git a/tests/auto/render/opengl/graphicshelpergl3_3/tst_graphicshelpergl3_3.cpp b/tests/auto/render/opengl/graphicshelpergl3_3/tst_graphicshelpergl3_3.cpp index b463e6236..7e2ca4aa0 100644 --- a/tests/auto/render/opengl/graphicshelpergl3_3/tst_graphicshelpergl3_3.cpp +++ b/tests/auto/render/opengl/graphicshelpergl3_3/tst_graphicshelpergl3_3.cpp @@ -32,11 +32,12 @@ #include #include #include +#include #include #include #include -#if !defined(QT_OPENGL_ES_2) && defined(QT_OPENGL_3_2) +#if !QT_CONFIG(opengles2) && defined(QT_OPENGL_3_2) #define TEST_SHOULD_BE_PERFORMED 1 @@ -207,7 +208,7 @@ private Q_SLOTS: return; } - if ((m_func = m_glContext.versionFunctions()) != nullptr) { + if ((m_func = QOpenGLVersionFunctionsFactory::get()) != nullptr) { m_glHelper.initializeHelper(&m_glContext, m_func); m_initializationSuccessful = true; } diff --git a/tests/auto/render/opengl/graphicshelpergl4/tst_graphicshelpergl4.cpp b/tests/auto/render/opengl/graphicshelpergl4/tst_graphicshelpergl4.cpp index 8f86f38ce..92a4a4af0 100644 --- a/tests/auto/render/opengl/graphicshelpergl4/tst_graphicshelpergl4.cpp +++ b/tests/auto/render/opengl/graphicshelpergl4/tst_graphicshelpergl4.cpp @@ -36,8 +36,9 @@ #include #include #include +#include -#if !defined(QT_OPENGL_ES_2) && defined(QT_OPENGL_4_3) +#if !QT_CONFIG(opengles2) && defined(QT_OPENGL_4_3) #define TEST_SHOULD_BE_PERFORMED 1 @@ -255,7 +256,7 @@ private Q_SLOTS: return; } - if ((m_func = m_glContext.versionFunctions()) != nullptr) { + if ((m_func = QOpenGLVersionFunctionsFactory::get()) != nullptr) { m_glHelper.initializeHelper(&m_glContext, m_func); m_initializationSuccessful = true; } diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index e772e3ddd..4582b7644 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -143,9 +143,7 @@ qtConfig(qt3d-opengl-renderer):qtConfig(private_tests) { qmaterial \ geometryloaders \ picking \ - pickboundingvolumejob \ - gltfplugins \ - updateshaderdatatransformjob + gltfplugins } qtConfig(qt3d-input) { diff --git a/tests/auto/render/shadergraph/qshadernodesloader/tst_qshadernodesloader.cpp b/tests/auto/render/shadergraph/qshadernodesloader/tst_qshadernodesloader.cpp index 27cf7f425..efce243bd 100644 --- a/tests/auto/render/shadergraph/qshadernodesloader/tst_qshadernodesloader.cpp +++ b/tests/auto/render/shadergraph/qshadernodesloader/tst_qshadernodesloader.cpp @@ -32,6 +32,7 @@ #include #include +#include #include using namespace Qt3DRender; @@ -86,11 +87,21 @@ class tst_QShaderNodesLoader : public QObject { Q_OBJECT private slots: + void initTestCase(); void shouldManipulateLoaderMembers(); void shouldLoadFromJsonStream_data(); void shouldLoadFromJsonStream(); }; +void tst_QShaderNodesLoader::initTestCase() +{ + // Make sure we register the meta types. This is done by the + // QShaderGraphLoader ctor usually but in this test, no QShaderGraphLoader + // is used so we need to to it ourselves + QShaderGraphLoader l; + Q_UNUSED(l); +} + void tst_QShaderNodesLoader::shouldManipulateLoaderMembers() { // GIVEN diff --git a/tests/manual/boundingvolumes/main.cpp b/tests/manual/boundingvolumes/main.cpp index 2a988a271..4d22a5b68 100644 --- a/tests/manual/boundingvolumes/main.cpp +++ b/tests/manual/boundingvolumes/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char **argv) { // Set OpenGL requirements QSurfaceFormat format = QSurfaceFormat::defaultFormat(); -#ifndef QT_OPENGL_ES_2 +#if !QT_CONFIG(opengles2) format.setVersion(4, 1); format.setProfile(QSurfaceFormat::CoreProfile); format.setSamples(4); diff --git a/tests/manual/manual-renderloop/main.cpp b/tests/manual/manual-renderloop/main.cpp index 44d661136..a3f108e50 100644 --- a/tests/manual/manual-renderloop/main.cpp +++ b/tests/manual/manual-renderloop/main.cpp @@ -172,7 +172,7 @@ private: int main(int ac, char **av) { QSurfaceFormat format = QSurfaceFormat::defaultFormat(); -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/tests/manual/qtbug-76766/main.cpp b/tests/manual/qtbug-76766/main.cpp index f9d49846a..d6cfabd89 100644 --- a/tests/manual/qtbug-76766/main.cpp +++ b/tests/manual/qtbug-76766/main.cpp @@ -44,7 +44,7 @@ void setSurfaceFormat() { QSurfaceFormat format; -#ifdef QT_OPENGL_ES_2 +#if QT_CONFIG(opengles2) format.setRenderableType(QSurfaceFormat::OpenGLES); #else if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { diff --git a/tests/manual/rendercapture-cpp/orbittransformcontroller.h b/tests/manual/rendercapture-cpp/orbittransformcontroller.h index 5f41722b6..98143388c 100644 --- a/tests/manual/rendercapture-cpp/orbittransformcontroller.h +++ b/tests/manual/rendercapture-cpp/orbittransformcontroller.h @@ -54,13 +54,10 @@ #include #include +#include QT_BEGIN_NAMESPACE -namespace Qt3DCore { -class QTransform; -} - class OrbitTransformController : public QObject { Q_OBJECT -- cgit v1.2.3