108 lines
3.0 KiB
QML
108 lines
3.0 KiB
QML
// 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"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|