summaryrefslogtreecommitdiffstats
path: root/src/render/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/frontend')
-rw-r--r--src/render/frontend/qtexture.cpp149
-rw-r--r--src/render/frontend/qtexture.h74
2 files changed, 188 insertions, 35 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
diff --git a/src/render/frontend/qtexture.h b/src/render/frontend/qtexture.h
index e04c4136e..532454a71 100644
--- a/src/render/frontend/qtexture.h
+++ b/src/render/frontend/qtexture.h
@@ -52,6 +52,44 @@ QT_BEGIN_NAMESPACE
namespace Qt3D {
class QTexturePrivate;
+class QTextureWrapModePrivate;
+
+class QT3DRENDERERSHARED_EXPORT QTextureWrapMode: public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(WrapMode)
+ Q_PROPERTY(WrapMode x READ x WRITE setX NOTIFY xChanged)
+ Q_PROPERTY(WrapMode y READ y WRITE setY NOTIFY yChanged)
+ Q_PROPERTY(WrapMode z READ z WRITE setZ NOTIFY zChanged)
+
+public:
+ enum WrapMode {
+ Repeat = 0x2901, // GL_REPEAT
+ MirroredRepeat = 0x8370, // GL_MIRRORED_REPEAT
+ ClampToEdge = 0x812F, // GL_CLAMP_TO_EDGE
+ ClampToBorder = 0x812D // GL_CLAMP_TO_BORDER
+ };
+
+ explicit QTextureWrapMode(WrapMode wrapMode = ClampToEdge, QObject *parent = 0);
+ explicit QTextureWrapMode(WrapMode x, WrapMode y, WrapMode z, QObject *parent = 0);
+
+ void setX(WrapMode x);
+ WrapMode x() const;
+
+ void setY(WrapMode y);
+ WrapMode y() const;
+
+ void setZ(WrapMode z);
+ WrapMode z() const;
+
+Q_SIGNALS:
+ void xChanged();
+ void yChanged();
+ void zChanged();
+
+private:
+ Q_DECLARE_PRIVATE(QTextureWrapMode)
+};
class QT3DRENDERERSHARED_EXPORT QTexture : public QNode
{
@@ -59,12 +97,11 @@ class QT3DRENDERERSHARED_EXPORT QTexture : public QNode
Q_ENUMS(Target)
Q_ENUMS(TextureFormat)
Q_ENUMS(Filter)
- Q_ENUMS(WrapMode)
Q_ENUMS(Status)
- Q_PROPERTY(Target target READ target WRITE setTarget NOTIFY targetChanged)
+ Q_PROPERTY(Target target READ target CONSTANT)
Q_PROPERTY(TextureFormat format READ format WRITE setFormat NOTIFY formatChanged)
Q_PROPERTY(bool generateMipMaps READ generateMipMaps WRITE setGenerateMipMaps NOTIFY generateMipMapsChanged)
- Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
+ Q_PROPERTY(Qt3D::QTextureWrapMode *wrapMode READ wrapMode CONSTANT)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
@@ -74,8 +111,6 @@ class QT3DRENDERERSHARED_EXPORT QTexture : public QNode
Q_PROPERTY(float maximumAnisotropy READ maximumAnisotropy WRITE setMaximumAnisotropy NOTIFY maximumAnisotropyChanged)
public:
- explicit QTexture(QNode *parent = 0);
- ~QTexture();
enum Status {
Loading = 0,
@@ -222,14 +257,22 @@ public:
LinearMipMapLinear = 0x2703 // GL_LINEAR_MIPMAP_LINEAR
};
- enum WrapMode {
- Repeat = 0x2901, // GL_REPEAT
- MirroredRepeat = 0x8370, // GL_MIRRORED_REPEAT
- ClampToEdge = 0x812F, // GL_CLAMP_TO_EDGE
- ClampToBorder = 0x812D // GL_CLAMP_TO_BORDER
+ enum CubeMapFace {
+ CubeMapPositiveX = 0x8515, // GL_TEXTURE_CUBE_MAP_POSITIVE_X
+ CubeMapNegativeX = 0x8516, // GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+ CubeMapPositiveY = 0x8517, // GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+ CubeMapNegativeY = 0x8518, // GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+ CubeMapPositiveZ = 0x8519, // GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+ CubeMapNegativeZ = 0x851A // GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
};
- void setTarget(Target target);
+ explicit QTexture(Target target, QNode *parent = 0);
+ explicit QTexture(Target target, TextureFormat format, int width, int height = 1, int depth = 1,
+ bool mipMaps = false, Filter magnificationFilter = Nearest, Filter minificationFilter = Nearest,
+ float maximumAnisotropy = 1.0f, QNode *parent = 0);
+ ~QTexture();
+
+
Target target() const;
void setFormat(TextureFormat format);
@@ -257,11 +300,10 @@ public:
void setMagnificationFilter(Filter f);
Filter minificationFilter() const;
-
Filter magnificationFilter() const;
- void setWrapMode(WrapMode wrapMode);
- WrapMode wrapMode() const;
+ void setWrapMode(const QTextureWrapMode &wrapMode);
+ QTextureWrapMode *wrapMode();
void setMaximumAnisotropy(float anisotropy);
float maximumAnisotropy() const;
@@ -277,11 +319,9 @@ public:
int depth() const;
Q_SIGNALS:
- void targetChanged();
void formatChanged();
void statusChanged();
void generateMipMapsChanged();
- void wrapModeChanged();
void widthChanged();
void heightChanged();
void depthChanged();
@@ -290,6 +330,7 @@ Q_SIGNALS:
void maximumAnisotropyChanged();
protected:
+ explicit QTexture(QNode *parent = 0);
QTexture(QTexturePrivate &dd, QNode *parent = 0);
void copy(const QNode *ref) Q_DECL_OVERRIDE;
void setStatus(Status status);
@@ -304,5 +345,6 @@ private:
QT_END_NAMESPACE
Q_DECLARE_METATYPE(Qt3D::QTexture*)
+Q_DECLARE_METATYPE(Qt3D::QTextureWrapMode*)
#endif // QT3D_QTEXTURE_H