/**************************************************************************** ** ** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). ** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt3D module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** 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 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.LGPL3 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-3.0.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 (at your option) the GNU General ** Public license version 3 or 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.GPL2 and 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-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qt3dquick3drenderplugin.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE QVariantList Quick3DShaderDataArrayToVariantListConverter(Qt3DRender::Render::Quick::Quick3DShaderDataArray *array) { const QVector arrayValues = array->values(); QVariantList values; values.reserve(arrayValues.size()); for (Qt3DRender::QShaderData *data : arrayValues) values.append(QVariant::fromValue(data)); return values; } void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri) { Qt3DRender::Quick::Quick3DRender_initialize(); qmlRegisterUncreatableType(uri, 2, 0, "Window", "Only for assigning window surface property"); // Converters QMetaType::registerConverter(Quick3DShaderDataArrayToVariantListConverter); // Renderer setttings qmlRegisterType(uri, 2, 0, "RenderSettings"); qmlRegisterType(uri, 2, 0, "PickingSettings"); // @uri Qt3D.Render Qt3DRender::Quick::registerExtendedType("QSceneLoader", "Qt3D.Render/SceneLoader", uri, 2, 0, "SceneLoader"); Qt3DRender::Quick::registerExtendedType("QEffect", "Qt3D.Render/Effect", uri, 2, 0, "Effect"); Qt3DRender::Quick::registerExtendedType("QTechnique", "Qt3D.Render/Technique", uri, 2, 0, "Technique"); qmlRegisterType(uri, 2, 0, "FilterKey"); qmlRegisterType(uri, 2, 0, "GraphicsApiFilter"); qmlRegisterUncreatableType(uri, 2, 0, "QParameter", "Quick3D should instantiate Quick3DParameter only"); qmlRegisterType(uri, 2, 0, "Parameter"); Qt3DRender::Quick::registerExtendedType("QMaterial", "Qt3D.Render/Material", uri, 2, 0, "Material"); Qt3DRender::Quick::registerExtendedType("QRenderPass", "Qt3D.Render/RenderPass", uri, 2, 0, "RenderPass"); qmlRegisterType(uri, 2, 0, "ShaderProgram"); qmlRegisterUncreatableType(uri, 2, 0, "QShaderData", "Quick3D should instantiate Quick3DShaderData only"); qmlRegisterType(uri, 2, 0, "ShaderDataArray"); qmlRegisterType(uri, 2, 0, "ShaderData"); // Camera qmlRegisterType(uri, 2, 0, "Camera"); qmlRegisterType(uri, 2, 0, "CameraLens"); // Textures qmlRegisterType(uri, 2, 0, "WrapMode");//, QStringLiteral("QTextureWrapMode cannot be created from QML")); qmlRegisterUncreatableType(uri, 2, 0, "Texture", QStringLiteral("Texture should be created from one of the subclasses")); Qt3DRender::Quick::registerExtendedType("QTexture1D", "Qt3D.Render/Texture1D", uri, 2, 0, "Texture1D"); Qt3DRender::Quick::registerExtendedType("QTexture1DArray", "Qt3D.Render/Texture1DArray", uri, 2, 0, "Texture1DArray"); Qt3DRender::Quick::registerExtendedType("QTexture2D", "Qt3D.Render/Texture2D", uri, 2, 0, "Texture2D"); Qt3DRender::Quick::registerExtendedType("QTexture2DArray", "Qt3D.Render/Texture2DArray", uri, 2, 0, "Texture2DArray"); Qt3DRender::Quick::registerExtendedType("QTexture3D", "Qt3D.Render/Texture3D", uri, 2, 0, "Texture3D"); Qt3DRender::Quick::registerExtendedType("QTextureCubeMap", "Qt3D.Render/TextureCubeMap", uri, 2, 0, "TextureCubeMap"); Qt3DRender::Quick::registerExtendedType("QTextureCubeMapArray", "Qt3D.Render/TextureCubeMapArray", uri, 2, 0, "TextureCubeMapArray"); Qt3DRender::Quick::registerExtendedType("QTexture2DMultisample", "Qt3D.Render/Texture2DMultisample", uri, 2, 0, "Texture2DMultisample"); Qt3DRender::Quick::registerExtendedType("QTexture2DMultisampleArray", "Qt3D.Render/Texture2DMultisampleArray", uri, 2, 0, "Texture2DMultisampleArray"); Qt3DRender::Quick::registerExtendedType("QTextureRectangle", "Qt3D.Render/TextureRectangle", uri, 2, 0, "TextureRectangle"); Qt3DRender::Quick::registerExtendedType("QTextureBuffer", "Qt3D.Render/TextureBuffer", uri, 2, 0, "TextureBuffer"); Qt3DRender::Quick::registerExtendedType("QTextureLoader", "Qt3D.Render/TextureLoader", uri, 2, 0, "TextureLoader"); qmlRegisterUncreatableType(uri, 2, 0, "QAbstractTextureImage", QStringLiteral("QAbstractTextureImage is abstract")); qmlRegisterType(uri, 2, 0, "TextureImage"); // Geometry qmlRegisterType(uri, 2, 0, "Attribute"); Qt3DRender::Quick::registerExtendedType("QBuffer", "Qt3D.Render/Buffer", uri, 2, 0, "Buffer"); Qt3DRender::Quick::registerExtendedType("QGeometry", "Qt3D.Render/Geometry", uri, 2, 0, "Geometry"); qmlRegisterType(uri, 2, 0, "GeometryRenderer"); // Mesh qmlRegisterType(uri, 2, 0, "Mesh"); // Picking qmlRegisterType(uri, 2, 0, "ObjectPicker"); qmlRegisterUncreatableType(uri, 2, 0, "PickEvent", QStringLiteral("Events cannot be created")); // Compute Job qmlRegisterType(uri, 2, 0, "ComputeCommand"); // Layers qmlRegisterType(uri, 2, 0, "Layer"); Qt3DRender::Quick::registerExtendedType("QLayerFilter", "Qt3D.Render/LayerFilter", uri, 2, 0, "LayerFilter"); // Lights qmlRegisterUncreatableType(uri, 2, 0, "Light", QStringLiteral("Light is an abstract base class")); qmlRegisterType(uri, 2, 0, "PointLight"); qmlRegisterType(uri, 2, 0, "DirectionalLight"); qmlRegisterType(uri, 2, 0, "SpotLight"); // FrameGraph Qt3DRender::Quick::registerExtendedType("QCameraSelector", "Qt3D.Render/CameraSelector", uri, 2, 0, "CameraSelector"); Qt3DRender::Quick::registerExtendedType("QRenderPassFilter", "Qt3D.Render/RenderPassFilter", uri, 2, 0, "RenderPassFilter"); Qt3DRender::Quick::registerExtendedType("QTechniqueFilter", "Qt3D.Render/TechniqueFilter", uri, 2, 0, "TechniqueFilter"); Qt3DRender::Quick::registerExtendedType("QViewport", "Qt3D.Render/Viewport", uri, 2, 0, "Viewport"); Qt3DRender::Quick::registerExtendedType("QRenderTargetSelector", "Qt3D.Render/RenderTargetSelector", uri, 2, 0, "RenderTargetSelector"); qmlRegisterType(uri, 2, 0, "ClearBuffers"); qmlRegisterType(uri, 2, 0, "FrameGraphNode"); Qt3DRender::Quick::registerExtendedType("QRenderStateSet", "Qt3D.Render/RenderStateSet", uri, 2, 0, "RenderStateSet"); qmlRegisterType(uri, 2, 0, "NoDraw"); qmlRegisterType(uri, 2, 0, "FrustumCulling"); qmlRegisterType(uri, 2, 0, "DispatchCompute"); // RenderTarget qmlRegisterType(uri, 2, 0, "RenderTargetOutput"); Qt3DRender::Quick::registerExtendedType("QRenderTarget", "Qt3D.Render/RenderTarget", uri, 2, 0, "RenderTarget"); // Render surface selector qmlRegisterType(uri, 2, 0, "RenderSurfaceSelector"); // Sorting qmlRegisterType(uri, 2, 0, "SortPolicy"); // RenderStates qmlRegisterUncreatableType(uri, 2, 0, "RenderState", QStringLiteral("QRenderState is a base class")); qmlRegisterType(uri, 2, 0, "BlendEquationArguments"); qmlRegisterType(uri, 2, 0, "BlendEquation"); qmlRegisterType(uri, 2, 0, "AlphaTest"); qmlRegisterType(uri, 2, 0, "DepthTest"); qmlRegisterType(uri, 2, 0, "MultiSampleAntiAliasing"); qmlRegisterType(uri, 2, 0, "NoDepthMask"); qmlRegisterType(uri, 2, 0, "CullFace"); qmlRegisterType(uri, 2, 0, "FrontFace"); qmlRegisterUncreatableType(uri, 2, 0, "StencilTestArguments", QStringLiteral("QStencilTestArguments cannot be instantiated on its own")); qmlRegisterType(uri, 2, 0, "StencilTest"); qmlRegisterType(uri, 2, 0, "ScissorTest"); qmlRegisterType(uri, 2, 0, "Dithering"); qmlRegisterType(uri, 2, 0, "AlphaCoverage"); qmlRegisterType(uri, 2, 0, "PointSize"); qmlRegisterType(uri, 2, 0, "PolygonOffset"); qmlRegisterType(uri, 2, 0, "ColorMask"); qmlRegisterType(uri, 2, 0, "ClipPlane"); qmlRegisterUncreatableType(uri, 2, 0, "StencilOperationArguments", QStringLiteral("StencilOperationArguments cannot be instanciated on its own")); qmlRegisterType(uri, 2, 0, "SeamlessCubemap"); qmlRegisterType(uri, 2, 0, "StencilOperation"); qmlRegisterType(uri, 2, 0, "StencilMask"); } QT_END_NAMESPACE