// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #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 #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 QList 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(); // Converters QMetaType::registerConverter(Quick3DShaderDataArrayToVariantListConverter); // Renderer setttings qmlRegisterType(uri, 2, 0, "RenderSettings"); qmlRegisterType(uri, 2, 15, "RenderSettings"); qmlRegisterType(uri, 2, 0, "PickingSettings"); qmlRegisterUncreatableType(uri, 2, 15, "RenderCapabilities", "Only available as a property of RenderSettings"); // @uri Qt3D.Render Qt3DRender::Quick::registerExtendedType("QSceneLoader", "Qt3D.Render/SceneLoader", uri, 2, 0, "SceneLoader"); qmlRegisterType(uri, 2, 9, "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"); qmlRegisterType(uri, 2, 9, "ShaderProgram"); qmlRegisterType(uri, 2, 15, "ShaderProgram"); qmlRegisterType(uri, 2, 10, "ShaderProgramBuilder"); qmlRegisterType(uri, 2, 13, "ShaderProgramBuilder"); 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, 9, "Camera"); qmlRegisterType(uri, 2, 14, "Camera"); qmlRegisterType(uri, 2, 0, "CameraLens"); qmlRegisterType(uri, 2, 9, "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")); qmlRegisterUncreatableType(uri, 2, 13, "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"); qmlRegisterType(uri, 2, 13, "SharedGLTexture"); qmlRegisterType(uri, 2, 14, "ShaderImage"); // Geometry qmlRegisterType(uri, 2, 0, "GeometryRenderer"); qmlRegisterType(uri, 2, 16, "GeometryRenderer"); qmlRegisterType(uri, 2, 9, "LevelOfDetail"); qmlRegisterType(uri, 2, 9, "LevelOfDetailSwitch"); qRegisterMetaType("LevelOfDetailBoundingSphere"); // Mesh qmlRegisterType(uri, 2, 0, "Mesh"); // Picking qmlRegisterType(uri, 2, 0, "ObjectPicker"); qmlRegisterType(uri, 2, 9, "ObjectPicker"); qmlRegisterType(uri, 2, 13, "ObjectPicker"); qmlRegisterUncreatableType(uri, 2, 0, "PickEvent", QStringLiteral("Events cannot be created")); qmlRegisterUncreatableType(uri, 2, 14, "PickEvent", QStringLiteral("Events cannot be created")); qmlRegisterType(uri, 2, 11, "RayCaster"); qmlRegisterType(uri, 2, 11, "ScreenRayCaster"); qmlRegisterType(uri, 2, 16, "PickingProxy"); // Compute Job qmlRegisterType(uri, 2, 0, "ComputeCommand"); qmlRegisterType(uri, 2, 13, "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, 9, "EnvironmentLight"); 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"); qmlRegisterType(uri, 2, 9, "Viewport"); qmlRegisterType(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"); qmlRegisterType(uri, 2, 1, "RenderCapture"); qmlRegisterType(uri, 2, 9, "RenderCapture"); qmlRegisterUncreatableType(uri, 2, 1, "RenderCaptureReply", QStringLiteral("RenderCaptureReply is only instantiated by RenderCapture")); qmlRegisterType(uri, 2, 9, "BufferCapture"); Qt3DRender::Quick::registerExtendedType("QMemoryBarrier", "Qt3D.Render/MemoryBarrier", uri, 2, 9, "MemoryBarrier"); qmlRegisterType(uri, 2, 10, "ProximityFilter"); qmlRegisterType(uri, 2, 10, "BlitFramebuffer"); qmlRegisterType(uri, 2, 13, "SetFence"); qmlRegisterType(uri, 2, 13, "WaitFence"); qmlRegisterType(uri, 2, 14, "NoPicking"); qmlRegisterType(uri, 2, 14, "SubtreeEnabler"); qmlRegisterType(uri, 2, 16, "DebugOverlay"); // 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, 14, "DepthRange"); 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"); qmlRegisterType(uri, 2, 10, "LineWidth"); qmlRegisterType(uri, 2, 13, "RasterMode"); // The minor version used to be the current Qt 5 minor. For compatibility it is the last // Qt 5 release. qmlRegisterModule(uri, 2, 15); } QT_END_NAMESPACE #include "moc_qt3dquick3drenderplugin.cpp"