Compare commits
12 Commits
framebuffe
...
1.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
863c1ac27a | ||
|
|
c85eba617c | ||
|
|
dcb7b7c309 | ||
|
|
3cee186663 | ||
|
|
06afe507f6 | ||
|
|
4268d4d770 | ||
|
|
d61dae5ab4 | ||
|
|
b5f39c1d53 | ||
|
|
767a61b86e | ||
|
|
0d3c0a2233 | ||
|
|
0431103a1d | ||
|
|
633e4e642c |
@@ -88,6 +88,9 @@ QtObject{
|
||||
|
||||
property real rbgShift: 0.0
|
||||
|
||||
property real _margin: 0.5
|
||||
property real margin: Utils.lint(1.0, 20.0, _margin)
|
||||
|
||||
readonly property int no_rasterization: 0
|
||||
readonly property int scanline_rasterization: 1
|
||||
readonly property int pixel_rasterization: 2
|
||||
@@ -225,7 +228,8 @@ QtObject{
|
||||
ambientLight: ambientLight,
|
||||
windowOpacity: windowOpacity,
|
||||
fontName: fontNames[rasterization],
|
||||
fontWidth: fontWidth
|
||||
fontWidth: fontWidth,
|
||||
margin: _margin
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
@@ -317,6 +321,8 @@ QtObject{
|
||||
fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
|
||||
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
|
||||
|
||||
_margin = settings.margin !== undefined ? settings.margin : _margin;
|
||||
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
@@ -386,7 +392,8 @@ QtObject{
|
||||
"saturationColor": 0.2483,
|
||||
"screenCurvature": 0.3,
|
||||
"staticNoise": 0.1198,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -413,7 +420,8 @@ QtObject{
|
||||
"saturationColor": 0.0,
|
||||
"screenCurvature": 0.3,
|
||||
"staticNoise": 0.1198,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -440,7 +448,8 @@ QtObject{
|
||||
"saturationColor": 0.5,
|
||||
"screenCurvature": 0.3,
|
||||
"staticNoise": 0.15,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -467,7 +476,8 @@ QtObject{
|
||||
"saturationColor": 0,
|
||||
"screenCurvature": 0,
|
||||
"staticNoise": 0.15,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -494,7 +504,8 @@ QtObject{
|
||||
"saturationColor": 0,
|
||||
"screenCurvature": 0.5,
|
||||
"staticNoise": 0.099,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -521,7 +532,8 @@ QtObject{
|
||||
"saturationColor": 0,
|
||||
"screenCurvature": 0.5,
|
||||
"staticNoise": 0.2969,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -548,7 +560,8 @@ QtObject{
|
||||
"saturationColor": 0,
|
||||
"screenCurvature": 0.4,
|
||||
"staticNoise": 0.0503,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -575,7 +588,8 @@ QtObject{
|
||||
"saturationColor": 0,
|
||||
"screenCurvature": 0.2,
|
||||
"staticNoise": 0,
|
||||
"windowOpacity": 1
|
||||
"windowOpacity": 1,
|
||||
"margin": 0.5
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
@@ -602,7 +616,8 @@ QtObject{
|
||||
"saturationColor": 0.4983,
|
||||
"screenCurvature": 0,
|
||||
"staticNoise": 0.0955,
|
||||
"windowOpacity": 0.7
|
||||
"windowOpacity": 0.7,
|
||||
"margin": 0.1
|
||||
}'
|
||||
builtin: true
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ Loader {
|
||||
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||
|
||||
width: appSettings.lowResolutionFont
|
||||
? kterminal.width * Math.max(1, burnInScaling)
|
||||
: kterminal.width * scaleTexture * appSettings.burnInQuality
|
||||
? kterminal.totalWidth * Math.max(1, burnInScaling)
|
||||
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality
|
||||
|
||||
height: appSettings.lowResolutionFont
|
||||
? kterminal.height * Math.max(1, burnInScaling)
|
||||
: kterminal.height * scaleTexture * appSettings.burnInQuality
|
||||
? kterminal.totalHeight * Math.max(1, burnInScaling)
|
||||
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality
|
||||
|
||||
ShaderEffectSource {
|
||||
id: burnInEffectSource
|
||||
@@ -52,13 +52,10 @@ Loader {
|
||||
live: false
|
||||
recursive: true
|
||||
hideSource: true
|
||||
wrapMode: kterminalSource.wrapMode
|
||||
wrapMode: ShaderEffectSource.ClampToEdge
|
||||
|
||||
format: ShaderEffectSource.RGBA
|
||||
|
||||
// Enabling smooth with a low burnInQuality causes bad artifacts because the FBO
|
||||
// has different values when it's read back. This lowers the quality, but makes it more consistent.
|
||||
smooth: appSettings.burnInQuality === 1.0
|
||||
smooth: true
|
||||
|
||||
visible: false
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import QtQuick 2.0
|
||||
import "utils.js" as Utils
|
||||
|
||||
ShaderEffect {
|
||||
property color _staticFrameColor: "#dedede"
|
||||
property color _staticFrameColor: "#ffffff"
|
||||
property color _backgroundColor: appSettings.backgroundColor
|
||||
property color _fontColor: appSettings.fontColor
|
||||
property color _lightColor: Utils.mix(_fontColor, _backgroundColor, 0.2)
|
||||
@@ -13,6 +13,8 @@ ShaderEffect {
|
||||
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
|
||||
property real shadowLength: 0.5 * screenCurvature * Utils.lint(0.50, 1.5, _ambientLight)
|
||||
|
||||
property size aadelta: Qt.size(1.0 / width, 1.0 / height)
|
||||
|
||||
fragmentShader: "
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
@@ -22,6 +24,7 @@ ShaderEffect {
|
||||
uniform lowp float shadowLength;
|
||||
uniform highp float qt_Opacity;
|
||||
uniform lowp vec4 frameColor;
|
||||
uniform mediump vec2 aadelta;
|
||||
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
@@ -39,6 +42,10 @@ ShaderEffect {
|
||||
return min(v.x, v.y);
|
||||
}
|
||||
|
||||
float prod2(vec2 v) {
|
||||
return v.x * v.y;
|
||||
}
|
||||
|
||||
float sum2(vec2 v) {
|
||||
return v.x + v.y;
|
||||
}
|
||||
@@ -51,12 +58,17 @@ ShaderEffect {
|
||||
float alpha = 0.0;
|
||||
|
||||
float outShadowLength = shadowLength;
|
||||
float inShadowLength = shadowLength * 0.5;
|
||||
|
||||
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);
|
||||
color += frameColor.rgb * sqrt(outShadow);
|
||||
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));
|
||||
outShadow = clamp(0.0, 1.0, sqrt(outShadow));
|
||||
color += frameColor.rgb * outShadow;
|
||||
alpha = sum2(1.0 - smoothstep(vec2(0.0), aadelta, coords) + smoothstep(vec2(1.0) - aadelta, vec2(1.0), coords));
|
||||
alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, outShadow);
|
||||
|
||||
float inShadow = 1.0 - prod2(smoothstep(0.0, inShadowLength, coords) - smoothstep(1.0 - inShadowLength, 1.0, coords));
|
||||
inShadow = 0.5 * inShadow * inShadow;
|
||||
alpha = max(alpha, inShadow);
|
||||
|
||||
gl_FragColor = vec4(color * alpha, alpha);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import "utils.js" as Utils
|
||||
Item{
|
||||
id: terminalContainer
|
||||
|
||||
property size virtualResolution: Qt.size(kterminal.width, kterminal.height)
|
||||
property size virtualResolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight)
|
||||
property alias mainTerminal: kterminal
|
||||
|
||||
property ShaderEffectSource mainSource: kterminalSource
|
||||
@@ -69,8 +69,13 @@ Item{
|
||||
|
||||
QMLTermWidget {
|
||||
id: kterminal
|
||||
width: Math.floor(parent.width / (screenScaling * fontWidth))
|
||||
height: Math.floor(parent.height / screenScaling)
|
||||
|
||||
property int margin: appSettings.margin / screenScaling
|
||||
property int totalWidth: Math.floor(parent.width / (screenScaling * fontWidth))
|
||||
property int totalHeight: Math.floor(parent.height / screenScaling)
|
||||
|
||||
width: totalWidth - 2 * margin
|
||||
height: totalHeight - 2 * margin
|
||||
|
||||
colorScheme: "cool-retro-term"
|
||||
|
||||
@@ -167,6 +172,8 @@ Item{
|
||||
property alias contextmenu: menuLoader.item
|
||||
|
||||
MouseArea{
|
||||
property real margin: appSettings.margin
|
||||
|
||||
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
|
||||
anchors.fill: parent
|
||||
cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
|
||||
@@ -200,14 +207,14 @@ Item{
|
||||
}
|
||||
|
||||
function correctDistortion(x, y){
|
||||
x = x / width;
|
||||
y = y / height;
|
||||
x = (x - margin) / width;
|
||||
y = (y - margin) / height;
|
||||
|
||||
var cc = Qt.size(0.5 - x, 0.5 - y);
|
||||
var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature * appSettings.screenCurvatureSize;
|
||||
|
||||
return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width,
|
||||
(y - cc.height * (1+distortion) * distortion) * kterminal.height)
|
||||
return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.totalWidth,
|
||||
(y - cc.height * (1+distortion) * distortion) * kterminal.totalHeight)
|
||||
}
|
||||
}
|
||||
ShaderEffectSource{
|
||||
@@ -216,7 +223,8 @@ Item{
|
||||
hideSource: true
|
||||
wrapMode: ShaderEffectSource.Repeat
|
||||
visible: false
|
||||
textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
|
||||
textureSize: Qt.size(kterminal.totalWidth * scaleTexture, kterminal.totalHeight * scaleTexture)
|
||||
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
|
||||
}
|
||||
|
||||
BurnInEffect {
|
||||
|
||||
@@ -27,13 +27,48 @@ import "Components"
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("General")
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Command")
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: useCustomCommand
|
||||
text: qsTr("Use custom command instead of shell at startup")
|
||||
checked: appSettings.useCustomCommand
|
||||
onCheckedChanged: appSettings.useCustomCommand = checked
|
||||
}
|
||||
// Workaround for QTBUG-31627 for pre 5.3.0
|
||||
Binding{
|
||||
target: useCustomCommand
|
||||
property: "checked"
|
||||
value: appSettings.useCustomCommand
|
||||
}
|
||||
TextField{
|
||||
id: customCommand
|
||||
Layout.fillWidth: true
|
||||
text: appSettings.customCommand
|
||||
enabled: useCustomCommand.checked
|
||||
onEditingFinished: appSettings.customCommand = text
|
||||
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Performance")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
rows: 2
|
||||
columns: 3
|
||||
|
||||
Label{text: qsTr("Effects FPS")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
@@ -52,6 +87,7 @@ Tab{
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
|
||||
Label{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
@@ -67,14 +103,7 @@ Tab{
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Bloom")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
id: bloomQualityContainer
|
||||
anchors.fill: parent
|
||||
|
||||
Label{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
@@ -89,14 +118,6 @@ Tab{
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("BurnIn")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
id: blurQualityContainer
|
||||
anchors.fill: parent
|
||||
|
||||
Label{text: qsTr("BurnIn Quality")}
|
||||
Slider{
|
||||
@@ -87,29 +87,5 @@ Tab{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ Tab{
|
||||
Layout.fillWidth: false
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("New")
|
||||
text: qsTr("Save")
|
||||
onClicked: {
|
||||
insertname.profileName = "";
|
||||
insertname.show()
|
||||
@@ -164,34 +164,30 @@ Tab{
|
||||
}
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Screen")
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Command")
|
||||
ColumnLayout {
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: useCustomCommand
|
||||
text: qsTr("Use custom command instead of shell at startup")
|
||||
checked: appSettings.useCustomCommand
|
||||
onCheckedChanged: appSettings.useCustomCommand = checked
|
||||
columns: 2
|
||||
Label{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.brightness = value
|
||||
value: appSettings.brightness
|
||||
}
|
||||
// Workaround for QTBUG-31627 for pre 5.3.0
|
||||
Binding{
|
||||
target: useCustomCommand
|
||||
property: "checked"
|
||||
value: appSettings.useCustomCommand
|
||||
Label{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.contrast = value
|
||||
value: appSettings.contrast
|
||||
}
|
||||
TextField{
|
||||
id: customCommand
|
||||
Layout.fillWidth: true
|
||||
text: appSettings.customCommand
|
||||
enabled: useCustomCommand.checked
|
||||
onEditingFinished: appSettings.customCommand = text
|
||||
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
Label{ text: qsTr("Margin") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings._margin = value
|
||||
value: appSettings._margin
|
||||
}
|
||||
Label{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.windowOpacity = value
|
||||
value: appSettings.windowOpacity
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ Window {
|
||||
id: settings_window
|
||||
title: qsTr("Settings")
|
||||
width: 580
|
||||
height: 500
|
||||
height: 400
|
||||
|
||||
property int tabmargins: 15
|
||||
|
||||
@@ -36,27 +36,27 @@ Window {
|
||||
id: tabView
|
||||
anchors.fill: parent
|
||||
anchors.margins: 10
|
||||
SettingsGeneralTab{
|
||||
SettingsGeneralTab {
|
||||
id: generalTab
|
||||
title: qsTr("General")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
SettingsTerminalTab{
|
||||
SettingsTerminalTab {
|
||||
id: terminalTab
|
||||
title: qsTr("Terminal")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
SettingsEffectsTab{
|
||||
SettingsEffectsTab {
|
||||
id: effectsTab
|
||||
title: qsTr("Effects")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
SettingsPerformanceTab{
|
||||
SettingsAdvancedTab {
|
||||
id: performanceTab
|
||||
title: qsTr("Performance")
|
||||
title: qsTr("Advanced")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ Item {
|
||||
|
||||
property ShaderEffectSource screenBuffer: frameBuffer
|
||||
property ShaderEffectSource burnInSource: burnInEffect.source
|
||||
property ShaderEffectSource frameSource: terminalFrameLoader.item
|
||||
|
||||
property color fontColor: parent.fontColor
|
||||
property color backgroundColor: parent.backgroundColor
|
||||
@@ -52,7 +53,8 @@ Item {
|
||||
property real ambientLight: parent.ambientLight
|
||||
|
||||
property real flickering: appSettings.flickering
|
||||
property real horizontalSync: appSettings.horizontalSync * 0.5
|
||||
property real horizontalSync: appSettings.horizontalSync
|
||||
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
||||
property real glowingLine: appSettings.glowingLine * 0.2
|
||||
property real burnIn: appSettings.burnIn
|
||||
property real burnInLastUpdate: burnInEffect.lastUpdate
|
||||
@@ -114,7 +116,7 @@ Item {
|
||||
uniform lowp float flickering;" : "") +
|
||||
|
||||
(!fallBack && horizontalSync !== 0.0 ?"
|
||||
uniform lowp float horizontalSync;
|
||||
uniform lowp float horizontalSyncStrength;
|
||||
varying lowp float distortionScale;
|
||||
varying lowp float distortionFreq;" : "") +
|
||||
|
||||
@@ -132,8 +134,8 @@ Item {
|
||||
: "") +
|
||||
|
||||
(!fallBack && horizontalSync !== 0.0 ? "
|
||||
float randval = horizontalSync - initialNoiseTexel.r;
|
||||
distortionScale = step(0.0, randval) * randval * horizontalSync;
|
||||
float randval = horizontalSyncStrength - initialNoiseTexel.r;
|
||||
distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
|
||||
distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
|
||||
: "") +
|
||||
|
||||
@@ -167,7 +169,8 @@ Item {
|
||||
uniform lowp sampler2D noiseSource;
|
||||
uniform highp vec2 scaleNoiseSize;" : "") +
|
||||
(screenCurvature !== 0 ? "
|
||||
uniform highp float screenCurvature;" : "") +
|
||||
uniform highp float screenCurvature;
|
||||
uniform lowp sampler2D frameSource;" : "") +
|
||||
(glowingLine !== 0 ? "
|
||||
uniform highp float glowingLine;" : "") +
|
||||
(chromaColor !== 0 ? "
|
||||
@@ -178,7 +181,7 @@ Item {
|
||||
uniform lowp float ambientLight;" : "") +
|
||||
|
||||
(fallBack && horizontalSync !== 0 ? "
|
||||
uniform lowp float horizontalSync;" : "") +
|
||||
uniform lowp float horizontalSyncStrength;" : "") +
|
||||
(fallBack && flickering !== 0.0 ?"
|
||||
uniform lowp float flickering;" : "") +
|
||||
(!fallBack && flickering !== 0 ? "
|
||||
@@ -238,8 +241,8 @@ Item {
|
||||
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 randval = horizontalSyncStrength - initialNoiseTexel.r;
|
||||
float distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
|
||||
float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
|
||||
: "") +
|
||||
|
||||
@@ -247,12 +250,9 @@ Item {
|
||||
float noise = staticNoise;" : "") +
|
||||
|
||||
(screenCurvature !== 0 ? "
|
||||
vec2 curvatureCoords = barrel(qt_TexCoord0, cc);
|
||||
float staticInScreen = min2(step(0.0, curvatureCoords) - step(1.0, curvatureCoords));
|
||||
vec2 staticCoords = curvatureCoords;"
|
||||
vec2 staticCoords = barrel(qt_TexCoord0, cc);"
|
||||
:"
|
||||
vec2 staticCoords = qt_TexCoord0;
|
||||
float staticInScreen = 1.0;") +
|
||||
vec2 staticCoords = qt_TexCoord0;") +
|
||||
|
||||
"vec2 coords = qt_TexCoord0;" +
|
||||
|
||||
@@ -283,10 +283,7 @@ Item {
|
||||
(glowingLine !== 0 ? "
|
||||
color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
|
||||
|
||||
"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);" +
|
||||
"vec3 txt_color = texture2D(screenBuffer, txt_coords).rgb;" +
|
||||
|
||||
(burnIn !== 0 ? "
|
||||
vec4 txt_blur = texture2D(burnInSource, staticCoords);
|
||||
@@ -305,13 +302,12 @@ Item {
|
||||
(ambientLight !== 0 ? "
|
||||
finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
|
||||
|
||||
(screenCurvature !== 0 ?
|
||||
"vec4 frameColor = texture2D(frameSource, qt_TexCoord0);
|
||||
finalColor = mix(finalColor, frameColor.rgb, frameColor.a);"
|
||||
: "") +
|
||||
|
||||
"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);
|
||||
|
||||
finalColor = mix(origTxtColor, finalColor, staticInScreen);
|
||||
gl_FragColor = vec4(finalColor, qt_Opacity);" +
|
||||
"gl_FragColor = vec4(finalColor, qt_Opacity);" +
|
||||
"}"
|
||||
|
||||
onStatusChanged: {
|
||||
@@ -326,6 +322,29 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: terminalFrameLoader
|
||||
|
||||
active: screenCurvature !== 0
|
||||
|
||||
width: staticShader.width
|
||||
height: staticShader.height
|
||||
|
||||
sourceComponent: ShaderEffectSource {
|
||||
|
||||
sourceItem: terminalFrame
|
||||
hideSource: true
|
||||
visible: false
|
||||
format: ShaderEffectSource.RGBA
|
||||
|
||||
NewTerminalFrame {
|
||||
id: terminalFrame
|
||||
blending: false
|
||||
anchors.fill: parent
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ShaderEffect {
|
||||
id: staticShader
|
||||
|
||||
@@ -415,6 +434,10 @@ Item {
|
||||
return min(v.x, v.y);
|
||||
}
|
||||
|
||||
float sum2(vec2 v) {
|
||||
return v.x + v.y;
|
||||
}
|
||||
|
||||
float rgb2grey(vec3 v){
|
||||
return dot(v, vec3(0.21, 0.72, 0.04));
|
||||
}" +
|
||||
@@ -457,11 +480,17 @@ Item {
|
||||
"txt_color += vec3(0.0001);" +
|
||||
"float greyscale_color = rgb2grey(txt_color);" +
|
||||
|
||||
(screenCurvature !== 0 ? "
|
||||
float reflectionMask = sum2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||
reflectionMask = clamp(0.0, 1.0, reflectionMask);"
|
||||
:
|
||||
"float reflectionMask = 1.0;") +
|
||||
|
||||
(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, foregroundColor, greyscale_color * reflectionMask);"
|
||||
:
|
||||
"vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
|
||||
"vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color * reflectionMask);") +
|
||||
|
||||
(bloom !== 0 ?
|
||||
"vec4 bloomFullColor = texture2D(bloomSource, txt_coords);
|
||||
@@ -473,23 +502,9 @@ Item {
|
||||
|
||||
"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);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<file>fonts/1971-ibm-3278/3270Medium.ttf</file>
|
||||
<file>Storage.qml</file>
|
||||
<file>CRTMainMenuBar.qml</file>
|
||||
<file>SettingsPerformanceTab.qml</file>
|
||||
<file>SettingsAdvancedTab.qml</file>
|
||||
<file>TerminalContainer.qml</file>
|
||||
<file>images/crt256.png</file>
|
||||
<file>utils.js</file>
|
||||
|
||||
Reference in New Issue
Block a user