diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2013-10-26 18:48:56 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-31 12:54:28 +0100 |
commit | 426f6aa672b94d8324321bc6c6d4f1a358eebedc (patch) | |
tree | 8af3e5b0aa2fdcdb7655672669f5ae277151cc3d /src/quick/items/shaders | |
parent | 34c85bb56c92316a6ce1c79d25f9653fec14791c (diff) |
Refactor shaders into seprate GLSL source files
The default implementation of QSGShaderMaterial::vertexShader() and
fragmentShader() now loads the GLSL source from a list of source files
that can be specified via the setShaderSourceFile() or
setShaderSourceFiles() functions.
Multiple shader source files for each shader stage are supported. Each
source file will be read in the order specified and concatenated
together before being compiled.
The other places where Qt Quick 2 loads shader source code have
been adapted to use the new QSGShaderSourceBuilder, which is also
used internally by QSGMaterial.
This puts Qt Quick 2 into a better state ready to support OpenGL
core profile and to load different shaders based upon OpenGL version,
profile, GPU vendor, platform, etc.
Change-Id: I1a66213c2ce788413168eb48c7bc5317e61988a2
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/quick/items/shaders')
-rw-r--r-- | src/quick/items/shaders/shadereffect.frag | 9 | ||||
-rw-r--r-- | src/quick/items/shaders/shadereffect.vert | 12 | ||||
-rw-r--r-- | src/quick/items/shaders/shadereffectfallback.frag | 4 | ||||
-rw-r--r-- | src/quick/items/shaders/shadereffectfallback.vert | 8 | ||||
-rw-r--r-- | src/quick/items/shaders/sprite.frag | 12 | ||||
-rw-r--r-- | src/quick/items/shaders/sprite.vert | 23 |
6 files changed, 68 insertions, 0 deletions
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 |