summaryrefslogtreecommitdiffstats
path: root/src/quick3d/quick3drenderer
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-01-28 15:06:57 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-02-08 15:02:04 +0000
commitc8970e7c98cb82031b46b77149d852a538e91874 (patch)
treecdc6d4c383a9860c0f43232fd0f7582dd9660dec /src/quick3d/quick3drenderer
parentaf3eb98b22a83275335d6ac702ed7ba0e8b394bb (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>
Diffstat (limited to 'src/quick3d/quick3drenderer')
-rw-r--r--src/quick3d/quick3drenderer/items/quick3dtexture.cpp45
-rw-r--r--src/quick3d/quick3drenderer/items/quick3dtexture.h20
2 files changed, 65 insertions, 0 deletions
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