diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-01-28 15:06:57 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-08 15:02:04 +0000 |
commit | c8970e7c98cb82031b46b77149d852a538e91874 (patch) | |
tree | cdc6d4c383a9860c0f43232fd0f7582dd9660dec | |
parent | af3eb98b22a83275335d6ac702ed7ba0e8b394bb (diff) |
Quick3DTextureExtension provided list of QAbstractTextureImage to QML
Texture2D, TextureCubeMap still using their old extensions to not break
examples for now.
Change-Id: I1ad8b37acb3cb15582136be7368c94d8c7c77a4b
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/quick3d/imports/render/qt3dquick3drenderplugin.cpp | 14 | ||||
-rw-r--r-- | src/quick3d/quick3drenderer/items/quick3dtexture.cpp | 45 | ||||
-rw-r--r-- | src/quick3d/quick3drenderer/items/quick3dtexture.h | 20 |
3 files changed, 72 insertions, 7 deletions
diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp index b3abe5e42..14921e35f 100644 --- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp +++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp @@ -181,15 +181,15 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri) // Textures qmlRegisterType<Qt3D::QTextureWrapMode>(uri, 2, 0, "WrapMode");//, QStringLiteral("QTextureWrapMode cannot be created from QML")); qmlRegisterUncreatableType<Qt3D::QAbstractTextureProvider>(uri, 2, 0, "Texture", QStringLiteral("Texture should be created from one of the subclasses")); - qmlRegisterType<Qt3D::QTexture1D>(uri, 2, 0, "Texture1D"); - qmlRegisterType<Qt3D::QTexture1DArray>(uri, 2, 0, "Texture1DArray"); + qmlRegisterExtendedType<Qt3D::QTexture1D, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture1D"); + qmlRegisterExtendedType<Qt3D::QTexture1DArray, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture1DArray"); qmlRegisterExtendedType<Qt3D::QTexture2D, Qt3D::Render::Quick::Quick3DTexture2DExtension>(uri, 2, 0, "Texture2D"); - qmlRegisterType<Qt3D::QTexture2DArray>(uri, 2, 0, "Texture2DArray"); - qmlRegisterType<Qt3D::QTexture3D>(uri, 2, 0, "Texture3D"); + qmlRegisterExtendedType<Qt3D::QTexture2DArray, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture2DArray"); + qmlRegisterExtendedType<Qt3D::QTexture3D, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture3D"); qmlRegisterExtendedType<Qt3D::QTextureCubeMap, Qt3D::Render::Quick::Quick3DTextureCubeMapExtension>(uri, 2, 0, "TextureCubeMap"); - qmlRegisterType<Qt3D::QTextureCubeMapArray>(uri, 2, 0, "TextureCubeMapArray"); - qmlRegisterType<Qt3D::QTexture2DMultisample>(uri, 2, 0, "Texture2DMultisample"); - qmlRegisterType<Qt3D::QTexture2DMultisampleArray>(uri, 2, 0, "Texture2DMultisampleArray"); + qmlRegisterExtendedType<Qt3D::QTextureCubeMapArray, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "TextureCubeMapArray"); + qmlRegisterExtendedType<Qt3D::QTexture2DMultisample, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture2DMultisample"); + qmlRegisterExtendedType<Qt3D::QTexture2DMultisampleArray, Qt3D::Render::Quick::Quick3DTextureExtension>(uri, 2, 0, "Texture2DMultisampleArray"); // Meshes qmlRegisterUncreatableType<Qt3D::QAbstractMesh>(uri, 2, 0, "QAbstractMesh", QStringLiteral("QAbstractMesh is abstract")); diff --git a/src/quick3d/quick3drenderer/items/quick3dtexture.cpp b/src/quick3d/quick3drenderer/items/quick3dtexture.cpp index afe84ddfb..01689b432 100644 --- a/src/quick3d/quick3drenderer/items/quick3dtexture.cpp +++ b/src/quick3d/quick3drenderer/items/quick3dtexture.cpp @@ -237,6 +237,51 @@ void Quick3DTextureCubeMapExtension::loadFace(const QUrl &faceUrl, QAbstractText } } +Quick3DTextureExtension::Quick3DTextureExtension(QObject *parent) + : QObject(parent) +{ +} + +QQmlListProperty<QAbstractTextureImage> Quick3DTextureExtension::textureImages() +{ + return QQmlListProperty<QAbstractTextureImage>(this, 0, + &Quick3DTextureExtension::appendTextureImage, + &Quick3DTextureExtension::textureImageCount, + &Quick3DTextureExtension::textureImageAt, + &Quick3DTextureExtension::clearTextureImageList); +} + +void Quick3DTextureExtension::appendTextureImage(QQmlListProperty<QAbstractTextureImage> *list, QAbstractTextureImage *textureImage) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + self->parentTexture()->addTextureImage(textureImage); +} + +QAbstractTextureImage *Quick3DTextureExtension::textureImageAt(QQmlListProperty<QAbstractTextureImage> *list, int index) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + return self->parentTexture()->textureImages().at(index); + return Q_NULLPTR; +} + +int Quick3DTextureExtension::textureImageCount(QQmlListProperty<QAbstractTextureImage> *list) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + return self->parentTexture()->textureImages().count(); + return 0; +} + +void Quick3DTextureExtension::clearTextureImageList(QQmlListProperty<QAbstractTextureImage> *list) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + Q_FOREACH (QAbstractTextureImage *img, self->parentTexture()->textureImages()) + self->parentTexture()->removeTextureImage(img); +} + } // Quick } // Render diff --git a/src/quick3d/quick3drenderer/items/quick3dtexture.h b/src/quick3d/quick3drenderer/items/quick3dtexture.h index 8aa1c3cf1..7dfa08859 100644 --- a/src/quick3d/quick3drenderer/items/quick3dtexture.h +++ b/src/quick3d/quick3drenderer/items/quick3dtexture.h @@ -46,6 +46,7 @@ #include <Qt3DQuick/quick3dnode.h> #include <Qt3DRenderer/qtexture.h> +#include <QQmlListProperty> #include <QUrl> QT_BEGIN_NAMESPACE @@ -74,6 +75,25 @@ private: inline Qt3D::QAbstractTextureProvider *parentTexture() const { return qobject_cast<Qt3D::QAbstractTextureProvider *>(parent()); } }; +class QT3DQUICKRENDERERSHARED_EXPORT Quick3DTextureExtension : public QObject +{ + Q_OBJECT + Q_PROPERTY(QQmlListProperty<Qt3D::QAbstractTextureImage> textureImages READ textureImages) + Q_CLASSINFO("DefaultProperty", "textureImages") + +public: + explicit Quick3DTextureExtension(QObject *parent = 0); + + QQmlListProperty<QAbstractTextureImage> textureImages(); + inline QAbstractTextureProvider *parentTexture() const { return qobject_cast<QAbstractTextureProvider *>(parent()); } + +private: + static void appendTextureImage(QQmlListProperty<QAbstractTextureImage> *list, QAbstractTextureImage *textureImage); + static QAbstractTextureImage *textureImageAt(QQmlListProperty<QAbstractTextureImage> *list, int index); + static int textureImageCount(QQmlListProperty<QAbstractTextureImage> *list); + static void clearTextureImageList(QQmlListProperty<QAbstractTextureImage> *list); +}; + class QT3DQUICKRENDERERSHARED_EXPORT Quick3DTextureCubeMapExtension : public QObject { Q_OBJECT |