1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). 4 ** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies). 5 ** Contact: https://www.qt.io/licensing/ 6 ** 7 ** This file is part of the Qt3D module of the Qt Toolkit. 8 ** 9 ** $QT_BEGIN_LICENSE:LGPL$ 10 ** Commercial License Usage 11 ** Licensees holding valid commercial Qt licenses may use this file in 12 ** accordance with the commercial license agreement provided with the 13 ** Software or, alternatively, in accordance with the terms contained in 14 ** a written agreement between you and The Qt Company. For licensing terms 15 ** and conditions see https://www.qt.io/terms-conditions. For further 16 ** information use the contact form at https://www.qt.io/contact-us. 17 ** 18 ** GNU Lesser General Public License Usage 19 ** Alternatively, this file may be used under the terms of the GNU Lesser 20 ** General Public License version 3 as published by the Free Software 21 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 22 ** packaging of this file. Please review the following information to 23 ** ensure the GNU Lesser General Public License version 3 requirements 24 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 25 ** 26 ** GNU General Public License Usage 27 ** Alternatively, this file may be used under the terms of the GNU 28 ** General Public License version 2.0 or (at your option) the GNU General 29 ** Public license version 3 or any later version approved by the KDE Free 30 ** Qt Foundation. The licenses are as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 32 ** included in the packaging of this file. Please review the following 33 ** information to ensure the GNU General Public License requirements will 34 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 35 ** https://www.gnu.org/licenses/gpl-3.0.html. 36 ** 37 ** $QT_END_LICENSE$ 38 ** 39 ****************************************************************************/ 40 41 #ifndef QT3DRENDER_RENDER_TECHNIQUE_H 42 #define QT3DRENDER_RENDER_TECHNIQUE_H 43 44 // 45 // W A R N I N G 46 // ------------- 47 // 48 // This file is not part of the Qt API. It exists for the convenience 49 // of other Qt classes. This header file may change from version to 50 // version without notice, or even be removed. 51 // 52 // We mean it. 53 // 54 55 #include <Qt3DRender/private/backendnode_p.h> 56 #include <Qt3DRender/private/parameterpack_p.h> 57 #include <Qt3DRender/private/qgraphicsapifilter_p.h> 58 #include <Qt3DRender/qfilterkey.h> 59 #include <QVector> 60 #include <QStringList> 61 62 QT_BEGIN_NAMESPACE 63 64 namespace Qt3DRender { 65 66 class QTechnique; 67 class QParameter; 68 class QGraphicsApiFilter; 69 class QFilterKey; 70 class QRenderPass; 71 72 namespace Render { 73 74 class TechniqueManager; 75 76 class Q_3DRENDERSHARED_PRIVATE_EXPORT Technique : public BackendNode 77 { 78 public: 79 Technique(); 80 ~Technique(); 81 void cleanup(); 82 83 void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; 84 85 QVector<Qt3DCore::QNodeId> parameters() const; 86 87 void appendRenderPass(Qt3DCore::QNodeId renderPassId); 88 void removeRenderPass(Qt3DCore::QNodeId renderPassId); 89 90 void appendFilterKey(Qt3DCore::QNodeId criterionId); 91 void removeFilterKey(Qt3DCore::QNodeId criterionId); 92 93 QVector<Qt3DCore::QNodeId> filterKeys() const; 94 QVector<Qt3DCore::QNodeId> renderPasses() const; 95 const GraphicsApiFilterData *graphicsApiFilter() const; 96 97 bool isCompatibleWithRenderer() const; 98 void setCompatibleWithRenderer(bool compatible); 99 100 bool isCompatibleWithFilters(const Qt3DCore::QNodeIdVector &filterKeyIds); 101 102 void setNodeManager(NodeManagers *nodeManager); 103 NodeManagers *nodeManager() const; 104 105 private: 106 107 GraphicsApiFilterData m_graphicsApiFilterData; 108 ParameterPack m_parameterPack; 109 QVector<Qt3DCore::QNodeId> m_filterKeyList; 110 QVector<Qt3DCore::QNodeId> m_renderPasses; 111 bool m_isCompatibleWithRenderer; 112 NodeManagers *m_nodeManager; 113 }; 114 115 class TechniqueFunctor : public Qt3DCore::QBackendNodeMapper 116 { 117 public: 118 explicit TechniqueFunctor(AbstractRenderer *renderer, NodeManagers *manager); 119 Qt3DCore::QBackendNode *create(const Qt3DCore::QNodeCreatedChangeBasePtr &change) const override; 120 Qt3DCore::QBackendNode *get(Qt3DCore::QNodeId id) const override; 121 void destroy(Qt3DCore::QNodeId id) const override; 122 private: 123 NodeManagers *m_manager; 124 AbstractRenderer *m_renderer; 125 }; 126 127 } // namespace Render 128 } // namespace Qt3DRender 129 130 QT_END_NAMESPACE 131 132 #endif // QT3DRENDER_RENDER_TECHNIQUE_H 133