diff options
Diffstat (limited to 'src/quick/items/qquickspritesequence.cpp')
-rw-r--r-- | src/quick/items/qquickspritesequence.cpp | 55 |
1 files changed, 5 insertions, 50 deletions
diff --git a/src/quick/items/qquickspritesequence.cpp b/src/quick/items/qquickspritesequence.cpp index 3c1492e0b3..a90aa9ace2 100644 --- a/src/quick/items/qquickspritesequence.cpp +++ b/src/quick/items/qquickspritesequence.cpp @@ -56,39 +56,6 @@ QT_BEGIN_NAMESPACE -static const char vertexShaderCode[] = - "attribute highp vec2 vPos;\n" - "attribute highp vec2 vTex;\n" - "uniform highp vec3 animData;// w,h(premultiplied of anim), interpolation progress\n" - "uniform highp vec4 animPos;//x,y, x,y (two frames for interpolation)\n" - "\n" - "uniform highp mat4 qt_Matrix;\n" - "\n" - "varying highp vec4 fTexS;\n" - "varying lowp float progress;\n" - "\n" - "\n" - "void main() {\n" - " progress = animData.z;\n" - " //Calculate frame location in texture\n" - " fTexS.xy = animPos.xy + vTex.xy * animData.xy;\n" - " //Next frame is also passed, for interpolation\n" - " fTexS.zw = animPos.zw + vTex.xy * animData.xy;\n" - "\n" - " gl_Position = qt_Matrix * vec4(vPos.x, vPos.y, 0, 1);\n" - "}\n"; - -static const char fragmentShaderCode[] = - "uniform sampler2D _qt_texture;\n" - "uniform lowp float qt_Opacity;\n" - "\n" - "varying highp vec4 fTexS;\n" - "varying lowp float progress;\n" - "\n" - "void main() {\n" - " gl_FragColor = mix(texture2D(_qt_texture, fTexS.xy), texture2D(_qt_texture, fTexS.zw), progress) * qt_Opacity;\n" - "}\n"; - class QQuickSpriteSequenceMaterial : public QSGMaterial { public: @@ -133,16 +100,11 @@ QQuickSpriteSequenceMaterial::~QQuickSpriteSequenceMaterial() class SpriteSequenceMaterialData : public QSGMaterialShader { public: - SpriteSequenceMaterialData(const char * /* vertexFile */ = 0, const char * /* fragmentFile */ = 0) + SpriteSequenceMaterialData() + : QSGMaterialShader() { - } - - void deactivate() { - QSGMaterialShader::deactivate(); - - for (int i=0; i<8; ++i) { - program()->setAttributeArray(i, GL_FLOAT, chunkOfBytes, 1, 0); - } + setShaderSourceFile(QOpenGLShader::Vertex, QStringLiteral(":/items/shaders/sprite.vert")); + setShaderSourceFile(QOpenGLShader::Fragment, QStringLiteral(":/items/shaders/sprite.frag")); } virtual void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *) @@ -165,9 +127,6 @@ public: m_animPos_id = program()->uniformLocation("animPos"); } - virtual const char *vertexShader() const { return vertexShaderCode; } - virtual const char *fragmentShader() const { return fragmentShaderCode; } - virtual char const *const *attributeNames() const { static const char *attr[] = { "vPos", @@ -181,12 +140,8 @@ public: int m_opacity_id; int m_animData_id; int m_animPos_id; - - static float chunkOfBytes[1024]; }; -float SpriteSequenceMaterialData::chunkOfBytes[1024]; - QSGMaterialShader *QQuickSpriteSequenceMaterial::createShader() const { return new SpriteSequenceMaterialData; @@ -217,7 +172,7 @@ struct SpriteVertices { SpriteSequence renders and controls a list of animations defined by \l Sprite types. - For full details, see the \l{Sprite Animation} overview. + For full details, see the \l{Sprite Animations} overview. */ /*! \qmlproperty bool QtQuick::SpriteSequence::running |