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:
parent
da6795f002
commit
e9ddd7d3b8
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user