summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qtexture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/frontend/qtexture.cpp')
-rw-r--r--src/render/frontend/qtexture.cpp149
1 files changed, 130 insertions, 19 deletions
diff --git a/src/render/frontend/qtexture.cpp b/src/render/frontend/qtexture.cpp
index 39a660acd..a977245cd 100644
--- a/src/render/frontend/qtexture.cpp
+++ b/src/render/frontend/qtexture.cpp
@@ -65,7 +65,6 @@ public :
, m_autoMipMap(false)
, m_minFilter(QTexture::Nearest)
, m_magFilter(QTexture::Nearest)
- , m_wrapMode(QTexture::ClampToEdge)
, m_status(QTexture::Loading)
, m_maximumAnisotropy(1.0f)
{}
@@ -81,7 +80,7 @@ public :
QTexture::Filter m_minFilter, m_magFilter;
// FIXME, store per direction
- QTexture::WrapMode m_wrapMode;
+ QTextureWrapMode m_wrapMode;
QTexture::Status m_status;
float m_maximumAnisotropy;
};
@@ -95,7 +94,9 @@ void QTexture::copy(const QNode *ref)
d_func()->m_height = t->d_func()->m_height;
d_func()->m_depth = t->d_func()->m_depth;
d_func()->m_format = t->d_func()->m_format;
- d_func()->m_wrapMode = t->d_func()->m_wrapMode;
+ d_func()->m_wrapMode.setX(t->d_func()->m_wrapMode.x());
+ d_func()->m_wrapMode.setY(t->d_func()->m_wrapMode.y());
+ d_func()->m_wrapMode.setZ(t->d_func()->m_wrapMode.z());
d_func()->m_minFilter = t->d_func()->m_minFilter;
d_func()->m_magFilter = t->d_func()->m_magFilter;
d_func()->m_autoMipMap = t->d_func()->m_autoMipMap;
@@ -107,23 +108,36 @@ QTexture::QTexture(QNode *parent)
{
}
-QTexture::QTexture(QTexturePrivate &dd, QNode *parent)
- : QNode(dd, parent)
+QTexture::QTexture(Target target, QNode *parent)
+ : QNode(*new QTexturePrivate(this), parent)
{
+ d_func()->m_target = target;
}
-QTexture::~QTexture()
+QTexture::QTexture(QTexture::Target target, QTexture::TextureFormat format,
+ int width, int height, int depth, bool mipMaps,
+ QTexture::Filter magnificationFilter, QTexture::Filter minificationFilter,
+ float maximumAnisotropy, QNode *parent)
+ : QNode(*new QTexturePrivate(this), parent)
{
+ d_func()->m_target = target;
+ d_func()->m_format = format;
+ d_func()->m_width = width;
+ d_func()->m_height = height;
+ d_func()->m_depth = depth;
+ d_func()->m_autoMipMap = mipMaps;
+ d_func()->m_magFilter = magnificationFilter;
+ d_func()->m_minFilter = minificationFilter;
+ d_func()->m_maximumAnisotropy = maximumAnisotropy;
}
+QTexture::QTexture(QTexturePrivate &dd, QNode *parent)
+ : QNode(dd, parent)
+{
+}
-void QTexture::setTarget(Target target)
+QTexture::~QTexture()
{
- Q_D(QTexture);
- if (d->m_target != target) {
- d->m_target = target;
- emit targetChanged();
- }
}
void QTexture::setSize(int w, int h, int d)
@@ -291,19 +305,36 @@ QTexture::Filter QTexture::magnificationFilter() const
return d->m_magFilter;
}
-void QTexture::setWrapMode(WrapMode wrapMode)
+void QTexture::setWrapMode(const QTextureWrapMode &wrapMode)
{
Q_D(QTexture);
- if (d->m_wrapMode != wrapMode) {
- d->m_wrapMode = wrapMode;
- emit wrapModeChanged();
+ if (d->m_wrapMode.x() != wrapMode.x()) {
+ d->m_wrapMode.setX(wrapMode.x());
+ QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this));
+ e->setPropertyName(QByteArrayLiteral("wrapModeX"));
+ e->setValue(static_cast<int>(d->m_wrapMode.x()));
+ d->notifyObservers(e);
+ }
+ if (d->m_wrapMode.y() != wrapMode.y()) {
+ d->m_wrapMode.setY(wrapMode.y());
+ QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this));
+ e->setPropertyName(QByteArrayLiteral("wrapModeY"));
+ e->setValue(static_cast<int>(d->m_wrapMode.y()));
+ d->notifyObservers(e);
+ }
+ if (d->m_wrapMode.z() != wrapMode.z()) {
+ d->m_wrapMode.setZ(wrapMode.z());
+ QScenePropertyChangePtr e(new QScenePropertyChange(NodeUpdated, this));
+ e->setPropertyName(QByteArrayLiteral("wrapModeZ"));
+ e->setValue(static_cast<int>(d->m_wrapMode.z()));
+ d->notifyObservers(e);
}
}
-QTexture::WrapMode QTexture::wrapMode() const
+QTextureWrapMode *QTexture::wrapMode()
{
- Q_D(const QTexture);
- return d->m_wrapMode;
+ Q_D(QTexture);
+ return &d->m_wrapMode;
}
void QTexture::setMaximumAnisotropy(float anisotropy)
@@ -321,6 +352,86 @@ float QTexture::maximumAnisotropy() const
return d->m_maximumAnisotropy;
}
+class QTextureWrapModePrivate : public QObjectPrivate
+{
+public:
+ QTextureWrapModePrivate(QTextureWrapMode *qq)
+ : QObjectPrivate()
+ , q_ptr(qq)
+ , m_x(QTextureWrapMode::ClampToEdge)
+ , m_y(QTextureWrapMode::ClampToEdge)
+ , m_z(QTextureWrapMode::ClampToEdge)
+ {
+ }
+
+ Q_DECLARE_PUBLIC(QTextureWrapMode)
+ QTextureWrapMode *q_ptr;
+ QTextureWrapMode::WrapMode m_x;
+ QTextureWrapMode::WrapMode m_y;
+ QTextureWrapMode::WrapMode m_z;
+};
+
+QTextureWrapMode::QTextureWrapMode(WrapMode wrapMode, QObject *parent)
+ : QObject(*new QTextureWrapModePrivate(this), parent)
+{
+ d_func()->m_x = wrapMode;
+ d_func()->m_y = wrapMode;
+ d_func()->m_z = wrapMode;
+}
+
+QTextureWrapMode::QTextureWrapMode(WrapMode x,WrapMode y, WrapMode z, QObject *parent)
+ : QObject(*new QTextureWrapModePrivate(this), parent)
+{
+ d_func()->m_x = x;
+ d_func()->m_y = y;
+ d_func()->m_z = z;
+}
+
+void QTextureWrapMode::setX(WrapMode x)
+{
+ Q_D(QTextureWrapMode);
+ if (d->m_x != x) {
+ d->m_x = x;
+ emit xChanged();
+ }
+}
+
+QTextureWrapMode::WrapMode QTextureWrapMode::x() const
+{
+ Q_D(const QTextureWrapMode);
+ return d->m_x;
+}
+
+void QTextureWrapMode::setY(WrapMode y)
+{
+ Q_D(QTextureWrapMode);
+ if (d->m_y != y) {
+ d->m_y = y;
+ emit yChanged();
+ }
+}
+
+QTextureWrapMode::WrapMode QTextureWrapMode::y() const
+{
+ Q_D(const QTextureWrapMode);
+ return d->m_y;
+}
+
+void QTextureWrapMode::setZ(WrapMode z)
+{
+ Q_D(QTextureWrapMode);
+ if (d->m_z != z) {
+ d->m_z = z;
+ emit zChanged();
+ }
+}
+
+QTextureWrapMode::WrapMode QTextureWrapMode::z() const
+{
+ Q_D(const QTextureWrapMode);
+ return d->m_z;
+}
+
} // namespace Qt3D
QT_END_NAMESPACE