diff --git a/app/qml/ApplicationSettings.qml b/app/qml/ApplicationSettings.qml
index f9c9f4d..f286184 100644
--- a/app/qml/ApplicationSettings.qml
+++ b/app/qml/ApplicationSettings.qml
@@ -48,7 +48,7 @@ QtObject{
property bool showTerminalSize: true
property real windowScaling: 1.0
- property real fps: 24
+ property real fps: 20
property bool verbose: false
property real bloomQuality: 0.5
@@ -73,7 +73,7 @@ QtObject{
property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
property real staticNoise: 0.12
- property real screenCurvature: 0.2
+ property real screenCurvature: 0.3
property real glowingLine: 0.2
property real burnIn: 0.25
property real bloom: 0.55
@@ -155,7 +155,7 @@ QtObject{
if (index === undefined) return;
fontManager.item.selectedFontIndex = index;
- fontManager.item.scaling = totalFontScaling * windowScaling;
+ fontManager.item.scaling = totalFontScaling;
var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize;
@@ -384,7 +384,7 @@ QtObject{
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.2483,
- "screenCurvature": 0.1997,
+ "screenCurvature": 0.3,
"staticNoise": 0.1198,
"windowOpacity": 1
}'
@@ -411,7 +411,7 @@ QtObject{
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.0,
- "screenCurvature": 0.1997,
+ "screenCurvature": 0.3,
"staticNoise": 0.1198,
"windowOpacity": 1
}'
@@ -438,7 +438,7 @@ QtObject{
"rasterization": 1,
"rbgShift": 0,
"saturationColor": 0.5,
- "screenCurvature": 0.2,
+ "screenCurvature": 0.3,
"staticNoise": 0.15,
"windowOpacity": 1
}'
@@ -466,7 +466,7 @@ QtObject{
"rbgShift": 0,
"saturationColor": 0,
"screenCurvature": 0,
- "staticNoise": 0.1545,
+ "staticNoise": 0.15,
"windowOpacity": 1
}'
builtin: true
@@ -492,7 +492,7 @@ QtObject{
"rasterization": 1,
"rbgShift": 0,
"saturationColor": 0,
- "screenCurvature": 0.8976,
+ "screenCurvature": 0.5,
"staticNoise": 0.099,
"windowOpacity": 1
}'
@@ -519,7 +519,7 @@ QtObject{
"rasterization": 1,
"rbgShift": 0.2969,
"saturationColor": 0,
- "screenCurvature": 0.3003,
+ "screenCurvature": 0.5,
"staticNoise": 0.2969,
"windowOpacity": 1
}'
@@ -546,7 +546,7 @@ QtObject{
"rasterization": 0,
"rbgShift": 0.3524,
"saturationColor": 0,
- "screenCurvature": 0.401,
+ "screenCurvature": 0.4,
"staticNoise": 0.0503,
"windowOpacity": 1
}'
@@ -573,7 +573,7 @@ QtObject{
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0,
- "screenCurvature": 0.1997,
+ "screenCurvature": 0.2,
"staticNoise": 0,
"windowOpacity": 1
}'
@@ -600,7 +600,7 @@ QtObject{
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.4983,
- "screenCurvature": 0.05,
+ "screenCurvature": 0,
"staticNoise": 0.0955,
"windowOpacity": 0.7
}'
diff --git a/app/qml/NewTerminalFrame.qml b/app/qml/NewTerminalFrame.qml
index 965dede..22ee386 100644
--- a/app/qml/NewTerminalFrame.qml
+++ b/app/qml/NewTerminalFrame.qml
@@ -13,8 +13,6 @@ ShaderEffect {
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
property real shadowLength: 0.5 * screenCurvature * Utils.lint(0.50, 1.5, _ambientLight)
- visible: screenCurvature != 0
-
fragmentShader: "
#ifdef GL_ES
precision mediump float;
@@ -53,7 +51,6 @@ ShaderEffect {
float alpha = 0.0;
float outShadowLength = shadowLength;
- float inShadowLength = 0.5 * shadowLength;
float outShadow = max2(1.0 - smoothstep(vec2(-outShadowLength), vec2(0.0), coords) + smoothstep(vec2(1.0), vec2(1.0 + outShadowLength), coords));
outShadow = clamp(0.0, 1.0, outShadow);
@@ -61,10 +58,6 @@ ShaderEffect {
alpha = sum2(1.0 - step(0.0, coords) + step(1.0, coords));
alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, sqrt(outShadow));
- float inShadow = min2(step(vec2(0.0), coords) - step(vec2(1.0), coords));
- inShadow -= min2(smoothstep(0.0, inShadowLength, coords) - smoothstep(1.0 - inShadowLength, 1.0, coords));
- alpha += 0.35 * inShadow;
-
gl_FragColor = vec4(color * alpha, alpha);
}
"
diff --git a/app/qml/SettingsEffectsTab.qml b/app/qml/SettingsEffectsTab.qml
index 643e27f..5ca521b 100644
--- a/app/qml/SettingsEffectsTab.qml
+++ b/app/qml/SettingsEffectsTab.qml
@@ -23,62 +23,92 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
Tab{
- GroupBox{
- title: qsTr("Effects")
+ ColumnLayout{
anchors.fill: parent
- ColumnLayout{
- anchors.fill: parent
- spacing: 2
- CheckableSlider{
- name: qsTr("Bloom")
- onNewValue: appSettings.bloom = newValue
- value: appSettings.bloom
+ spacing: 2
+
+ GroupBox{
+ title: qsTr("Effects")
+ Layout.fillWidth: true
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ CheckableSlider{
+ name: qsTr("Bloom")
+ onNewValue: appSettings.bloom = newValue
+ value: appSettings.bloom
+ }
+ CheckableSlider{
+ name: qsTr("BurnIn")
+ onNewValue: appSettings.burnIn = newValue
+ value: appSettings.burnIn
+ }
+ CheckableSlider{
+ name: qsTr("Static Noise")
+ onNewValue: appSettings.staticNoise = newValue
+ value: appSettings.staticNoise
+ }
+ CheckableSlider{
+ name: qsTr("Jitter")
+ onNewValue: appSettings.jitter = newValue
+ value: appSettings.jitter
+ }
+ CheckableSlider{
+ name: qsTr("Glow Line")
+ onNewValue: appSettings.glowingLine = newValue;
+ value: appSettings.glowingLine
+ }
+ CheckableSlider{
+ name: qsTr("Screen Curvature")
+ onNewValue: appSettings.screenCurvature = newValue;
+ value: appSettings.screenCurvature;
+ }
+ CheckableSlider{
+ name: qsTr("Ambient Light")
+ onNewValue: appSettings.ambientLight = newValue;
+ value: appSettings.ambientLight
+ enabled: appSettings.framesIndex !== 0
+ }
+ CheckableSlider{
+ name: qsTr("Flickering")
+ onNewValue: appSettings.flickering = newValue;
+ value: appSettings.flickering;
+ }
+ CheckableSlider{
+ name: qsTr("Horizontal Sync")
+ onNewValue: appSettings.horizontalSync = newValue;
+ value: appSettings.horizontalSync;
+ }
+ CheckableSlider{
+ name: qsTr("RGB Shift")
+ onNewValue: appSettings.rbgShift = newValue;
+ value: appSettings.rbgShift;
+ }
}
- CheckableSlider{
- name: qsTr("BurnIn")
- onNewValue: appSettings.burnIn = newValue
- value: appSettings.burnIn
- }
- CheckableSlider{
- name: qsTr("Static Noise")
- onNewValue: appSettings.staticNoise = newValue
- value: appSettings.staticNoise
- }
- CheckableSlider{
- name: qsTr("Jitter")
- onNewValue: appSettings.jitter = newValue
- value: appSettings.jitter
- }
- CheckableSlider{
- name: qsTr("Glow Line")
- onNewValue: appSettings.glowingLine = newValue;
- value: appSettings.glowingLine
- }
- CheckableSlider{
- name: qsTr("Screen Curvature")
- onNewValue: appSettings.screenCurvature = newValue;
- value: appSettings.screenCurvature;
- }
- CheckableSlider{
- name: qsTr("Ambient Light")
- onNewValue: appSettings.ambientLight = newValue;
- value: appSettings.ambientLight
- enabled: appSettings.framesIndex !== 0
- }
- CheckableSlider{
- name: qsTr("Flickering")
- onNewValue: appSettings.flickering = newValue;
- value: appSettings.flickering;
- }
- CheckableSlider{
- name: qsTr("Horizontal Sync")
- onNewValue: appSettings.horizontalSync = newValue;
- value: appSettings.horizontalSync;
- }
- CheckableSlider{
- name: qsTr("RGB Shift")
- onNewValue: appSettings.rbgShift = newValue;
- value: appSettings.rbgShift;
+ }
+
+ GroupBox{
+ title: qsTr("Lights")
+ Layout.fillWidth: true
+ GridLayout{
+ anchors.fill: parent
+ columns: 2
+ Label{ text: qsTr("Brightness") }
+ SimpleSlider{
+ onValueChanged: appSettings.brightness = value
+ value: appSettings.brightness
+ }
+ Label{ text: qsTr("Contrast") }
+ SimpleSlider{
+ onValueChanged: appSettings.contrast = value
+ value: appSettings.contrast
+ }
+ Label{ text: qsTr("Opacity") }
+ SimpleSlider{
+ onValueChanged: appSettings.windowOpacity = value
+ value: appSettings.windowOpacity
+ }
}
}
}
diff --git a/app/qml/SettingsScreenTab.qml b/app/qml/SettingsScreenTab.qml
deleted file mode 100644
index 683f09e..0000000
--- a/app/qml/SettingsScreenTab.qml
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2013 "Filippo Scognamiglio"
-* https://github.com/Swordfish90/cool-retro-term
-*
-* This file is part of cool-retro-term.
-*
-* cool-retro-term is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see .
-*******************************************************************************/
-
-import QtQuick 2.2
-import QtQuick.Controls 1.1
-import QtQuick.Layouts 1.1
-import QtQuick.Dialogs 1.1
-
-Tab{
- ColumnLayout{
- anchors.fill: parent
- GroupBox{
- title: qsTr("Rasterization Mode")
- Layout.fillWidth: true
- ComboBox {
- id: rasterizationBox
- property string selectedElement: model[currentIndex]
- anchors.fill: parent
- model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
- currentIndex: appSettings.rasterization
- onCurrentIndexChanged: {
- appSettings.rasterization = currentIndex
- }
- }
- }
- GroupBox{
- title: qsTr("Lights")
- Layout.fillWidth: true
- GridLayout{
- anchors.fill: parent
- columns: 2
- Label{ text: qsTr("Brightness") }
- SimpleSlider{
- onValueChanged: appSettings.brightness = value
- value: appSettings.brightness
- }
- Label{ text: qsTr("Contrast") }
- SimpleSlider{
- onValueChanged: appSettings.contrast = value
- value: appSettings.contrast
- }
- Label{ text: qsTr("Opacity") }
- SimpleSlider{
- onValueChanged: appSettings.windowOpacity = value
- value: appSettings.windowOpacity
- }
- }
- }
- }
-}
diff --git a/app/qml/SettingsTerminalTab.qml b/app/qml/SettingsTerminalTab.qml
index 141f066..8cefdb8 100644
--- a/app/qml/SettingsTerminalTab.qml
+++ b/app/qml/SettingsTerminalTab.qml
@@ -27,13 +27,26 @@ import "Components"
Tab{
ColumnLayout{
anchors.fill: parent
+
GroupBox{
- property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization]
- title: qsTr("Font " + "(" + rasterization + ")")
+ title: qsTr("Font")
Layout.fillWidth: true
GridLayout{
anchors.fill: parent
columns: 2
+ Label { text: qsTr("Rasterization") }
+ ComboBox {
+ id: rasterizationBox
+
+ property string selectedElement: model[currentIndex]
+
+ Layout.fillWidth: true
+ model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
+ currentIndex: appSettings.rasterization
+ onCurrentIndexChanged: {
+ appSettings.rasterization = currentIndex
+ }
+ }
Label{ text: qsTr("Name") }
ComboBox{
id: fontChanger
diff --git a/app/qml/SettingsWindow.qml b/app/qml/SettingsWindow.qml
index 247c2e5..7995ec3 100644
--- a/app/qml/SettingsWindow.qml
+++ b/app/qml/SettingsWindow.qml
@@ -28,7 +28,7 @@ Window {
id: settings_window
title: qsTr("Settings")
width: 580
- height: 400
+ height: 500
property int tabmargins: 15
@@ -42,12 +42,6 @@ Window {
anchors.fill: parent
anchors.margins: tabmargins
}
- SettingsScreenTab{
- id: screenTab
- title: qsTr("Screen")
- anchors.fill: parent
- anchors.margins: tabmargins
- }
SettingsTerminalTab{
id: terminalTab
title: qsTr("Terminal")
diff --git a/app/qml/ShaderTerminal.qml b/app/qml/ShaderTerminal.qml
index 067dfbe..3e53baa 100644
--- a/app/qml/ShaderTerminal.qml
+++ b/app/qml/ShaderTerminal.qml
@@ -23,330 +23,483 @@ import QtGraphicalEffects 1.0
import "utils.js" as Utils
-ShaderEffect {
+Item {
property ShaderEffectSource source
property BurnInEffect burnInEffect
property ShaderEffectSource bloomSource
property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
- property real bloom: appSettings.bloom * 2.5
-
- property ShaderEffectSource burnInSource: burnInEffect.source
- 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 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 chromaColor: appSettings.chromaColor
property real ambientLight: appSettings.ambientLight * 0.2
property size virtual_resolution
- property real time: timeManager.time
- property ShaderEffectSource noiseSource: noiseShaderSource
+ ShaderEffect {
+ id: dynamicShader
- // If something goes wrong activate the fallback version of the shader.
- property bool fallBack: false
+ property ShaderEffectSource screenBuffer: frameBuffer
+ property ShaderEffectSource burnInSource: burnInEffect.source
- blending: false
+ 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
- //Smooth random texture used for flickering effect.
- Image{
- id: noiseTexture
- source: "images/allNoise512.png"
- width: 512
- height: 512
- fillMode: Image.Tile
- visible: false
- }
- ShaderEffectSource{
- id: noiseShaderSource
- sourceItem: noiseTexture
- wrapMode: ShaderEffectSource.Repeat
- visible: false
- smooth: true
- }
+ 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))
- //Print the number with a reasonable precision for the shader.
- function str(num){
- return num.toFixed(8);
- }
+ property size virtual_resolution: parent.virtual_resolution
- vertexShader: "
- uniform highp mat4 qt_Matrix;
- uniform highp float time;
+ property real time: timeManager.time
+ property ShaderEffectSource noiseSource: noiseShaderSource
- attribute highp vec4 qt_Vertex;
- attribute highp vec2 qt_MultiTexCoord0;
+ // If something goes wrong activate the fallback version of the shader.
+ property bool fallBack: false
- varying highp vec2 qt_TexCoord0;" +
+ anchors.fill: parent
+ blending: false
- (!fallBack ? "
- uniform sampler2D noiseSource;" : "") +
+ //Smooth random texture used for flickering effect.
+ Image{
+ id: noiseTexture
+ source: "images/allNoise512.png"
+ width: 512
+ height: 512
+ fillMode: Image.Tile
+ visible: false
+ }
+ ShaderEffectSource{
+ id: noiseShaderSource
+ sourceItem: noiseTexture
+ wrapMode: ShaderEffectSource.Repeat
+ visible: false
+ smooth: true
+ }
- (!fallBack && rbgShift !== 0.0 ?"
- varying lowp vec4 constantNoise;" : "") +
+ //Print the number with a reasonable precision for the shader.
+ function str(num){
+ return num.toFixed(8);
+ }
- (!fallBack && flickering !== 0.0 ?"
- varying lowp float brightness;
- uniform lowp float flickering;" : "") +
+ vertexShader: "
+ uniform highp mat4 qt_Matrix;
+ uniform highp float time;
- (!fallBack && horizontalSync !== 0.0 ?"
- uniform lowp float horizontalSync;
- varying lowp float distortionScale;
- varying lowp float distortionFreq;" : "") +
+ attribute highp vec4 qt_Vertex;
+ attribute highp vec2 qt_MultiTexCoord0;
- "
- void main() {
- qt_TexCoord0 = qt_MultiTexCoord0;
- vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
+ varying highp vec2 qt_TexCoord0;" +
- (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0 || rbgShift !== 0) ?
- "vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
- : "") +
+ (!fallBack ? "
+ uniform sampler2D noiseSource;" : "") +
- (!fallBack && rbgShift !== 0.0 ?"
- constantNoise = initialNoiseTexel;" : "") +
+ (!fallBack && flickering !== 0.0 ?"
+ varying lowp float brightness;
+ uniform lowp float flickering;" : "") +
- (!fallBack && flickering !== 0.0 ? "
- brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
- : "") +
+ (!fallBack && horizontalSync !== 0.0 ?"
+ uniform lowp float horizontalSync;
+ varying lowp float distortionScale;
+ varying lowp float distortionFreq;" : "") +
- (!fallBack && horizontalSync !== 0.0 ? "
- float randval = horizontalSync - initialNoiseTexel.r;
- distortionScale = step(0.0, randval) * randval * horizontalSync;
- distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
- : "") +
+ "
+ void main() {
+ qt_TexCoord0 = qt_MultiTexCoord0;
+ vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
- "gl_Position = qt_Matrix * qt_Vertex;
- }"
+ (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
+ "vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
+ : "") +
- fragmentShader: "
- #ifdef GL_ES
- precision mediump float;
- #endif
+ (!fallBack && flickering !== 0.0 ? "
+ brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
+ : "") +
- uniform sampler2D source;
- uniform highp float qt_Opacity;
- uniform highp float time;
- varying highp vec2 qt_TexCoord0;
+ (!fallBack && horizontalSync !== 0.0 ? "
+ float randval = horizontalSync - initialNoiseTexel.r;
+ distortionScale = step(0.0, randval) * randval * horizontalSync;
+ distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
+ : "") +
- uniform highp vec4 fontColor;
- uniform highp vec4 backgroundColor;
- uniform lowp float screen_brightness;
+ "gl_Position = qt_Matrix * qt_Vertex;
+ }"
- uniform highp vec2 virtual_resolution;" +
+ fragmentShader: "
+ #ifdef GL_ES
+ precision mediump float;
+ #endif
- (bloom !== 0 ? "
- uniform highp sampler2D bloomSource;
- uniform lowp float bloom;" : "") +
- (burnIn !== 0 ? "
- uniform sampler2D burnInSource;
- uniform highp float burnInLastUpdate;
- uniform highp float burnInTime;" : "") +
- (staticNoise !== 0 ? "
- uniform highp float staticNoise;" : "") +
- (((staticNoise !== 0 || jitter !== 0 || rbgShift)
- ||(fallBack && (flickering || horizontalSync))) ? "
- uniform lowp sampler2D noiseSource;
- uniform highp vec2 scaleNoiseSize;" : "") +
- (screenCurvature !== 0 ? "
- uniform highp float screenCurvature;" : "") +
- (glowingLine !== 0 ? "
- uniform highp float glowingLine;" : "") +
- (chromaColor !== 0 ? "
- uniform lowp float chromaColor;" : "") +
- (jitter !== 0 ? "
- uniform lowp vec2 jitterDisplacement;" : "") +
- (rbgShift !== 0 ? "
- uniform lowp float rbgShift;" : "") +
- (ambientLight !== 0 ? "
- uniform lowp float ambientLight;" : "") +
+ uniform sampler2D screenBuffer;
+ uniform highp float qt_Opacity;
+ uniform highp float time;
+ varying highp vec2 qt_TexCoord0;
- (fallBack && horizontalSync !== 0 ? "
- uniform lowp float horizontalSync;" : "") +
- (fallBack && flickering !== 0.0 ?"
- uniform lowp float flickering;" : "") +
- (!fallBack && flickering !== 0 ? "
- varying lowp float brightness;"
- : "") +
- (!fallBack && horizontalSync !== 0 ? "
- varying lowp float distortionScale;
- varying lowp float distortionFreq;" : "") +
+ uniform highp vec4 fontColor;
+ uniform highp vec4 backgroundColor;
+ uniform lowp float shadowLength;
- (!fallBack && rbgShift !== 0.0 ?"
- varying lowp vec4 constantNoise;" : "") +
+ uniform highp vec2 virtual_resolution;" +
- (glowingLine !== 0 ? "
- float randomPass(vec2 coords){
- return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
- }" : "") +
+ (burnIn !== 0 ? "
+ uniform sampler2D burnInSource;
+ uniform highp float burnInLastUpdate;
+ uniform highp float burnInTime;" : "") +
+ (staticNoise !== 0 ? "
+ uniform highp float staticNoise;" : "") +
+ (((staticNoise !== 0 || jitter !== 0)
+ ||(fallBack && (flickering || horizontalSync))) ? "
+ uniform lowp sampler2D noiseSource;
+ uniform highp vec2 scaleNoiseSize;" : "") +
+ (screenCurvature !== 0 ? "
+ uniform highp float screenCurvature;" : "") +
+ (glowingLine !== 0 ? "
+ uniform highp float glowingLine;" : "") +
+ (chromaColor !== 0 ? "
+ uniform lowp float chromaColor;" : "") +
+ (jitter !== 0 ? "
+ uniform lowp vec2 jitterDisplacement;" : "") +
+ (ambientLight !== 0 ? "
+ uniform lowp float ambientLight;" : "") +
- "highp float getScanlineIntensity(vec2 coords) {
- float result = 1.0;" +
+ (fallBack && horizontalSync !== 0 ? "
+ uniform lowp float horizontalSync;" : "") +
+ (fallBack && flickering !== 0.0 ?"
+ uniform lowp float flickering;" : "") +
+ (!fallBack && flickering !== 0 ? "
+ varying lowp float brightness;"
+ : "") +
+ (!fallBack && horizontalSync !== 0 ? "
+ varying lowp float distortionScale;
+ varying lowp float distortionFreq;" : "") +
- (appSettings.rasterization != appSettings.no_rasterization ?
- "float val = 0.0;
- vec2 rasterizationCoords = fract(coords * virtual_resolution);
- val += smoothstep(0.0, 0.5, rasterizationCoords.y);
- val -= smoothstep(0.5, 1.0, rasterizationCoords.y);
- result *= mix(0.5, 1.0, val);" : "") +
- (appSettings.rasterization == appSettings.pixel_rasterization ?
- "val = 0.0;
- val += smoothstep(0.0, 0.5, rasterizationCoords.x);
- val -= smoothstep(0.5, 1.0, rasterizationCoords.x);
- result *= mix(0.5, 1.0, val);" : "") + "
+ (glowingLine !== 0 ? "
+ float randomPass(vec2 coords){
+ return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
+ }" : "") +
- return result;
- }
+ "float min2(vec2 v) {
+ return min(v.x, v.y);
+ }
- float min2(vec2 v) {
- return min(v.x, v.y);
- }
+ float rgb2grey(vec3 v){
+ return dot(v, vec3(0.21, 0.72, 0.04));
+ }
- float rgb2grey(vec3 v){
- return dot(v, vec3(0.21, 0.72, 0.04));
- }" +
+ float isInScreen(vec2 v) {
+ return min2(step(0.0, v) - step(1.0, v));
+ }
- "void main() {" +
- "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
- "float distance = length(cc);" +
+ vec2 barrel(vec2 v, vec2 cc) {" +
- //FallBack if there are problems
- (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0 || rbgShift !== 0.0) ?
- "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
- vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
- : "") +
- (fallBack && flickering !== 0.0 ? "
- float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
- : "") +
- (fallBack && horizontalSync !== 0.0 ? "
- float randval = horizontalSync - initialNoiseTexel.r;
- 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;" : "") +
+ (screenCurvature !== 0 ? "
+ float distortion = dot(cc, cc) * screenCurvature;
+ return (v - cc * (1.0 + distortion) * distortion);"
+ :
+ "return v;") +
+ "}" +
- (staticNoise ? "
- float noise = staticNoise;" : "") +
+ "vec3 convertWithChroma(vec3 inColor) {
+ vec3 outColor = inColor;" +
- (screenCurvature !== 0 ? "
- float distortion = dot(cc, cc) * screenCurvature;
- vec2 curvatureCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);
- vec2 staticCoords = - 2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;"
- :"
- vec2 staticCoords = qt_TexCoord0;") +
+ (chromaColor !== 0 ?
+ "outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
+ :
+ "outColor = fontColor.rgb * rgb2grey(inColor);") +
- "vec2 coords = staticCoords;" +
+ " return outColor;
+ }" +
- (horizontalSync !== 0 ? "
- float dst = sin((coords.y + time * 0.001) * distortionFreq);
- coords.x += dst * distortionScale;" +
- (staticNoise ? "
- noise += distortionScale * 7.0;" : "")
- : "") +
+ "void main() {" +
+ "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
+ "float distance = length(cc);" +
- (jitter !== 0 || staticNoise !== 0 || rbgShift !== 0 ?
- "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
- : "") +
+ //FallBack if there are problems
+ (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
+ "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
+ vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
+ : "") +
+ (fallBack && flickering !== 0.0 ? "
+ float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
+ : "") +
+ (fallBack && horizontalSync !== 0.0 ? "
+ float randval = horizontalSync - initialNoiseTexel.r;
+ float distortionScale = step(0.0, randval) * randval * horizontalSync;
+ float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
+ : "") +
- (jitter !== 0 ? "
- vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
- vec2 txt_coords = coords + offset * jitterDisplacement;"
- : "vec2 txt_coords = coords;") +
+ (staticNoise ? "
+ float noise = staticNoise;" : "") +
- "float color = 0.0001;" +
+ (screenCurvature !== 0 ? "
+ vec2 curvatureCoords = barrel(qt_TexCoord0, cc);
+ float staticInScreen = min2(step(0.0, curvatureCoords) - step(1.0, curvatureCoords));
+ vec2 staticCoords = curvatureCoords;"
+ :"
+ vec2 staticCoords = qt_TexCoord0;
+ float staticInScreen = 1.0;") +
- (staticNoise !== 0 ? "
- float noiseVal = noiseTexel.a;
- color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
+ "vec2 coords = qt_TexCoord0;" +
- (glowingLine !== 0 ? "
- color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
+ (horizontalSync !== 0 ? "
+ float dst = sin((coords.y + time * 0.001) * distortionFreq);
+ coords.x += dst * distortionScale;" +
- "vec3 txt_color = texture2D(source, txt_coords).rgb;" +
+ (staticNoise ? "
+ noise += distortionScale * 7.0;" : "")
- (rbgShift !== 0 ? "
- vec2 displacement = vec2(12.0, 0.0) * rbgShift * (0.6 * constantNoise.r + 0.4);
- vec3 rightColor = texture2D(source, txt_coords + displacement).rgb;
- vec3 leftColor = texture2D(source, txt_coords - displacement).rgb;
- txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
- txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
- txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
- " : "") +
+ : "") +
- (burnIn !== 0 ? "
- vec4 txt_blur = texture2D(burnInSource, staticCoords);
- float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
- txt_color = max(txt_color, 0.5 * (txt_blur.rgb - vec3(blurDecay)));"
- : "") +
+ (jitter !== 0 || staticNoise !== 0 ?
+ "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
+ : "") +
- "txt_color *= getScanlineIntensity(coords);" +
+ (jitter !== 0 ? "
+ vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
+ vec2 txt_coords = coords + offset * jitterDisplacement;"
+ : "vec2 txt_coords = coords;") +
- "txt_color += vec3(color);" +
- "float greyscale_color = rgb2grey(txt_color);" +
+ "float color = 0.0001;" +
- (chromaColor !== 0 ?
- "vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
- vec3 finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color);"
- :
- "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
+ (staticNoise !== 0 ? "
+ float noiseVal = noiseTexel.a;
+ color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
- (bloom !== 0 ?
- "vec4 bloomFullColor = texture2D(bloomSource, coords);
- vec3 bloomColor = bloomFullColor.rgb;
- float bloomAlpha = bloomFullColor.a;" +
- (chromaColor !== 0 ?
- "bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);"
- :
- "bloomColor = fontColor.rgb * rgb2grey(bloomColor);") +
- "finalColor += clamp(bloomColor * bloom * bloomAlpha, 0.0, 0.5);"
- : "") +
+ (glowingLine !== 0 ? "
+ color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
- (screenCurvature !== 0 ? "
- vec2 curvatureMask = step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords);
- finalColor *= clamp(0.0, 1.0, curvatureMask.x + curvatureMask.y);"
- :"") +
+ "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 = mix(backgroundColor.rgb, origTxtColor, inScreen2);" +
- (flickering !== 0 ? "
- finalColor *= brightness;" : "") +
+ (burnIn !== 0 ? "
+ vec4 txt_blur = texture2D(burnInSource, staticCoords);
+ float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
+ vec3 burnInColor = 0.65 * (txt_blur.rgb - vec3(blurDecay));
+ txt_color = max(txt_color, convertWithChroma(burnInColor));"
+ : "") +
- (ambientLight !== 0 ? "
- finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
+ "txt_color += fontColor.rgb * vec3(color);" +
+
+ "vec3 finalColor = txt_color;" +
+
+ (flickering !== 0 ? "
+ finalColor *= brightness;" : "") +
+
+ (ambientLight !== 0 ? "
+ finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
- "gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
- "}"
+ "float inShadow = 1.0 - min2(smoothstep(0.0, shadowLength, staticCoords) - smoothstep(1.0 - shadowLength, 1.0, staticCoords));
+ inShadow = pow(inShadow, 100.0) + 0.35 * inShadow * inShadow; // Inner shadow and antialiasing when screen background is bright.
+ finalColor = mix(finalColor, vec3(0.0), inShadow);
- onStatusChanged: {
- // Print warning messages
- if (log)
- console.log(log);
+ finalColor = mix(origTxtColor, finalColor, staticInScreen);
+ gl_FragColor = vec4(finalColor, qt_Opacity);" +
+ "}"
- // Activate fallback mode
- if (status == ShaderEffect.Error) {
- fallBack = true;
+ onStatusChanged: {
+ // Print warning messages
+ if (log)
+ console.log(log);
+
+ // Activate fallback mode
+ if (status == ShaderEffect.Error) {
+ fallBack = true;
+ }
+ }
+ }
+
+ ShaderEffect {
+ id: staticShader
+
+ width: parent.width * appSettings.windowScaling
+ height: parent.height * appSettings.windowScaling
+
+ property ShaderEffectSource source: parent.source
+ property ShaderEffectSource bloomSource: parent.bloomSource
+
+ property color fontColor: parent.fontColor
+ property color backgroundColor: parent.backgroundColor
+ property real bloom: appSettings.bloom * 2.5
+
+ property real screenCurvature: parent.screenCurvature
+
+ property real chromaColor: appSettings.chromaColor;
+
+ 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: 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){
+ return num.toFixed(8);
+ }
+
+ fragmentShader: "
+ #ifdef GL_ES
+ precision mediump float;
+ #endif
+
+ uniform sampler2D source;
+ uniform highp float qt_Opacity;
+ varying highp vec2 qt_TexCoord0;
+
+ uniform highp vec4 fontColor;
+ uniform highp vec4 backgroundColor;
+ uniform lowp float screen_brightness;
+
+ uniform highp vec2 virtual_resolution;" +
+
+ (bloom !== 0 ? "
+ uniform highp sampler2D bloomSource;
+ uniform lowp float bloom;" : "") +
+
+ (screenCurvature !== 0 ? "
+ uniform highp float screenCurvature;" : "") +
+
+ (chromaColor !== 0 ? "
+ uniform lowp float chromaColor;" : "") +
+
+ (rbgShift !== 0 ? "
+ uniform lowp float rbgShift;" : "") +
+
+ (ambientLight !== 0 ? "
+ uniform lowp float ambientLight;" : "") +
+
+ "highp float getScanlineIntensity(vec2 coords) {
+ float result = 1.0;" +
+
+ (appSettings.rasterization != appSettings.no_rasterization ?
+ "float val = 0.0;
+ vec2 rasterizationCoords = fract(coords * virtual_resolution);
+ val += smoothstep(0.0, 0.5, rasterizationCoords.y);
+ val -= smoothstep(0.5, 1.0, rasterizationCoords.y);
+ result *= mix(0.5, 1.0, val);" : "") +
+
+ (appSettings.rasterization == appSettings.pixel_rasterization ?
+ "val = 0.0;
+ val += smoothstep(0.0, 0.5, rasterizationCoords.x);
+ val -= smoothstep(0.5, 1.0, rasterizationCoords.x);
+ result *= mix(0.5, 1.0, val);" : "") + "
+
+ return result;
+ }
+
+ float min2(vec2 v) {
+ return min(v.x, v.y);
+ }
+
+ float rgb2grey(vec3 v){
+ return dot(v, vec3(0.21, 0.72, 0.04));
+ }" +
+
+ "vec3 convertWithChroma(vec3 inColor) {
+ vec3 outColor = inColor;" +
+
+ (chromaColor !== 0 ?
+ "outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
+ :
+ "outColor = fontColor.rgb * rgb2grey(inColor);") +
+
+ " return outColor;
+ }" +
+
+
+ "void main() {" +
+ "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
+
+ (screenCurvature !== 0 ? "
+ float distortion = dot(cc, cc) * screenCurvature;
+ vec2 curvatureCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);
+ vec2 txt_coords = - 2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;"
+ :"
+ vec2 txt_coords = qt_TexCoord0;") +
+
+ "vec3 txt_color = texture2D(source, txt_coords).rgb;" +
+
+ (rbgShift !== 0 ? "
+ vec2 displacement = vec2(12.0, 0.0) * rbgShift;
+ vec3 rightColor = texture2D(source, txt_coords + displacement).rgb;
+ vec3 leftColor = texture2D(source, txt_coords - displacement).rgb;
+ txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
+ txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
+ txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
+ " : "") +
+
+ "txt_color *= getScanlineIntensity(txt_coords);" +
+
+ "txt_color += vec3(0.0001);" +
+ "float greyscale_color = rgb2grey(txt_color);" +
+
+ (chromaColor !== 0 ?
+ "vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
+ vec3 finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color);"
+ :
+ "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
+
+ (bloom !== 0 ?
+ "vec4 bloomFullColor = texture2D(bloomSource, txt_coords);
+ vec3 bloomColor = bloomFullColor.rgb;
+ float bloomAlpha = bloomFullColor.a;
+ bloomColor = convertWithChroma(bloomColor);
+ 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, qt_Opacity);" +
+ "}"
+
+ Loader {
+ anchors.fill: parent
+ active: screenCurvature !== 0
+
+ sourceComponent: NewTerminalFrame {
+ blending: true
+ }
+ }
+
+ onStatusChanged: {
+ // Print warning messages
+ if (log) console.log(log);
}
}
+
+ ShaderEffectSource {
+ id: frameBuffer
+ visible: false
+ sourceItem: staticShader
+ hideSource: true
+ }
}
diff --git a/app/qml/TerminalContainer.qml b/app/qml/TerminalContainer.qml
index 430edf4..ea390ab 100644
--- a/app/qml/TerminalContainer.qml
+++ b/app/qml/TerminalContainer.qml
@@ -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
@@ -36,7 +34,7 @@ ShaderTerminal {
height: parent.height * appSettings.bloomQuality
sourceComponent: FastBlur{
- radius: Utils.lint(16, 64, appSettings.bloomQuality * appSettings.windowScaling);
+ radius: Utils.lint(16, 64, appSettings.bloomQuality);
source: terminal.mainSource
transparentBorder: true
}
@@ -56,11 +54,11 @@ ShaderTerminal {
bloomSource: bloomSourceLoader.item
- NewTerminalFrame {
- id: terminalFrame
- anchors.fill: parent
- blending: true
- }
+// NewTerminalFrame {
+// id: terminalFrame
+// anchors.fill: parent
+// blending: true
+// }
// This shader might be useful in the future. Since we used it only for a couple
// of calculations is probably best to move those in the main shader. If in the future
diff --git a/app/qml/main.qml b/app/qml/main.qml
index 5165c25..99d8522 100644
--- a/app/qml/main.qml
+++ b/app/qml/main.qml
@@ -137,13 +137,8 @@ ApplicationWindow{
TerminalContainer{
id: terminalContainer
y: appSettings.showMenubar ? 0 : -2 // Workaroud to hide the margin in the menubar.
- width: parent.width * appSettings.windowScaling
- height: (parent.height + Math.abs(y)) * appSettings.windowScaling
-
- transform: Scale {
- xScale: 1 / appSettings.windowScaling
- yScale: 1 / appSettings.windowScaling
- }
+ width: parent.width
+ height: (parent.height + Math.abs(y))
}
SettingsWindow{
id: settingswindow
diff --git a/app/qml/resources.qrc b/app/qml/resources.qrc
index b776365..6132447 100644
--- a/app/qml/resources.qrc
+++ b/app/qml/resources.qrc
@@ -32,7 +32,6 @@
fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf
fonts/modern-hermit/Hermit-medium.otf
fonts/modern-inconsolata/Inconsolata.otf
- SettingsScreenTab.qml
fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf
../icons/32x32/cool-retro-term.png
Components/SizedLabel.qml