1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB). 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt3D module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QT3DRENDER_SCENE3DRENDERER_P_H 41 #define QT3DRENDER_SCENE3DRENDERER_P_H 42 43 // 44 // W A R N I N G 45 // ------------- 46 // 47 // This file is not part of the Qt API. It exists purely as an 48 // implementation detail. This header file may change from version to 49 // version without notice, or even be removed. 50 // 51 // We mean it. 52 // 53 54 #include <QtCore/QObject> 55 #include <QtCore/qsize.h> 56 #include <QtCore/QMutex> 57 #include <QtCore/QSemaphore> 58 #include <scene3ditem_p.h> 59 60 QT_BEGIN_NAMESPACE 61 62 class QQuickWindow; 63 class QSGTexture; 64 class QOpenGLFramebufferObject; 65 66 namespace Qt3DCore { 67 class QAspectEngine; 68 } 69 70 namespace Qt3DRender { 71 72 class QRenderAspect; 73 class Scene3DCleaner; 74 class Scene3DSGNode; 75 class Scene3DViews; 76 77 class Scene3DRenderer : public QObject 78 { 79 Q_OBJECT 80 public: 81 Scene3DRenderer(); 82 ~Scene3DRenderer(); 83 84 void setSGNode(Scene3DSGNode *node); 85 void setCleanerHelper(Scene3DCleaner *cleaner); 86 void allowRender(); 87 void setCompositingMode(Scene3DItem::CompositingMode mode); 88 void setSkipFrame(bool skip); 89 void setMultisample(bool multisample); 90 void setBoundingSize(const QSize &size); 91 92 void setScene3DViews(const QVector<Scene3DView *> views); 93 void init(Qt3DCore::QAspectEngine *aspectEngine, QRenderAspect *renderAspect); 94 95 void beforeSynchronize(); 96 void setWindow(QQuickWindow *window); 97 hasShutdown()98 bool hasShutdown() const { return !m_needsShutdown; } 99 renderAspect()100 QRenderAspect *renderAspect() const { return m_renderAspect; } 101 public Q_SLOTS: 102 void render(); 103 void shutdown(); 104 105 private: 106 QOpenGLFramebufferObject *createMultisampledFramebufferObject(const QSize &size); 107 QOpenGLFramebufferObject *createFramebufferObject(const QSize &size); 108 109 Qt3DCore::QAspectEngine *m_aspectEngine; // Will be released by the Scene3DItem 110 QRenderAspect *m_renderAspect; // Will be released by the aspectEngine 111 QScopedPointer<QOpenGLFramebufferObject> m_multisampledFBO; 112 QScopedPointer<QOpenGLFramebufferObject> m_finalFBO; 113 QScopedPointer<QSGTexture> m_texture; 114 Scene3DSGNode *m_node; // Will be released by the QtQuick SceneGraph 115 QQuickWindow *m_window; 116 QMutex m_windowMutex; 117 QSize m_lastSize; 118 QSize m_boundingRectSize; 119 bool m_multisample; 120 bool m_lastMultisample; 121 bool m_needsShutdown; 122 bool m_forceRecreate; 123 bool m_shouldRender; 124 bool m_dirtyViews; 125 bool m_skipFrame; 126 QSemaphore m_allowRendering; 127 Scene3DItem::CompositingMode m_compositingMode; 128 QVector<Scene3DView *> m_views; 129 bool m_resetRequested = false; 130 131 friend class Scene3DItem; 132 }; 133 134 } // namespace Qt3DRender 135 136 QT_END_NAMESPACE 137 138 #endif // QT3DRENDER_SCENE3DRENDERER_P_H 139