1
0
mirror of https://github.com/Swordfish90/cool-retro-term.git synced 2025-01-31 02:01:19 +00:00

New frame! Drawn using a shader, it is now possible to distort the frame

according to screen distortion (also added the setting)...
This commit is contained in:
Filippo Scognamiglio 2013-12-23 03:14:12 +01:00
parent d5222b1302
commit 8bba1d6957
3 changed files with 119 additions and 76 deletions

View File

@ -67,6 +67,11 @@ ApplicationWindow {
onValueChanged: shadersettings.ambient_light = value; onValueChanged: shadersettings.ambient_light = value;
Component.onCompleted: _value = shadersettings.ambient_light Component.onCompleted: _value = shadersettings.ambient_light
} }
SettingComponent{
name: "Screen distortion"
onValueChanged: shadersettings.screen_distortion = value;
Component.onCompleted: _value = shadersettings.screen_distortion;
}
} }
} }
} }

View File

@ -37,6 +37,7 @@ ApplicationWindow{
title: qsTr("Terminal") title: qsTr("Terminal")
menuBar: MenuBar { menuBar: MenuBar {
id: menubar
Menu { Menu {
title: qsTr("File") title: qsTr("File")
MenuItem { text: "Close"; onTriggered: mainwindow.close()} MenuItem { text: "Close"; onTriggered: mainwindow.close()}
@ -57,19 +58,26 @@ ApplicationWindow{
visible: true visible: true
Item{
anchors.fill: parent
anchors.topMargin: 30 //Fix the constant
ShaderSettings{ ShaderSettings{
id: shadersettings id: shadersettings
} }
ShaderEffectSource{ ShaderEffectSource{
property double offset_top: 0.03
property double offset_bottom: 0.04
id: theSource id: theSource
sourceItem: terminal sourceItem: terminal
//sourceRect: Qt.rect(-20, -20, terminal.width + 40, terminal.height + 40) sourceRect: Qt.rect(-offset_top * terminal.width, -offset_top * terminal.height, terminal.width + offset_bottom * terminal.width, terminal.height + offset_bottom * terminal.height)
} }
ShaderEffect { ShaderEffect {
id: shadercontainer id: shadercontainer
anchors.fill: terminal width: parent.width
height: parent.height
anchors.centerIn: parent
blending: true blending: true
z: 2 z: 2
property color font_color: shadersettings.font_color property color font_color: shadersettings.font_color
@ -172,23 +180,52 @@ ApplicationWindow{
vec4 added_color = (noise + randomPass) * font_color; vec4 added_color = (noise + randomPass) * font_color;
vec4 finalColor = color + added_color; vec4 finalColor = color + added_color;
finalColor = mix(finalColor, background_color, 1.0 - scanline_alpha); finalColor = mix(finalColor, background_color, 1.0 - scanline_alpha);
gl_FragColor = vec4(finalColor.rgb * inside, inside); gl_FragColor = vec4(finalColor.rgb, 1.0);
}" }"
} }
Rectangle{ ShaderEffect{
z: 1 z: 2.1
anchors.fill: parent width: parent.width * 1.05
color: "black" height: parent.height * 1.05
anchors.centerIn: parent
property variant source: framesource
property real screen_distorsion: shadersettings.screen_distortion - 0.22
property real ambient_light: shadersettings.ambient_light
fragmentShader: "
uniform sampler2D source;
uniform highp float screen_distorsion;
uniform highp float ambient_light;
varying highp vec2 qt_TexCoord0;
vec2 distortCoordinates(vec2 coords){
vec2 cc = coords - vec2(0.5);
float dist = dot(cc, cc) * screen_distorsion;
return (coords + cc * (1.0 + dist) * dist);
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
vec4 txt_color = texture2D(source, coords);
vec4 final_color = mix(txt_color, vec4(vec3(0.0), 1.0), 1.0 - ambient_light);
gl_FragColor = vec4(final_color.rgb, txt_color.a);
}"
}
ShaderEffectSource{
id: framesource
sourceItem: frame
hideSource: true
live: false
} }
Image{ Image{
id: frame id: frame
source: "../images/frame.png" source: "../images/squared_frame.png"
anchors.centerIn: parent anchors.centerIn: parent
width: parent.width * 1.05
height: parent.height * 1.05
z: 10
visible: true visible: true
opacity: shadersettings.ambient_light opacity: shadersettings.ambient_light
} }
@ -196,8 +233,8 @@ ApplicationWindow{
TerminalScreen { TerminalScreen {
id: terminal id: terminal
anchors.centerIn: parent anchors.centerIn: parent
width: mainwindow.width * 0.95 width: mainwindow.width
height: mainwindow.height * 0.93 height: mainwindow.height
visible: false visible: false
//FIXME: Ugly forced clear terminal at the beginning //FIXME: Ugly forced clear terminal at the beginning
@ -208,10 +245,11 @@ ApplicationWindow{
z: 4 z: 4
anchors.fill: parent anchors.fill: parent
cached: true cached: true
opacity: 0.25 opacity: 0.2
gradient: Gradient{ gradient: Gradient{
GradientStop{position: 0.0; color: shadersettings.font_color} GradientStop{position: 0.0; color: shadersettings.font_color}
GradientStop{position: 1.0; color: shadersettings.background_color} GradientStop{position: 1.0; color: shadersettings.background_color}
} }
} }
}
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB