aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickshadereffectnode_p.h
diff options
context:
space:
mode:
authorKim Motoyoshi Kalland <kim.kalland@nokia.com>2012-03-21 14:21:51 +0100
committerQt by Nokia <qt-info@nokia.com>2012-04-04 03:29:45 +0200
commitc71c8c4619594a276d69378bbd77da5117afd566 (patch)
tree9b8ac6fb0db75abb747de6ec2a74e754770f4820 /src/quick/items/qquickshadereffectnode_p.h
parent2c741bc8af46aa26ec9a61bc996bb0de2e409943 (diff)
Fixed crash when using 'var' property in ShaderEffect.
Also made CustomParticle and ShaderEffect share some code. Task-number: QTBUG-23924 Change-Id: I975f71f031b379cf5e29302a9c931e4ead5437ea Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/items/qquickshadereffectnode_p.h')
-rw-r--r--src/quick/items/qquickshadereffectnode_p.h52
1 files changed, 23 insertions, 29 deletions
diff --git a/src/quick/items/qquickshadereffectnode_p.h b/src/quick/items/qquickshadereffectnode_p.h
index e22d2de9e2..1bbce86426 100644
--- a/src/quick/items/qquickshadereffectnode_p.h
+++ b/src/quick/items/qquickshadereffectnode_p.h
@@ -55,8 +55,14 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
struct QQuickShaderEffectMaterialKey {
- QByteArray vertexCode;
- QByteArray fragmentCode;
+ enum ShaderType
+ {
+ VertexShader,
+ FragmentShader,
+ ShaderTypeCount
+ };
+
+ QByteArray sourceCode[ShaderTypeCount];
const char *className;
bool operator == (const QQuickShaderEffectMaterialKey &other) const;
@@ -64,24 +70,21 @@ struct QQuickShaderEffectMaterialKey {
uint qHash(const QQuickShaderEffectMaterialKey &key);
-// TODO: Implement support for multisampling.
-struct QQuickShaderEffectProgram : public QQuickShaderEffectMaterialKey
-{
- QQuickShaderEffectProgram() : respectsOpacity(false), respectsMatrix(false) {}
-
- QVector<QByteArray> attributeNames;
- QSet<QByteArray> uniformNames;
-
- uint respectsOpacity : 1;
- uint respectsMatrix : 1;
-};
-
class QQuickCustomMaterialShader;
class QQuickShaderEffectNode;
class QQuickShaderEffectMaterial : public QSGMaterial
{
public:
+ struct UniformData
+ {
+ enum SpecialType { None, Sampler, Opacity, Matrix };
+
+ QByteArray name;
+ QVariant value;
+ SpecialType specialType;
+ };
+
enum CullMode
{
NoCulling,
@@ -94,13 +97,12 @@ public:
virtual QSGMaterialShader *createShader() const;
virtual int compare(const QSGMaterial *other) const;
- void setCullMode(CullMode face);
- CullMode cullMode() const;
+ QVector<QByteArray> attributes;
+ QVector<UniformData> uniforms[QQuickShaderEffectMaterialKey::ShaderTypeCount];
+ QVector<QPair<QByteArray, QSGTextureProvider *> > textureProviders;
+ CullMode cullMode;
- void setProgramSource(const QQuickShaderEffectProgram &);
- void setUniforms(const QVector<QPair<QByteArray, QVariant> > &uniformValues);
- void setTextureProviders(const QVector<QPair<QByteArray, QSGTextureProvider *> > &textures);
- const QVector<QPair<QByteArray, QSGTextureProvider *> > &textureProviders() const;
+ void setProgramSource(const QQuickShaderEffectMaterialKey &source);
void updateTextures() const;
void invalidateTextureProvider(QSGTextureProvider *provider);
@@ -114,11 +116,8 @@ protected:
// one. To guarantee that the type pointer is unique, the type object must live as long as
// there are any CustomMaterialShaders of that type.
QSharedPointer<QSGMaterialType> m_type;
+ QQuickShaderEffectMaterialKey m_source;
- QQuickShaderEffectProgram m_source;
- QVector<QPair<QByteArray, QVariant> > m_uniformValues;
- QVector<QPair<QByteArray, QSGTextureProvider *> > m_textures;
- CullMode m_cullMode;
QQuickShaderEffectNode *m_node;
bool m_emittedLogChanged;
@@ -137,17 +136,12 @@ public:
virtual void preprocess();
- QQuickShaderEffectMaterial *shaderMaterial() { return &m_material; }
-
Q_SIGNALS:
void logAndStatusChanged(const QString &, int status);
private Q_SLOTS:
void markDirtyTexture();
void textureProviderDestroyed(QObject *object);
-
-private:
- QQuickShaderEffectMaterial m_material;
};
QT_END_NAMESPACE