/**************************************************************************** ** ** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of Qt 3D Studio. ** ** $QT_BEGIN_LICENSE:GPL$ ** 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 https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 or (at your option) any later version ** approved by the KDE Free Qt Foundation. The licenses are as published by ** the Free Software Foundation and appearing in the file LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QT3DRENDER_DRAGON_RENDERVIEWJOBS_H #define QT3DRENDER_DRAGON_RENDERVIEWJOBS_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 #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Qt3DRender { namespace Dragon { class RenderTarget; class RenderTargetOutput; class RenderPass; class Parameter; class ShaderData; class Texture; class RenderStateNode; struct BoundingVolume; struct LocalBoundingVolumeResult; // Key is the id of the leaf node of the render view // The same key is used by the render commands and parameter gatherer using RenderViews = ValueContainer; struct RenderPassParameterIds { Immutable renderPass; ParameterNameToIdMap parameterIds; ParameterNameToParameterMap parameters; }; struct MaterialParameterIds { QHash renderPassParameterIds; }; struct ParameterTarget { Qt3DCore::QNodeId renderViewId; Qt3DCore::QNodeId materialId; Qt3DCore::QNodeId renderPassId; }; struct RenderViewParameterIds { QHash materialParameterIds; QHash> parameterToRenderPass; }; using GatheredParameters = ValueContainer; struct RenderViewCommands { Immutable renderView; QVector> commands; }; using RenderCommands = ValueContainer; // TODO this is getting ugly, consider storing RenderCommand and AppliedRenderCommand in a ValueContainer // each, with some kind of ID we can track, and have them point to their respective views struct AppliedRenderCommand { Immutable renderCommand; ParameterNameToParameterMap m_parameterMap; Immutable m_worldTransform; }; struct AppliedRenderCommands { QVector> commands; }; using AppliedRenderCommandss = ValueContainer; using WorldBoundingVolumes = ValueContainer; RenderViews buildRenderViews(RenderViews renderViews, const TreeInfo &frameGraph, const ValueContainer &frameGraphNodes, const ValueContainer &entities, const ValueContainer &cameraLenses, const ValueContainer &renderTargets, const ValueContainer &renderTargetOutputs, const ValueContainer &renderStates); // TODO add a struct that combines these to reduce the number of arguments RenderCommands buildDrawRenderCommands(RenderCommands renderCommands, const ValueContainer &renderViews, const ValueContainer &entities, const ValueContainer &materials, const ValueContainer &geometries, const ValueContainer &geometryRenderers, const ValueContainer &shaders, const ValueContainer &renderStates, const GatheredParameters &gatheredParameters); GatheredParameters gatherMaterialParameters(GatheredParameters gatherResult, const RenderViews &renderViews, const GraphicsApiFilterData &contextInfo, const ValueContainer ¶meters, const ValueContainer &materials, const ValueContainer &effects, const ValueContainer &techniques, const ValueContainer &renderPasses, const ValueContainer &filterKeys); RenderCommands sortRenderCommands(RenderCommands renderCommands, RenderCommands renderCommandsIn, const WorldBoundingVolumes &worldBoundingVolumes, const ValueContainer &renderViewCameraMatrices); } // namespace Dragon } // namespace Qt3DRender QT_END_NAMESPACE #endif // QT3DRENDER_DRAGON_RENDERVIEWJOBS_H