Revision control

++ // Copyright (C) 2020 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ import QtQuick
++ import QtQuick3D
++
++ Effect {
++ id: effectRoot
++ // there are only here to get the sampler2Ds declared in the shader
++ readonly property TextureInput sprite: TextureInput {
++ texture: Texture {}
++ }
++ readonly property TextureInput glowSampler: TextureInput {
++ texture: Texture {}
++ }
++
++ property real fadeAmount: 0.25 // 0 - 1
++ property real blurQuality: 0.25 // 0.1 - 1.0
++
++ Shader {
++ id: vblurVert
++ stage: Shader.Vertex
++ shader: "qrc:/qtquick3deffects/shaders/motionblurvertical.vert"
++ }
++ Shader {
++ id: vblurFrag
++ stage: Shader.Fragment
++ shader: "qrc:/qtquick3deffects/shaders/motionblurvertical.frag"
++ }
++
++ Shader {
++ id: hblurVert
++ stage: Shader.Vertex
++ shader: "qrc:/qtquick3deffects/shaders/motionblurhorizontal.vert"
++ }
++ Shader {
++ id: hblurFrag
++ stage: Shader.Fragment
++ shader: "qrc:/qtquick3deffects/shaders/motionblurhorizontal.frag"
++ }
++
++ Shader {
++ id: blend
++ stage: Shader.Fragment
++ shader: "qrc:/qtquick3deffects/shaders/blend.frag"
++ }
++
++ Buffer {
++ id: glowBuffer
++ name: "glowBuffer"
++ format: Buffer.RGBA8
++ textureFilterOperation: Buffer.Nearest
++ textureCoordOperation: Buffer.ClampToEdge
++ bufferFlags: Buffer.SceneLifetime
++ sizeMultiplier: effectRoot.blurQuality
++ }
++
++ Buffer {
++ id: tempBuffer
++ name: "tempBuffer"
++ format: Buffer.RGBA8
++ textureFilterOperation: Buffer.Linear
++ textureCoordOperation: Buffer.ClampToEdge
++ bufferFlags: Buffer.None
++ sizeMultiplier: effectRoot.blurQuality
++ }
++
++ passes: [
++ Pass {
++ shaders: [ hblurVert, hblurFrag ]
++ commands: [
++ BufferInput {
++ // Expose the initially empty glowBuffer texture under the
++ // sampler2D glowSampler in the shader. Note the
++ // SceneLifetime and that the next pass writes to the same
++ // texture (accumulate).
++ sampler: "glowSampler"
++ buffer: glowBuffer
++ }
++ ]
++ output: tempBuffer
++ },
++ Pass {
++ shaders: [ vblurVert, vblurFrag ]
++ commands: [
++ // the texture for tempBuffer will be INPUT in this pass
++ BufferInput {
++ buffer: tempBuffer
++ }
++ ]
++ output: glowBuffer
++ },
++ Pass {
++ shaders: [ blend ]
++ commands: [
++ // the texture for glowBuffer will be INPUT in this pass
++ BufferInput {
++ buffer: glowBuffer
++ },
++ // the input texture (that would normally be INPUT) for this pass is exposed to the shader as sprite
++ BufferInput {
++ sampler: "sprite"
++ }
++ ]
++ }
++ ]
++ }