DEFINE_BOOL_CONFIG_OPTION(qmlFboOverlay, QML_FBO_OVERLAY)
+QSGShaderEffectSourceNode::QSGShaderEffectSourceNode()
+{
+ setFlag(UsePreprocess, true);
+}
+
+void QSGShaderEffectSourceNode::markDirtyTexture()
+{
+ markDirty(DirtyMaterial);
+}
+
+
QSGShaderEffectTexture::QSGShaderEffectTexture(QSGItem *shaderSource)
: QSGDynamicTexture()
, m_item(0)
}
// Render texture.
- QSGNode::DirtyFlags dirty = root->dirtyFlags();
- root->markDirty(QSGNode::DirtyNodeAdded); // Force matrix and clip update.
- m_renderer->nodeChanged(root, QSGNode::DirtyNodeAdded); // Force render list update.
+ root->markDirty(QSGNode::DirtyForceUpdate); // Force matrix, clip and opacity update.
+ m_renderer->nodeChanged(root, QSGNode::DirtyForceUpdate); // Force render list update.
#ifdef QSG_DEBUG_FBO_OVERLAY
if (qmlFboOverlay()) {
ctx->functions()->glGenerateMipmap(GL_TEXTURE_2D);
}
- root->markDirty(dirty | QSGNode::DirtyNodeAdded); // Force matrix, clip and render list update.
+ root->markDirty(QSGNode::DirtyForceUpdate); // Force matrix, clip, opacity and render list update.
#ifdef QSG_DEBUG_FBO_OVERLAY
if (qmlFboOverlay())
{
if (enabled == m_mipmap)
return;
- printf("setting mipmap to: %d\n", enabled);
m_mipmap = enabled;
update();
emit mipmapChanged();
return 0;
}
- QSGImageNode *node = static_cast<QSGImageNode *>(oldNode);
+ QSGShaderEffectSourceNode *node = static_cast<QSGShaderEffectSourceNode *>(oldNode);
if (!node) {
- node = QSGItemPrivate::get(this)->sceneGraphContext()->createImageNode();
- node->setFlag(QSGNode::UsePreprocess, true);
+ node = new QSGShaderEffectSourceNode;
node->setTexture(m_texture);
+ connect(m_texture, SIGNAL(textureChanged()), node, SLOT(markDirtyTexture()), Qt::DirectConnection);
}
+ // If live and recursive, update continuously.
+ if (m_live && m_recursive)
+ node->markDirty(QSGNode::DirtyMaterial);
+
QSGShaderEffectTexture *tex = qobject_cast<QSGShaderEffectTexture *>(m_texture);
tex->setItem(QSGItemPrivate::get(m_sourceItem)->itemNode());
#include <private/qsgtextureprovider_p.h>
#include <private/qsgadaptationlayer_p.h>
#include <private/qsgcontext_p.h>
+#include <private/qsgdefaultimagenode_p.h>
#include "qpointer.h"
#include "qsize.h"
class UpdatePaintNodeData;
class QGLFramebufferObject;
+class QSGShaderEffectSourceNode : public QObject, public QSGDefaultImageNode
+{
+ Q_OBJECT
+
+public:
+ QSGShaderEffectSourceNode();
+
+private Q_SLOTS:
+ void markDirtyTexture();
+};
+
class QSGShaderEffectTexture : public QSGDynamicTexture
{
Q_OBJECT
DirtyNodeRemoved = 0x0008,
DirtyGeometry = 0x0010,
DirtyRenderOrder = 0x0020,
- DirtyMaterial = 0x0100,
- DirtyOpacity = 0x0200,
+ DirtyMaterial = 0x0040,
+ DirtyOpacity = 0x0080,
+ DirtyForceUpdate = 0x0100,
DirtyAll = 0xffff,
DirtyPropagationMask = DirtyMatrix
| DirtyClipList
| DirtyNodeAdded
- | DirtyOpacity,
+ | DirtyOpacity
+ | DirtyForceUpdate,
};
Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)