aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items')
-rw-r--r--src/quick/items/items.pri11
-rw-r--r--src/quick/items/items.qrc10
-rw-r--r--src/quick/items/qquickanimatedsprite.cpp41
-rw-r--r--src/quick/items/qquickshadereffect.cpp33
-rw-r--r--src/quick/items/qquickshadereffectnode.cpp16
-rw-r--r--src/quick/items/qquickspritesequence.cpp41
-rw-r--r--src/quick/items/shaders/shadereffect.frag9
-rw-r--r--src/quick/items/shaders/shadereffect.vert12
-rw-r--r--src/quick/items/shaders/shadereffectfallback.frag4
-rw-r--r--src/quick/items/shaders/shadereffectfallback.vert8
-rw-r--r--src/quick/items/shaders/sprite.frag12
-rw-r--r--src/quick/items/shaders/sprite.vert23
12 files changed, 113 insertions, 107 deletions
diff --git a/src/quick/items/items.pri b/src/quick/items/items.pri
index cbdc5fd80f..d0ebbcfcdb 100644
--- a/src/quick/items/items.pri
+++ b/src/quick/items/items.pri
@@ -139,6 +139,15 @@ HEADERS += \
$$PWD/qquickshadereffectnode_p.h \
$$PWD/qquickshadereffectsource_p.h \
-include(context2d/context2d.pri)
+OTHER_FILES += \
+ $$PWD/shaders/sprite.vert \
+ $$PWD/shaders/sprite.frag \
+ $$PWD/shaders/shadereffect.vert \
+ $$PWD/shaders/shadereffect.frag \
+ $$PWD/shaders/shadereffectfallback.vert \
+ $$PWD/shaders/shadereffectfallback.frag
+RESOURCES += \
+ $$PWD/items.qrc
+include(context2d/context2d.pri)
diff --git a/src/quick/items/items.qrc b/src/quick/items/items.qrc
new file mode 100644
index 0000000000..837cffb65a
--- /dev/null
+++ b/src/quick/items/items.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/items">
+ <file>shaders/sprite.frag</file>
+ <file>shaders/sprite.vert</file>
+ <file>shaders/shadereffect.vert</file>
+ <file>shaders/shadereffect.frag</file>
+ <file>shaders/shadereffectfallback.frag</file>
+ <file>shaders/shadereffectfallback.vert</file>
+ </qresource>
+</RCC>
diff --git a/src/quick/items/qquickanimatedsprite.cpp b/src/quick/items/qquickanimatedsprite.cpp
index c90adc24a5..4c16a1e9e2 100644
--- a/src/quick/items/qquickanimatedsprite.cpp
+++ b/src/quick/items/qquickanimatedsprite.cpp
@@ -57,39 +57,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 QQuickAnimatedSpriteMaterial : public QSGMaterial
{
public:
@@ -134,8 +101,11 @@ QQuickAnimatedSpriteMaterial::~QQuickAnimatedSpriteMaterial()
class AnimatedSpriteMaterialData : public QSGMaterialShader
{
public:
- AnimatedSpriteMaterialData(const char * /* vertexFile */ = 0, const char * /* fragmentFile */ = 0)
+ AnimatedSpriteMaterialData()
+ : QSGMaterialShader()
{
+ 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 *)
@@ -158,9 +128,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",
diff --git a/src/quick/items/qquickshadereffect.cpp b/src/quick/items/qquickshadereffect.cpp
index 354b9f751b..9c766a1622 100644
--- a/src/quick/items/qquickshadereffect.cpp
+++ b/src/quick/items/qquickshadereffect.cpp
@@ -43,6 +43,7 @@
#include <private/qquickshadereffectnode_p.h>
#include <QtQuick/qsgmaterial.h>
+#include <QtQuick/private/qsgshadersourcebuilder_p.h>
#include "qquickitem_p.h"
#include <QtQuick/private/qsgcontext_p.h>
@@ -57,24 +58,6 @@
QT_BEGIN_NAMESPACE
-static const char qt_default_vertex_code[] =
- "uniform highp mat4 qt_Matrix; \n"
- "attribute highp vec4 qt_Vertex; \n"
- "attribute highp vec2 qt_MultiTexCoord0; \n"
- "varying highp vec2 qt_TexCoord0; \n"
- "void main() { \n"
- " qt_TexCoord0 = qt_MultiTexCoord0; \n"
- " gl_Position = qt_Matrix * qt_Vertex; \n"
- "}";
-
-static const char qt_default_fragment_code[] =
- "varying highp vec2 qt_TexCoord0; \n"
- "uniform sampler2D source; \n"
- "uniform lowp float qt_Opacity; \n"
- "void main() { \n"
- " gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity; \n"
- "}";
-
static const char qt_position_attribute_name[] = "qt_Vertex";
static const char qt_texcoord_attribute_name[] = "qt_MultiTexCoord0";
@@ -979,10 +962,16 @@ QSGNode *QQuickShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
if (m_dirtyProgram) {
Key s = m_common.source;
- if (s.sourceCode[Key::FragmentShader].isEmpty())
- s.sourceCode[Key::FragmentShader] = qt_default_fragment_code;
- if (s.sourceCode[Key::VertexShader].isEmpty())
- s.sourceCode[Key::VertexShader] = qt_default_vertex_code;
+ QSGShaderSourceBuilder builder;
+ if (s.sourceCode[Key::FragmentShader].isEmpty()) {
+ builder.appendSourceFile(QStringLiteral(":/items/shaders/shadereffect.frag"));
+ s.sourceCode[Key::FragmentShader] = builder.source();
+ builder.clear();
+ }
+ if (s.sourceCode[Key::VertexShader].isEmpty()) {
+ builder.appendSourceFile(QStringLiteral(":/items/shaders/shadereffect.vert"));
+ s.sourceCode[Key::VertexShader] = builder.source();
+ }
s.className = metaObject()->className();
material->setProgramSource(s);
diff --git a/src/quick/items/qquickshadereffectnode.cpp b/src/quick/items/qquickshadereffectnode.cpp
index b84d251de5..8788fa8362 100644
--- a/src/quick/items/qquickshadereffectnode.cpp
+++ b/src/quick/items/qquickshadereffectnode.cpp
@@ -45,6 +45,7 @@
#include "qquickshadereffect_p.h"
#include <QtQuick/qsgtextureprovider.h>
#include <QtQuick/private/qsgrenderer_p.h>
+#include <QtQuick/private/qsgshadersourcebuilder_p.h>
QT_BEGIN_NAMESPACE
@@ -276,20 +277,15 @@ void QQuickCustomMaterialShader::compile()
m_log += program()->log();
}
- static const char fallbackVertexShader[] =
- "uniform highp mat4 qt_Matrix;"
- "attribute highp vec4 v;"
- "void main() { gl_Position = qt_Matrix * v; }";
- static const char fallbackFragmentShader[] =
- "void main() { gl_FragColor = vec4(1., 0., 1., 1.); }";
-
if (!m_compiled) {
qWarning("QQuickCustomMaterialShader: Shader compilation failed:");
qWarning() << program()->log();
- program()->removeAllShaders();
- program()->addShaderFromSourceCode(QOpenGLShader::Vertex, fallbackVertexShader);
- program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fallbackFragmentShader);
+ QSGShaderSourceBuilder::initializeProgramFromFiles(
+ program(),
+ QStringLiteral(":/items/shaders/shadereffectfallback.vert"),
+ QStringLiteral(":/items/shaders/shadereffectfallback.frag"));
+
#ifndef QT_NO_DEBUG
for (int i = 0; i < attrCount; ++i) {
#else
diff --git a/src/quick/items/qquickspritesequence.cpp b/src/quick/items/qquickspritesequence.cpp
index 8a6789bb9f..28f1397cc9 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,8 +100,11 @@ QQuickSpriteSequenceMaterial::~QQuickSpriteSequenceMaterial()
class SpriteSequenceMaterialData : public QSGMaterialShader
{
public:
- SpriteSequenceMaterialData(const char * /* vertexFile */ = 0, const char * /* fragmentFile */ = 0)
+ SpriteSequenceMaterialData()
+ : QSGMaterialShader()
{
+ 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 *)
@@ -157,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",
diff --git a/src/quick/items/shaders/shadereffect.frag b/src/quick/items/shaders/shadereffect.frag
new file mode 100644
index 0000000000..c1c15ecb0c
--- /dev/null
+++ b/src/quick/items/shaders/shadereffect.frag
@@ -0,0 +1,9 @@
+varying highp vec2 qt_TexCoord0;
+
+uniform sampler2D source;
+uniform lowp float qt_Opacity;
+
+void main()
+{
+ gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
+} \ No newline at end of file
diff --git a/src/quick/items/shaders/shadereffect.vert b/src/quick/items/shaders/shadereffect.vert
new file mode 100644
index 0000000000..ae1e84a50c
--- /dev/null
+++ b/src/quick/items/shaders/shadereffect.vert
@@ -0,0 +1,12 @@
+uniform highp mat4 qt_Matrix;
+
+attribute highp vec4 qt_Vertex;
+attribute highp vec2 qt_MultiTexCoord0;
+
+varying highp vec2 qt_TexCoord0;
+
+void main()
+{
+ qt_TexCoord0 = qt_MultiTexCoord0;
+ gl_Position = qt_Matrix * qt_Vertex;
+} \ No newline at end of file
diff --git a/src/quick/items/shaders/shadereffectfallback.frag b/src/quick/items/shaders/shadereffectfallback.frag
new file mode 100644
index 0000000000..d279e54083
--- /dev/null
+++ b/src/quick/items/shaders/shadereffectfallback.frag
@@ -0,0 +1,4 @@
+void main()
+{
+ gl_FragColor = vec4(1., 0., 1., 1.);
+} \ No newline at end of file
diff --git a/src/quick/items/shaders/shadereffectfallback.vert b/src/quick/items/shaders/shadereffectfallback.vert
new file mode 100644
index 0000000000..0a11a1d340
--- /dev/null
+++ b/src/quick/items/shaders/shadereffectfallback.vert
@@ -0,0 +1,8 @@
+uniform highp mat4 qt_Matrix;
+
+attribute highp vec4 v;
+
+void main()
+{
+ gl_Position = qt_Matrix * v;
+} \ No newline at end of file
diff --git a/src/quick/items/shaders/sprite.frag b/src/quick/items/shaders/sprite.frag
new file mode 100644
index 0000000000..e1fcb0f006
--- /dev/null
+++ b/src/quick/items/shaders/sprite.frag
@@ -0,0 +1,12 @@
+uniform sampler2D _qt_texture;
+uniform lowp float qt_Opacity;
+
+varying highp vec4 fTexS;
+varying lowp float progress;
+
+void main()
+{
+ gl_FragColor = mix(texture2D(_qt_texture, fTexS.xy),
+ texture2D(_qt_texture, fTexS.zw),
+ progress) * qt_Opacity;
+} \ No newline at end of file
diff --git a/src/quick/items/shaders/sprite.vert b/src/quick/items/shaders/sprite.vert
new file mode 100644
index 0000000000..fc826f60b4
--- /dev/null
+++ b/src/quick/items/shaders/sprite.vert
@@ -0,0 +1,23 @@
+attribute highp vec2 vPos;
+attribute highp vec2 vTex;
+
+uniform highp vec3 animData;// w,h(premultiplied of anim), interpolation progress
+uniform highp vec4 animPos;//x,y, x,y (two frames for interpolation)
+
+uniform highp mat4 qt_Matrix;
+
+varying highp vec4 fTexS;
+varying lowp float progress;
+
+void main()
+{
+ progress = animData.z;
+
+ // Calculate frame location in texture
+ fTexS.xy = animPos.xy + vTex.xy * animData.xy;
+
+ // Next frame is also passed, for interpolation
+ fTexS.zw = animPos.zw + vTex.xy * animData.xy;
+
+ gl_Position = qt_Matrix * vec4(vPos.x, vPos.y, 0, 1);
+} \ No newline at end of file