From 451fb9873a37e15d43e34cc714ddfc5bb917ea2e Mon Sep 17 00:00:00 2001 From: Sean Harmer Date: Fri, 15 Jan 2016 10:40:25 +0000 Subject: Add QRendererSettings frontend class Now sure if we should fold QFrameGraph into this too so as to have one place to configure the renderer. Of course we can easily aggregate both a QRendererSettings and FrameGraph components into an entity. Change-Id: Id17c185de908eedbcc53afe726a14f0c6f91ffca Reviewed-by: Paul Lemire --- src/render/frontend/qrenderersettings.cpp | 108 ++++++++++++++++++++++++++++++ src/render/frontend/qrenderersettings.h | 95 ++++++++++++++++++++++++++ src/render/frontend/qrenderersettings_p.h | 71 ++++++++++++++++++++ src/render/frontend/render-frontend.pri | 7 +- 4 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 src/render/frontend/qrenderersettings.cpp create mode 100644 src/render/frontend/qrenderersettings.h create mode 100644 src/render/frontend/qrenderersettings_p.h (limited to 'src') diff --git a/src/render/frontend/qrenderersettings.cpp b/src/render/frontend/qrenderersettings.cpp new file mode 100644 index 000000000..63cccc582 --- /dev/null +++ b/src/render/frontend/qrenderersettings.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later 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 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qrenderersettings.h" +#include "qrenderersettings_p.h" + +QT_BEGIN_NAMESPACE + +namespace Qt3DRender { + +QRendererSettingsPrivate::QRendererSettingsPrivate() + : Qt3DCore::QComponentPrivate() + , m_pickMethod(QRendererSettings::BoundingVolumePicking) + , m_pickResultMode(QRendererSettings::NearestPick) +{ +} + +QRendererSettings::QRendererSettings(Qt3DCore::QNode *parent) + : Qt3DCore::QComponent(*new QRendererSettingsPrivate, parent) +{ +} + +QRendererSettings::QRendererSettings(QRendererSettingsPrivate &dd, Qt3DCore::QNode *parent) + : Qt3DCore::QComponent(dd, parent) +{ +} + +QRendererSettings::~QRendererSettings() +{ + QNode::cleanup(); +} + +QRendererSettings::PickMethod QRendererSettings::pickMethod() const +{ + Q_D(const QRendererSettings); + return d->m_pickMethod; +} + +QRendererSettings::PickResultMode QRendererSettings::pickResultMode() const +{ + Q_D(const QRendererSettings); + return d->m_pickResultMode; +} + +void QRendererSettings::setPickMethod(QRendererSettings::PickMethod pickMethod) +{ + Q_D(QRendererSettings); + if (d->m_pickMethod == pickMethod) + return; + + d->m_pickMethod = pickMethod; + emit pickMethodChanged(pickMethod); +} + +void QRendererSettings::setPickResultMode(QRendererSettings::PickResultMode pickResultMode) +{ + Q_D(QRendererSettings); + if (d->m_pickResultMode == pickResultMode) + return; + + d->m_pickResultMode = pickResultMode; + emit pickResultModeChanged(pickResultMode); +} + +void QRendererSettings::copy(const QNode *ref) +{ + QComponent::copy(ref); + const QRendererSettings *object = static_cast(ref); + d_func()->m_pickMethod = object->d_func()->m_pickMethod; + d_func()->m_pickResultMode = object->d_func()->m_pickResultMode; +} + +} // namespace Qt3Drender + +QT_END_NAMESPACE diff --git a/src/render/frontend/qrenderersettings.h b/src/render/frontend/qrenderersettings.h new file mode 100644 index 000000000..b3355f1f1 --- /dev/null +++ b/src/render/frontend/qrenderersettings.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later 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 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DRENDER_QRENDERERSETTINGS_H +#define QT3DRENDER_QRENDERERSETTINGS_H + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace Qt3DRender { + +class QRendererSettingsPrivate; + +class QT3DRENDERSHARED_EXPORT QRendererSettings : public Qt3DCore::QComponent +{ + Q_OBJECT + Q_PROPERTY(PickMethod pickMethod READ pickMethod WRITE setPickMethod NOTIFY pickMethodChanged) + Q_PROPERTY(PickResultMode pickResultMode READ pickResultMode WRITE setPickResultMode NOTIFY pickResultModeChanged) + +public: + explicit QRendererSettings(Qt3DCore::QNode *parent = 0); + ~QRendererSettings(); + + enum PickMethod { + BoundingVolumePicking, + TrianglePicking + }; + Q_ENUM(PickMethod) + + enum PickResultMode { + NearestPick, + AllPicks + }; + Q_ENUM(PickResultMode) + + PickMethod pickMethod() const; + PickResultMode pickResultMode() const; + +public Q_SLOTS: + void setPickMethod(PickMethod pickMethod); + void setPickResultMode(PickResultMode pickResultMode); + +Q_SIGNALS: + void pickMethodChanged(PickMethod pickMethod); + void pickResultModeChanged(PickResultMode pickResult); + +protected: + Q_DECLARE_PRIVATE(QRendererSettings) + QRendererSettings(QRendererSettingsPrivate &dd, Qt3DCore::QNode *parent = 0); + void copy(const Qt3DCore::QNode *ref) Q_DECL_OVERRIDE; + +private: + QT3D_CLONEABLE(QRendererSettings) +}; + +} // namespace Qt3Drender + +QT_END_NAMESPACE + +#endif // QT3DRENDER_QRENDERERSETTINGS_H diff --git a/src/render/frontend/qrenderersettings_p.h b/src/render/frontend/qrenderersettings_p.h new file mode 100644 index 000000000..fbf6d3e5f --- /dev/null +++ b/src/render/frontend/qrenderersettings_p.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later 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 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DRENDER_QRENDERERSETTINGS_P_H +#define QT3DRENDER_QRENDERERSETTINGS_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 +#include + +QT_BEGIN_NAMESPACE + +namespace Qt3DRender { + +class QRendererSettingsPrivate : public Qt3DCore::QComponentPrivate +{ +public: + QRendererSettingsPrivate(); + + QRendererSettings::PickMethod m_pickMethod; + QRendererSettings::PickResultMode m_pickResultMode; +}; + +} // namespace Qt3Drender + +QT_END_NAMESPACE + +#endif // QT3DRENDER_QRENDERERSETTINGS_P_H diff --git a/src/render/frontend/render-frontend.pri b/src/render/frontend/render-frontend.pri index 01bf3e3f2..e4894a883 100644 --- a/src/render/frontend/render-frontend.pri +++ b/src/render/frontend/render-frontend.pri @@ -18,7 +18,9 @@ HEADERS += \ $$PWD/qcamera_p.h \ $$PWD/qcamera.h \ $$PWD/qcameralens.h \ - $$PWD/qcameralens_p.h + $$PWD/qcameralens_p.h \ + $$PWD/qrenderersettings.h \ + $$PWD/qrenderersettings_p.h SOURCES += \ $$PWD/qabstractfunctor.cpp \ @@ -31,4 +33,5 @@ SOURCES += \ $$PWD/qboundingvolumedebug.cpp \ $$PWD/qcomputejob.cpp \ $$PWD/qcamera.cpp \ - $$PWD/qcameralens.cpp + $$PWD/qcameralens.cpp \ + $$PWD/qrenderersettings.cpp -- cgit v1.2.3