1
0
mirror of https://github.com/Swordfish90/cool-retro-term.git synced 2025-01-18 20:20:45 +00:00

Split effects into static (cached) and dynamic computed at every frame.

This commit is contained in:
Filippo Scognamiglio 2018-12-03 13:32:08 +01:00
parent da6795f002
commit e9ddd7d3b8
2 changed files with 292 additions and 296 deletions

View File

@ -23,48 +23,48 @@ import QtGraphicalEffects 1.0
import "utils.js" as Utils
ShaderEffect {
Item {
property ShaderEffectSource source
property BurnInEffect burnInEffect
property ShaderEffectSource bloomSource
property ShaderEffectSource screenBuffer: frameBuffer
property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
property real bloom: appSettings.bloom * 2.5
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
property real chromaColor: appSettings.chromaColor
property real ambientLight: appSettings.ambientLight * 0.2
property size virtual_resolution
ShaderEffect {
id: dynamicShader
property ShaderEffectSource screenBuffer: frameBuffer
property ShaderEffectSource burnInSource: burnInEffect.source
property color fontColor: parent.fontColor
property color backgroundColor: parent.backgroundColor
property real screenCurvature: parent.screenCurvature
property real chromaColor: parent.chromaColor
property real ambientLight: parent.ambientLight
property real flickering: appSettings.flickering
property real horizontalSync: appSettings.horizontalSync * 0.5
property real glowingLine: appSettings.glowingLine * 0.2
property real burnIn: appSettings.burnIn
property real burnInLastUpdate: burnInEffect.lastUpdate
property real burnInTime: burnInEffect.burnInFadeTime
property real jitter: appSettings.jitter
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
property real staticNoise: appSettings.staticNoise
property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.totalFontScaling),
(height) / (noiseTexture.height * appSettings.windowScaling * appSettings.totalFontScaling))
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
property real glowingLine: appSettings.glowingLine * 0.2
property real chromaColor: appSettings.chromaColor;
property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling
property real flickering: appSettings.flickering
property real horizontalSync: appSettings.horizontalSync * 0.5
property int rasterization: appSettings.rasterization
property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
property real ambientLight: appSettings.ambientLight * 0.2
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
property size virtual_resolution
property size virtual_resolution: parent.virtual_resolution
property real time: timeManager.time
property ShaderEffectSource noiseSource: noiseShaderSource
@ -72,6 +72,7 @@ ShaderEffect {
// If something goes wrong activate the fallback version of the shader.
property bool fallBack: false
anchors.fill: parent
blending: false
//Smooth random texture used for flickering effect.
@ -108,9 +109,6 @@ ShaderEffect {
(!fallBack ? "
uniform sampler2D noiseSource;" : "") +
(!fallBack && rbgShift !== 0.0 ?"
varying lowp vec4 constantNoise;" : "") +
(!fallBack && flickering !== 0.0 ?"
varying lowp float brightness;
uniform lowp float flickering;" : "") +
@ -129,9 +127,6 @@ ShaderEffect {
"vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
: "") +
(!fallBack && rbgShift !== 0.0 ?"
constantNoise = initialNoiseTexel;" : "") +
(!fallBack && flickering !== 0.0 ? "
brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
: "") +
@ -157,7 +152,6 @@ ShaderEffect {
uniform highp vec4 fontColor;
uniform highp vec4 backgroundColor;
uniform lowp float screen_brightness;
uniform lowp float shadowLength;
uniform highp vec2 virtual_resolution;" +
@ -194,9 +188,6 @@ ShaderEffect {
varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
(!fallBack && rbgShift !== 0.0 ?"
varying lowp vec4 constantNoise;" : "") +
(glowingLine !== 0 ? "
float randomPass(vec2 coords){
return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
@ -251,8 +242,6 @@ ShaderEffect {
float distortionScale = step(0.0, randval) * randval * horizontalSync;
float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") +
(fallBack && rbgShift !== 0.0 ?"
lowp vec4 constantNoise = initialNoiseTexel;" : "") +
(staticNoise ? "
float noise = staticNoise;" : "") +
@ -297,7 +286,7 @@ ShaderEffect {
"txt_coords = mix(qt_TexCoord0, txt_coords, staticInScreen);
float inScreen2 = isInScreen(barrel(txt_coords, cc));
vec3 origTxtColor = texture2D(screenBuffer, txt_coords).rgb;
vec3 txt_color = origTxtColor * inScreen2 + backgroundColor.rgb * (1.0 - inScreen2);" +
vec3 txt_color = mix(backgroundColor.rgb, origTxtColor, inScreen2);" +
(burnIn !== 0 ? "
vec4 txt_blur = texture2D(burnInSource, staticCoords);
@ -318,10 +307,10 @@ ShaderEffect {
"float inShadow = 1.0 - min2(smoothstep(0.0, shadowLength, staticCoords) - smoothstep(1.0 - shadowLength, 1.0, staticCoords));
finalColor = mix(finalColor, vec3(0.0), 0.35 * inShadow);
finalColor = mix(finalColor, vec3(0.0), 0.45 * inShadow * inShadow);
finalColor = mix(origTxtColor, finalColor, staticInScreen);
gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
gl_FragColor = vec4(finalColor, qt_Opacity);" +
"}"
onStatusChanged: {
@ -334,9 +323,10 @@ ShaderEffect {
fallBack = true;
}
}
}
ShaderEffect {
id: frame
id: staticShader
width: parent.width * appSettings.windowScaling
height: parent.height * appSettings.windowScaling
@ -346,23 +336,24 @@ ShaderEffect {
property color fontColor: parent.fontColor
property color backgroundColor: parent.backgroundColor
property real bloom: parent.bloom
property real bloom: appSettings.bloom * 2.5
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
property real screenCurvature: parent.screenCurvature
property real chromaColor: appSettings.chromaColor;
property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling
property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling // TODO FILIPPO width here is wrong.
property int rasterization: appSettings.rasterization
property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
property real ambientLight: appSettings.ambientLight * 0.2
property real ambientLight: parent.ambientLight
property size virtual_resolution: parent.virtual_resolution
blending: false
visible: false
//Print the number with a reasonable precision for the shader.
function str(num){
@ -479,24 +470,31 @@ ShaderEffect {
finalColor += clamp(bloomColor * bloom * bloomAlpha, 0.0, 0.5);"
: "") +
"finalColor *= screen_brightness;" +
(screenCurvature !== 0 ? "
vec2 curvatureMask = step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords);
finalColor *= clamp(0.0, 1.0, curvatureMask.x + curvatureMask.y);"
:"") +
"gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
"gl_FragColor = vec4(finalColor, qt_Opacity);" +
"}"
NewTerminalFrame {
anchors.fill: parent
blending: true
}
onStatusChanged: {
// Print warning messages
if (log) console.log(log);
}
}
ShaderEffectSource {
id: frameBuffer
visible: false
sourceItem: frame
sourceItem: staticShader
hideSource: true
}
}

View File

@ -10,8 +10,6 @@ ShaderTerminal {
id: mainShader
opacity: appSettings.windowOpacity * 0.3 + 0.7
blending: false
source: terminal.mainSource
burnInEffect: terminal.burnInEffect
virtual_resolution: terminal.virtualResolution