diff options
Diffstat (limited to 'src/render/frontend')
-rw-r--r-- | src/render/frontend/qtexture.cpp | 149 | ||||
-rw-r--r-- | src/render/frontend/qtexture.h | 74 |
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 |