Файл примера RadialWaveEffect.qml
declarative/shadereffects/qml/shadereffects/RadialWaveEffect.qml
import QtQuick 1.0
import Qt.labs.shaders 1.0
ShaderEffectItem {
id: effect
property real wave: 0.3
property real waveOriginX: 0.5
property real waveOriginY: 0.5
property real waveWidth: 0.01
property real aspectRatio: width/height
property variant source: 0
fragmentShader:
"
varying mediump vec2 qt_TexCoord0;
uniform sampler2D source;
uniform highp float wave;
uniform highp float waveWidth;
uniform highp float waveOriginX;
uniform highp float waveOriginY;
uniform highp float aspectRatio;
void main(void)
{
mediump vec2 texCoord2 = qt_TexCoord0;
mediump vec2 origin = vec2(waveOriginX, (1.0 - waveOriginY) / aspectRatio);
highp float fragmentDistance = distance(vec2(texCoord2.s, texCoord2.t / aspectRatio), origin);
highp float waveLength = waveWidth + fragmentDistance * 0.25;
if ( fragmentDistance > wave && fragmentDistance < wave + waveLength) {
highp float distanceFromWaveEdge = min(abs(wave - fragmentDistance), abs(wave + waveLength - fragmentDistance));
texCoord2 += sin(1.57075 * distanceFromWaveEdge / waveLength) * distanceFromWaveEdge * 0.08 / fragmentDistance;
}
gl_FragColor = texture2D(source, texCoord2.st);
}
"
}