Warning, /plasma/libplasma/examples/applets/testshaders/contents/ui/ColorShower.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2013 Digia Plc and /or its subsidiary(-ies) <http://www.qt-project.org/legal> 0003 0004 This file is part of the examples of the Qt Toolkit. 0005 0006 SPDX-License-Identifier: BSD-3-Clause 0007 */ 0008 0009 import QtQuick 0010 import QtQuick.Particles 0011 0012 ShaderExample { 0013 0014 pageName: "Particles" 0015 pageDescription: "Fun rainbow colors using a fragment shader" 0016 0017 Item { 0018 anchors.fill: parent 0019 clip: true 0020 anchors.margins: -_s 0021 ParticleSystem { 0022 id: psItem 0023 //anchors.fill: parent 0024 x: parent.width / 2 0025 y: parent.height / 2 0026 width: parent.width 0027 height: parent.height 0028 // clip: true 0029 anchors.topMargin: 48 0030 //anchors.leftMargin: 42 0031 0032 Emitter { 0033 emitRate: 400 0034 lifeSpan: 8000 0035 size: 24 0036 sizeVariation: 16 0037 velocity: PointDirection {x: psItem.width/20; y: psItem.height/20;} 0038 acceleration: PointDirection {x: -psItem.width/40; y: -psItem.height/40; xVariation: -psItem.width/20; yVariation: -psItem.width/20} 0039 } 0040 0041 CustomParticle { 0042 vertexShader:" 0043 uniform lowp float qt_Opacity; 0044 varying lowp float fFade; 0045 varying highp vec2 fPos; 0046 0047 void main() { 0048 qt_TexCoord0 = qt_ParticleTex; 0049 highp float size = qt_ParticleData.z; 0050 highp float endSize = qt_ParticleData.w; 0051 0052 highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y; 0053 0054 highp float currentSize = mix(size, endSize, t * t); 0055 0056 if (t < 0. || t > 1.) 0057 currentSize = 0.; 0058 0059 highp vec2 pos = qt_ParticlePos 0060 - currentSize / 2. + currentSize * qt_ParticleTex // adjust size 0061 + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector.. 0062 + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.); 0063 0064 gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1); 0065 0066 highp float fadeIn = min(t * 20., 1.); 0067 highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.)); 0068 0069 fFade = fadeIn * fadeOut * qt_Opacity; 0070 fPos = vec2(pos.x/320., pos.y/480.); 0071 } 0072 " 0073 //! [0] 0074 fragmentShader: " 0075 varying highp vec2 fPos; 0076 varying lowp float fFade; 0077 varying highp vec2 qt_TexCoord0; 0078 void main() {//*2 because this generates dark colors mostly 0079 highp vec2 circlePos = qt_TexCoord0*2.0 - vec2(1.0,1.0); 0080 highp float dist = length(circlePos); 0081 highp float circleFactor = max(min(1.0 - dist, 1.0), 0.0); 0082 gl_FragColor = vec4(fPos.x*2.0 - fPos.y, fPos.y*2.0 - fPos.x, fPos.x*fPos.y*2.0, 0.0) * circleFactor * fFade; 0083 }" 0084 //! [0] 0085 0086 } 0087 } 0088 } 0089 }