diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2015-01-18 12:07:58 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-01-18 12:58:23 +0100 |
commit | 67ffbd60ed6f383f3629a1848587da049c3ff3c9 (patch) | |
tree | f2a1264487307930d3ded374269ae39235673d29 | |
parent | 971063f7ad873607f2509737a3b302a4970cf716 (diff) |
Add a Scene3D item to wrap Qt3D scenes in QQ2
Comes with an example to try the embedding and check that
transformations work on the Scene3D element.
Change-Id: I93b4690b7fac0c9c90f8a89c53ad6b83aa2c89a6
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | examples/examples.pro | 3 | ||||
-rw-r--r-- | examples/scene3d/AnimatedEntity.qml | 139 | ||||
-rw-r--r-- | examples/scene3d/main.cpp | 61 | ||||
-rw-r--r-- | examples/scene3d/main.qml | 117 | ||||
-rw-r--r-- | examples/scene3d/scene3d.pro | 12 | ||||
-rw-r--r-- | examples/scene3d/scene3d.qrc | 6 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/importsscene3d.pro | 17 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/qmldir | 3 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/qtquickscene3dplugin.cpp | 53 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/qtquickscene3dplugin.h | 59 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem.cpp | 164 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem.h | 79 | ||||
-rw-r--r-- | src/src.pro | 5 |
13 files changed, 717 insertions, 1 deletions
diff --git a/examples/examples.pro b/examples/examples.pro index cbd023e0a..22ecfcbad 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -25,7 +25,8 @@ SUBDIRS += \ loader-qml \ wave \ materials-cpp \ - dynamicscene-cpp + dynamicscene-cpp \ + scene3d # TODO Port the old examples to new APIs #SUBDIRS += qt3d diff --git a/examples/scene3d/AnimatedEntity.qml b/examples/scene3d/AnimatedEntity.qml new file mode 100644 index 000000000..60a6d5251 --- /dev/null +++ b/examples/scene3d/AnimatedEntity.qml @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt3D 2.0 +import Qt3D.Render 2.0 + +import QtQuick 2.0 as QQ2 + + +Entity { + id: sceneRoot + + Camera { + id: camera + projectionType: CameraLens.PerspectiveProjection + fieldOfView: 45 + aspectRatio: 16/9 + nearPlane : 0.1 + farPlane : 1000.0 + position: Qt.vector3d( 0.0, 0.0, -40.0 ) + upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) + viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) + } + + components: [ + FrameGraph { + activeFrameGraph: Viewport { + id: viewport + rect: Qt.rect(0.0, 0.0, 1.0, 1.0) // From Top Left + clearColor: Qt.rgba(0, 0.5, 1, 1) + + CameraSelector { + id : cameraSelector + camera: camera + + ClearBuffer { + buffers : ClearBuffer.ColorDepthBuffer + } + } + } + } + ] + + PhongMaterial { + id: material + } + + TorusMesh { + id: torusMesh + radius: 5 + minorRadius: 1 + rings: 100 + slices: 20 + } + + Transform { + id: torusTransform + Scale { scale3D: Qt.vector3d(1.5, 1, 0.5) } + Rotate { + angle: 45 + axis: Qt.vector3d(1, 0, 0) + } + } + + Entity { + id: torusEntity + components: [ torusMesh, material, torusTransform ] + } + + SphereMesh { + id: sphereMesh + radius: 3 + } + + Transform { + id: sphereTransform + Translate { + translation: Qt.vector3d(20, 0, 0) + } + + Rotate { + id: sphereRotation + axis: Qt.vector3d(0, 1, 0) + QQ2.NumberAnimation { + target: sphereRotation + property: "angle" + duration: 10000 + from: 0 + to: 360 + + loops: QQ2.Animation.Infinite + running: true + } + } + } + + Entity { + id: sphereEntity + components: [ sphereMesh, material, sphereTransform ] + } +} diff --git a/examples/scene3d/main.cpp b/examples/scene3d/main.cpp new file mode 100644 index 000000000..fa1b43f0d --- /dev/null +++ b/examples/scene3d/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QGuiApplication> +#include <QQuickView> + +int main(int argc, char **argv) +{ + QGuiApplication app(argc, argv); + + QQuickView view; + QSurfaceFormat f = view.format(); + f.setVersion(4, 5); + f.setProfile(QSurfaceFormat::CoreProfile); + view.setFormat(f); + + view.resize(500, 500); + view.setResizeMode(QQuickView::SizeRootObjectToView); + view.setSource(QUrl("qrc:/main.qml")); + view.show(); + + return app.exec(); +} diff --git a/examples/scene3d/main.qml b/examples/scene3d/main.qml new file mode 100644 index 000000000..ebf885e3b --- /dev/null +++ b/examples/scene3d/main.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Scene3D 2.0 + +Item { + Text { + text: "Click me!" + anchors.top: parent.top + anchors.topMargin: 10 + anchors.horizontalCenter: parent.horizontalCenter + + MouseArea { + anchors.fill: parent + onClicked: animation.start() + } + } + + Rectangle { + id: scene + width: Math.min(parent.width, parent.height) - 100 + height: width + anchors.centerIn: parent + color: "darkRed" + + transform: Rotation { + id: sceneRotation + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: scene.width / 2 + origin.y: scene.height / 2 + } + + Scene3D { + anchors.fill: parent + anchors.margins: 10 + + AnimatedEntity {} + } + } + + SequentialAnimation { + id: animation + + RotationAnimation { + to: 45 + duration: 1000 + target: sceneRotation + property: "angle" + easing.type: Easing.InOutQuad + } + PauseAnimation { duration: 500 } + NumberAnimation { + to: 0.5 + duration: 1000 + target: scene + property: "scale" + easing.type: Easing.OutElastic + } + PauseAnimation { duration: 500 } + NumberAnimation { + to: 1.0 + duration: 1000 + target: scene + property: "scale" + easing.type: Easing.OutElastic + } + PauseAnimation { duration: 500 } + RotationAnimation { + to: 0 + duration: 1000 + target: sceneRotation + property: "angle" + easing.type: Easing.InOutQuad + } + } +} diff --git a/examples/scene3d/scene3d.pro b/examples/scene3d/scene3d.pro new file mode 100644 index 000000000..abae485eb --- /dev/null +++ b/examples/scene3d/scene3d.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +QT += qml quick + +SOURCES += \ + main.cpp + +OTHER_FILES += \ + AnimatedEntity.qml \ + main.qml + +RESOURCES += \ + scene3d.qrc diff --git a/examples/scene3d/scene3d.qrc b/examples/scene3d/scene3d.qrc new file mode 100644 index 000000000..dff72ed5a --- /dev/null +++ b/examples/scene3d/scene3d.qrc @@ -0,0 +1,6 @@ +<RCC> + <qresource prefix="/"> + <file>AnimatedEntity.qml</file> + <file>main.qml</file> + </qresource> +</RCC> diff --git a/src/quick3d/imports/scene3d/importsscene3d.pro b/src/quick3d/imports/scene3d/importsscene3d.pro new file mode 100644 index 000000000..cd8402320 --- /dev/null +++ b/src/quick3d/imports/scene3d/importsscene3d.pro @@ -0,0 +1,17 @@ +CXX_MODULE = qml +TARGET = qtquickscene3dplugin +TARGETPATH = QtQuick/Scene3D + +QT += qml quick 3dcore 3drenderer + +HEADERS += \ + qtquickscene3dplugin.h \ + scene3ditem.h + +SOURCES += \ + qtquickscene3dplugin.cpp \ + scene3ditem.cpp + +OTHER_FILES += qmldir + +load(qml_plugin) diff --git a/src/quick3d/imports/scene3d/qmldir b/src/quick3d/imports/scene3d/qmldir new file mode 100644 index 000000000..0f551d249 --- /dev/null +++ b/src/quick3d/imports/scene3d/qmldir @@ -0,0 +1,3 @@ +module QtQuick.Scene3D +plugin qtquickscene3dplugin +classname QtQuickScene3DPlugin diff --git a/src/quick3d/imports/scene3d/qtquickscene3dplugin.cpp b/src/quick3d/imports/scene3d/qtquickscene3dplugin.cpp new file mode 100644 index 000000000..edac44fc9 --- /dev/null +++ b/src/quick3d/imports/scene3d/qtquickscene3dplugin.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtQml> +#include "qtquickscene3dplugin.h" +#include "scene3ditem.h" + +QT_BEGIN_NAMESPACE + +void QtQuickScene3DPlugin::registerTypes(const char *uri) +{ + qmlRegisterType<Scene3DItem>(uri, 2, 0, "Scene3D"); +} + +QT_END_NAMESPACE diff --git a/src/quick3d/imports/scene3d/qtquickscene3dplugin.h b/src/quick3d/imports/scene3d/qtquickscene3dplugin.h new file mode 100644 index 000000000..5ae1660ed --- /dev/null +++ b/src/quick3d/imports/scene3d/qtquickscene3dplugin.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTQUICKSCENE3DPLUGIN_H +#define QTQUICKSCENE3DPLUGIN_H + +#include <QtQml/QQmlExtensionPlugin> + +QT_BEGIN_NAMESPACE + +class QtQuickScene3DPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0") +public: + void registerTypes(const char *uri) Q_DECL_OVERRIDE; +}; + +QT_END_NAMESPACE + +#endif // QTQUICKSCENE3DPLUGIN_H diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp new file mode 100644 index 000000000..f2cd5f7c5 --- /dev/null +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "scene3ditem.h" + +#include <Qt3DCore/QAspectEngine> +#include <Qt3DRenderer/QRenderAspect> + +#include <QOpenGLContext> +#include <QOpenGLFramebufferObject> +#include <QOpenGLFramebufferObjectFormat> + +#include <QScopedPointer> +#include <QSurface> + +#include <QSGSimpleTextureNode> + +QT_BEGIN_NAMESPACE + +class ContextSaver +{ +public: + explicit ContextSaver(QOpenGLContext *context = QOpenGLContext::currentContext()) + : m_context(context), + m_surface(context ? context->surface() : Q_NULLPTR) + { + } + + ~ContextSaver() + { + if (m_context) + m_context->makeCurrent(m_surface); + } + + QOpenGLContext *context() const { return m_context; } + QSurface *surface() const { return m_surface; } + +private: + QOpenGLContext * const m_context; + QSurface * const m_surface; +}; + +class FrameBufferObjectRenderer : public QQuickFramebufferObject::Renderer +{ +public: + FrameBufferObjectRenderer(const Scene3DItem *item) + : m_item(item), + m_aspectEngine(new Qt3D::QAspectEngine), + m_renderAspect(new Qt3D::QRenderAspect(Qt3D::QRenderAspect::Synchronous)) + { + ContextSaver saver; + + m_aspectEngine->registerAspect(m_renderAspect); + m_aspectEngine->initialize(); + + QVariantMap data; + data.insert(QStringLiteral("surface"), QVariant::fromValue(saver.surface())); + m_aspectEngine->setData(data); + + m_renderAspect->renderInitialize(saver.context()); + } + + void render() Q_DECL_OVERRIDE + { + if (m_aspectEngine->rootEntity() != m_item->entity()) + m_aspectEngine->setRootEntity(m_item->entity()); + + ContextSaver saver; + Q_UNUSED(saver) + + m_renderAspect->renderSynchronous(); + update(); + } + + QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) Q_DECL_OVERRIDE + { + QOpenGLFramebufferObjectFormat format; + format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); + format.setSamples(4); + return new QOpenGLFramebufferObject(size, format); + } + + const Scene3DItem *m_item; + QScopedPointer<Qt3D::QAspectEngine> m_aspectEngine; + Qt3D::QRenderAspect *m_renderAspect; +}; + +Scene3DItem::Scene3DItem(QQuickItem *parent) + : QQuickFramebufferObject(parent), + m_entity(Q_NULLPTR) +{ + setFlag(QQuickItem::ItemHasContents, true); +} + +Qt3D::QEntity *Scene3DItem::entity() const +{ + return m_entity; +} + +void Scene3DItem::setEntity(Qt3D::QEntity *entity) +{ + if (entity == m_entity) + return; + + m_entity = entity; + emit entityChanged(); +} + +QQuickFramebufferObject::Renderer *Scene3DItem::createRenderer() const +{ + return new FrameBufferObjectRenderer(this); +} + +QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *nodeData) +{ + if (!node) { + node = QQuickFramebufferObject::updatePaintNode(node, nodeData); + QSGSimpleTextureNode *textureNode = static_cast<QSGSimpleTextureNode *>(node); + if (textureNode) + textureNode->setTextureCoordinatesTransform(QSGSimpleTextureNode::MirrorVertically); + return node; + } + return QQuickFramebufferObject::updatePaintNode(node, nodeData); +} + +QT_END_NAMESPACE diff --git a/src/quick3d/imports/scene3d/scene3ditem.h b/src/quick3d/imports/scene3d/scene3ditem.h new file mode 100644 index 000000000..f74fec765 --- /dev/null +++ b/src/quick3d/imports/scene3d/scene3ditem.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SCENE3DITEM_H +#define SCENE3DITEM_H + +#include <QQuickFramebufferObject> + +QT_BEGIN_NAMESPACE + +namespace Qt3D +{ + class QEntity; +} + +class Scene3DItem : public QQuickFramebufferObject +{ + Q_OBJECT + Q_PROPERTY(Qt3D::QEntity* entity READ entity WRITE setEntity NOTIFY entityChanged) + Q_CLASSINFO("DefaultProperty", "entity") +public: + explicit Scene3DItem(QQuickItem *parent = 0); + + Qt3D::QEntity *entity() const; + +public Q_SLOTS: + void setEntity(Qt3D::QEntity *entity); + +Q_SIGNALS: + void entityChanged(); + +private: + Renderer *createRenderer() const Q_DECL_OVERRIDE; + QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *nodeData) Q_DECL_OVERRIDE; + + Qt3D::QEntity *m_entity; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/src.pro b/src/src.pro index 0f62e2141..5e83acb77 100644 --- a/src/src.pro +++ b/src/src.pro @@ -38,6 +38,10 @@ src_quick3d_imports_render.file = $$PWD/quick3d/imports/render/importsrender.pro src_quick3d_imports_render.target = sub-quick3d-imports-render src_quick3d_imports_render.depends = src_quick3d_render +src_quick3d_imports_scene3d.file = $$PWD/quick3d/imports/scene3d/importsscene3d.pro +src_quick3d_imports_scene3d.target = sub-quick3d-imports-scene3d +src_quick3d_imports_scene3d.depends = src_quick3d_render + src_quick3d_imports_bulletphysics.file = $$PWD/quick3d/imports/bulletphysics/importsbulletphysics.pro src_quick3d_imports_bulletphysics.target = sub-quick3d-imports-bulletphysics src_quick3d_imports_bulletphysics.depends = src_bulletphysics @@ -60,6 +64,7 @@ SUBDIRS += \ src_quick3d_core_imports \ src_quick3d_render \ src_quick3d_imports_render \ + src_quick3d_imports_scene3d \ src_quick3d_imports_input \ src_plugins_sceneparsers |