summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-03-30 09:41:38 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-05-10 10:19:42 +0000
commit092f86e5bad3101b760cda33d499a3aa736fbb2e (patch)
treeb2cc11287de8684bfca4c8def5b18611bb526b1c
parent260ac1d2fd155b6df6fbfdc7019a78882a9c0dce (diff)
QRenderTargetSelector: takes list of active drawBuffers
Change-Id: I63ea3ddcd16034b4fb2d75cb8d5a90e7f557fd5e Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/quick3d/imports/render/qt3dquick3drenderplugin.cpp3
-rw-r--r--src/quick3d/quick3drenderer/items/items.pri6
-rw-r--r--src/quick3d/quick3drenderer/items/quick3drendertargetselector.cpp85
-rw-r--r--src/quick3d/quick3drenderer/items/quick3drendertargetselector.h79
-rw-r--r--src/render/backend/framegraph/rendertargetselectornode.cpp9
-rw-r--r--src/render/backend/framegraph/rendertargetselectornode_p.h2
-rw-r--r--src/render/frontend/framegraph-components/qrendertargetselector.cpp36
-rw-r--r--src/render/frontend/framegraph-components/qrendertargetselector.h6
-rw-r--r--src/render/frontend/framegraph-components/qrendertargetselector_p.h1
-rw-r--r--src/render/frontend/qrenderattachment.h2
10 files changed, 225 insertions, 4 deletions
diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
index 115ca9e6a..a2b2fc705 100644
--- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
+++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
@@ -103,6 +103,7 @@
#include <Qt3DQuickRenderer/quick3dshaderdata.h>
#include <Qt3DQuickRenderer/quick3dshaderdataarray.h>
#include <Qt3DQuickRenderer/quick3dstateset.h>
+#include <Qt3DQuickRenderer/quick3drendertargetselector.h>
static void initResources()
{
@@ -202,7 +203,7 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri)
qmlRegisterExtendedType<Qt3D::QRenderPassFilter, Qt3D::Render::Quick::Quick3DRenderPassFilter>(uri, 2, 0, "RenderPassFilter");
qmlRegisterExtendedType<Qt3D::QTechniqueFilter, Qt3D::Render::Quick::Quick3DTechniqueFilter>(uri, 2, 0, "TechniqueFilter");
qmlRegisterExtendedType<Qt3D::QViewport, Qt3D::Render::Quick::Quick3DViewport>(uri, 2, 0, "Viewport");
- qmlRegisterType<Qt3D::QRenderTargetSelector>(uri, 2, 0, "RenderTargetSelector");
+ qmlRegisterExtendedType<Qt3D::QRenderTargetSelector, Qt3D::Render::Quick::Quick3DRenderTargetSelector>(uri, 2, 0, "RenderTargetSelector");
qmlRegisterType<Qt3D::QClearBuffer>(uri, 2, 0, "ClearBuffer");
qmlRegisterExtendedUncreatableType<Qt3D::QFrameGraphNode, Qt3D::Render::Quick::Quick3DFrameGraphItem>(uri, 2, 0, "FrameGraphNode", QStringLiteral("FrameGraphNode is a base class"));
qmlRegisterExtendedType<Qt3D::QStateSet, Qt3D::Render::Quick::Quick3DStateSet>(uri, 2, 0, "StateSet");
diff --git a/src/quick3d/quick3drenderer/items/items.pri b/src/quick3d/quick3drenderer/items/items.pri
index 6d4c905fd..014ab0b38 100644
--- a/src/quick3d/quick3drenderer/items/items.pri
+++ b/src/quick3d/quick3drenderer/items/items.pri
@@ -16,7 +16,8 @@ HEADERS += \
$$PWD/quick3dparameter.h \
$$PWD/quick3dshaderdata.h \
$$PWD/quick3dshaderdataarray.h \
- $$PWD/quick3dstateset.h
+ $$PWD/quick3dstateset.h \
+ $$PWD/quick3drendertargetselector.h
SOURCES += \
$$PWD/quick3drenderpassfilter.cpp \
@@ -35,6 +36,7 @@ SOURCES += \
$$PWD/quick3dparameter.cpp \
$$PWD/quick3dshaderdata.cpp \
$$PWD/quick3dshaderdataarray.cpp \
- $$PWD/quick3dstateset.cpp
+ $$PWD/quick3dstateset.cpp \
+ $$PWD/quick3drendertargetselector.cpp
INCLUDEPATH += $$PWD
diff --git a/src/quick3d/quick3drenderer/items/quick3drendertargetselector.cpp b/src/quick3d/quick3drenderer/items/quick3drendertargetselector.cpp
new file mode 100644
index 000000000..808d05a46
--- /dev/null
+++ b/src/quick3d/quick3drenderer/items/quick3drendertargetselector.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** 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: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 "quick3drendertargetselector.h"
+
+QT_BEGIN_NAMESPACE
+
+namespace Qt3D {
+
+namespace Render {
+
+namespace Quick {
+
+Quick3DRenderTargetSelector::Quick3DRenderTargetSelector(QObject *parent)
+ : QObject(parent)
+{
+}
+
+Quick3DRenderTargetSelector::~Quick3DRenderTargetSelector()
+{
+}
+
+QVariantList Quick3DRenderTargetSelector::drawBuffers() const
+{
+ // Converts RenderAttachmentType to int
+ QVariantList l;
+ Q_FOREACH (const QRenderAttachment::RenderAttachmentType &b, parentRenderTargetSelector()->drawBuffers())
+ l.append(static_cast<int>(b));
+ return l;
+}
+
+void Quick3DRenderTargetSelector::setDrawBuffers(const QVariantList &buffers)
+{
+ if (buffers != drawBuffers()) {
+
+ // Converts int to RenderAttachmentType
+ QList<QRenderAttachment::RenderAttachmentType> drawBuffersList;
+ Q_FOREACH (const QVariant &buf, buffers)
+ drawBuffersList.append(static_cast<QRenderAttachment::RenderAttachmentType>(buf.toInt()));
+
+ parentRenderTargetSelector()->setDrawBuffers(drawBuffersList);
+ emit drawBuffersChanged();
+ }
+}
+
+} // Quick
+
+} // Render
+
+} // Qt3D
+
+QT_END_NAMESPACE
diff --git a/src/quick3d/quick3drenderer/items/quick3drendertargetselector.h b/src/quick3d/quick3drenderer/items/quick3drendertargetselector.h
new file mode 100644
index 000000000..e801dd811
--- /dev/null
+++ b/src/quick3d/quick3drenderer/items/quick3drendertargetselector.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: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 QT3D_RENDER_QUICK_QUICK3DRENDERTARGETSELECTOR_H
+#define QT3D_RENDER_QUICK_QUICK3DRENDERTARGETSELECTOR_H
+
+#include <Qt3DQuickRenderer/qt3dquickrenderer_global.h>
+#include <Qt3DRenderer/qrenderattachment.h>
+#include <Qt3DRenderer/qrendertargetselector.h>
+#include <QQmlListProperty>
+#include <QVariantList>
+
+QT_BEGIN_NAMESPACE
+
+namespace Qt3D {
+
+namespace Render {
+
+namespace Quick {
+
+class QT3DQUICKRENDERERSHARED_EXPORT Quick3DRenderTargetSelector : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QVariantList drawBuffers READ drawBuffers WRITE setDrawBuffers NOTIFY drawBuffersChanged)
+public:
+ explicit Quick3DRenderTargetSelector(QObject *parent = 0);
+ ~Quick3DRenderTargetSelector();
+
+ inline QRenderTargetSelector *parentRenderTargetSelector() const { return qobject_cast<QRenderTargetSelector *>(parent()); }
+
+ QVariantList drawBuffers() const;
+ void setDrawBuffers(const QVariantList &drawBuffers);
+
+Q_SIGNALS:
+ void drawBuffersChanged();
+};
+
+} // Quick
+
+} // Render
+
+} // Qt3D
+
+QT_END_NAMESPACE
+
+#endif // QUICK3DRENDERTARGETSELECTOR_H
diff --git a/src/render/backend/framegraph/rendertargetselectornode.cpp b/src/render/backend/framegraph/rendertargetselectornode.cpp
index 59dd1c5a4..d8f696913 100644
--- a/src/render/backend/framegraph/rendertargetselectornode.cpp
+++ b/src/render/backend/framegraph/rendertargetselectornode.cpp
@@ -42,6 +42,7 @@
#include <Qt3DRenderer/qrendertarget.h>
#include <Qt3DCore/qscenepropertychange.h>
#include <Qt3DRenderer/private/renderlogging_p.h>
+#include <Qt3DRenderer/qrenderattachment.h>
QT_BEGIN_NAMESPACE
@@ -60,6 +61,7 @@ void RenderTargetSelector::updateFromPeer(QNode *peer)
if (selector->target() != Q_NULLPTR)
m_renderTargetUuid = selector->target()->id();
setEnabled(selector->isEnabled());
+ m_drawBuffers = selector->drawBuffers();
}
void RenderTargetSelector::sceneChangeEvent(const QSceneChangePtr &e)
@@ -71,6 +73,8 @@ void RenderTargetSelector::sceneChangeEvent(const QSceneChangePtr &e)
m_renderTargetUuid = propertyChange->value().value<QNodeId>();
else if (propertyChange->propertyName() == QByteArrayLiteral("enabled"))
setEnabled(propertyChange->value().toBool());
+ else if (propertyChange->propertyName() == QByteArrayLiteral("drawBuffers"))
+ m_drawBuffers = propertyChange->value().value<QList<Qt3D::QRenderAttachment::RenderAttachmentType> >();
}
}
@@ -79,6 +83,11 @@ QNodeId RenderTargetSelector::renderTargetUuid() const
return m_renderTargetUuid;
}
+QList<QRenderAttachment::RenderAttachmentType> RenderTargetSelector::drawBuffers() const
+{
+ return m_drawBuffers;
+}
+
} // Render
} // Qt3D
diff --git a/src/render/backend/framegraph/rendertargetselectornode_p.h b/src/render/backend/framegraph/rendertargetselectornode_p.h
index 0b6089ae0..adbd8b041 100644
--- a/src/render/backend/framegraph/rendertargetselectornode_p.h
+++ b/src/render/backend/framegraph/rendertargetselectornode_p.h
@@ -55,9 +55,11 @@ public:
void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE;
void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE;
QNodeId renderTargetUuid() const;
+ QList<QRenderAttachment::RenderAttachmentType> drawBuffers() const;
private:
QNodeId m_renderTargetUuid;
+ QList<QRenderAttachment::RenderAttachmentType> m_drawBuffers;
};
} // Render
diff --git a/src/render/frontend/framegraph-components/qrendertargetselector.cpp b/src/render/frontend/framegraph-components/qrendertargetselector.cpp
index 644dd4137..b357f713b 100644
--- a/src/render/frontend/framegraph-components/qrendertargetselector.cpp
+++ b/src/render/frontend/framegraph-components/qrendertargetselector.cpp
@@ -88,7 +88,41 @@ QRenderTarget *QRenderTargetSelector::target() const
return d->m_target;
}
-/*! \internal */
+/*!
+ * \internal
+ * Sets the draw buffers \a buffers to be used. The draw buffers should be
+ * matching the Qt3D::QRenderAttachment::RenderAttachmentType
+ * defined in the attachments of the Qt3D::QRenderTarget associated to the
+ * Qt3D::QRenderTargetSelector instance.
+ *
+ * \note At render time, if no draw buffer has been specified, the renderer will
+ * default to using all the attachments' draw buffers.
+ *
+ */
+void QRenderTargetSelector::setDrawBuffers(const QList<QRenderAttachment::RenderAttachmentType> &buffers)
+{
+ Q_D(QRenderTargetSelector);
+ if (buffers != d->m_drawBuffers) {
+ d->m_drawBuffers = buffers;
+
+ if (d->m_changeArbiter) {
+ QScenePropertyChangePtr change(new QScenePropertyChange(NodeUpdated, QSceneChange::Node, id()));
+ change->setPropertyName("drawBuffers");
+ change->setValue(QVariant::fromValue(d->m_drawBuffers));
+ d->notifyObservers(change);
+ }
+ }
+}
+
+/*!
+ * Returns the list of draw buffers for the current Qt3D::QRenderTargetSelector instance.
+ */
+QList<QRenderAttachment::RenderAttachmentType> QRenderTargetSelector::drawBuffers() const
+{
+ Q_D(const QRenderTargetSelector);
+ return d->m_drawBuffers;
+}
+
QRenderTargetSelector::QRenderTargetSelector(QRenderTargetSelectorPrivate &dd, QNode *parent)
: QFrameGraphNode(dd, parent)
{
diff --git a/src/render/frontend/framegraph-components/qrendertargetselector.h b/src/render/frontend/framegraph-components/qrendertargetselector.h
index b467673bc..f98f05f8f 100644
--- a/src/render/frontend/framegraph-components/qrendertargetselector.h
+++ b/src/render/frontend/framegraph-components/qrendertargetselector.h
@@ -40,6 +40,7 @@
#include <Qt3DRenderer/qt3drenderer_global.h>
#include <Qt3DCore/qnode.h>
#include <Qt3DRenderer/qframegraphnode.h>
+#include <Qt3DRenderer/qrenderattachment.h>
QT_BEGIN_NAMESPACE
@@ -58,6 +59,9 @@ public:
void setTarget(QRenderTarget *target);
QRenderTarget *target() const;
+ void setDrawBuffers(const QList<QRenderAttachment::RenderAttachmentType> &buffers);
+ QList<QRenderAttachment::RenderAttachmentType> drawBuffers() const;
+
Q_SIGNALS:
void targetChanged();
@@ -74,4 +78,6 @@ private:
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QList<Qt3D::QRenderAttachment::RenderAttachmentType>)
+
#endif // QT3D_QRENDERTARGETSELECTOR_H
diff --git a/src/render/frontend/framegraph-components/qrendertargetselector_p.h b/src/render/frontend/framegraph-components/qrendertargetselector_p.h
index 195dc6938..8c41de798 100644
--- a/src/render/frontend/framegraph-components/qrendertargetselector_p.h
+++ b/src/render/frontend/framegraph-components/qrendertargetselector_p.h
@@ -53,6 +53,7 @@ public:
Q_DECLARE_PUBLIC(QRenderTargetSelector)
QRenderTarget *m_target;
+ QList<QRenderAttachment::RenderAttachmentType> m_drawBuffers;
};
} // Qt3D
diff --git a/src/render/frontend/qrenderattachment.h b/src/render/frontend/qrenderattachment.h
index e27813795..e0ba0ebcc 100644
--- a/src/render/frontend/qrenderattachment.h
+++ b/src/render/frontend/qrenderattachment.h
@@ -132,4 +132,6 @@ private:
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(Qt3D::QRenderAttachment::RenderAttachmentType)
+
#endif // QT3D_QRENDERATTACHMENT_H