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

Improved frames. They are now faster, better looking, and more customizable. Also added a workaround for segementation faults when changing them.

This commit is contained in:
Filippo Scognamiglio 2014-12-20 14:58:57 +01:00
parent 297201a75f
commit df76d83d4b
11 changed files with 159 additions and 117 deletions

View File

@ -78,7 +78,7 @@ Item{
ListModel{
id: framelist
ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
ListElement{text: "No frame"; source: ""; reflections: false}
ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
}
@ -154,7 +154,7 @@ Item{
// FRAMES /////////////////////////////////////////////////////////////////
property bool _frameReflections: true
property bool _frameReflections: false
property bool reflectionsAllowed: framelist.get(frames_index).reflections
property bool frameReflections: _frameReflections && reflectionsAllowed

View File

@ -35,10 +35,10 @@ Item{
property alias title: ksession.title
property alias kterminal: kterminal
anchors.leftMargin: frame.item.displacementLeft * appSettings.window_scaling
anchors.rightMargin: frame.item.displacementRight * appSettings.window_scaling
anchors.topMargin: frame.item.displacementTop * appSettings.window_scaling
anchors.bottomMargin: frame.item.displacementBottom * appSettings.window_scaling
anchors.leftMargin: frame.displacementLeft * appSettings.window_scaling
anchors.rightMargin: frame.displacementRight * appSettings.window_scaling
anchors.topMargin: frame.displacementTop * appSettings.window_scaling
anchors.bottomMargin: frame.displacementBottom * appSettings.window_scaling
//The blur effect has to take into account the framerate
property real mBlur: appSettings.motion_blur

View File

@ -49,10 +49,10 @@ ShaderEffect {
property bool frameReflections: appSettings.frameReflections
property real disp_top: (frame.item.displacementTop * appSettings.window_scaling) / height
property real disp_bottom: (frame.item.displacementBottom * appSettings.window_scaling) / height
property real disp_left: (frame.item.displacementLeft * appSettings.window_scaling) / width
property real disp_right: (frame.item.displacementRight * appSettings.window_scaling) / width
property real disp_top: (frame.displacementTop * appSettings.window_scaling) / height
property real disp_bottom: (frame.displacementBottom * appSettings.window_scaling) / height
property real disp_left: (frame.displacementLeft * appSettings.window_scaling) / width
property real disp_right: (frame.displacementRight * appSettings.window_scaling) / width
property real screen_brightness: appSettings.brightness * 1.5 + 0.5

View File

@ -19,6 +19,15 @@ ShaderTerminal{
Loader{
id: frame
anchors.fill: parent
property real displacementLeft: item ? item.displacementLeft : 0
property real displacementTop: item ? item.displacementTop : 0
property real displacementRight: item ? item.displacementRight : 0
property real displacementBottom: item ? item.displacementBottom : 0
asynchronous: true
visible: status === Loader.Ready
z: 2.1
source: appSettings.frame_source
}

View File

@ -21,5 +21,6 @@ TerminalFrame{
displacementRight: 80.0
displacementBottom: 65.0
shaderString: "FrameShader.qml"
staticDiffuseComponent: 1.0
dinamycDiffuseComponent: 0.6
}

View File

@ -21,5 +21,6 @@ TerminalFrame{
displacementRight: 55
displacementBottom: 50
shaderString: "FrameShader.qml"
staticDiffuseComponent: 1.0
dinamycDiffuseComponent: 0.6
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

After

Width:  |  Height:  |  Size: 498 KiB

View File

@ -1,103 +0,0 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
ShaderEffect{
property variant source: framesource
property variant normals: framesourcenormals
property real screen_distorsion: appSettings.screen_distortion * framecontainer.distortionCoefficient
property real ambient_light: appSettings.ambient_light
property color font_color: appSettings.font_color
property color background_color: appSettings.background_color
property real brightness: appSettings.brightness * 1.5 + 0.5
property bool frameReflections: appSettings.frameReflections
property variant lightSource: reflectionEffectSourceLoader.item
property real chroma_color: appSettings.chroma_color
Loader{
id: reflectionEffectLoader
width: parent.width * 0.33
height: parent.height * 0.33
active: frameReflections
sourceComponent: FastBlur{
id: frameReflectionEffect
radius: 128
source: terminal.kterminal
smooth: false
}
}
Loader{
id: reflectionEffectSourceLoader
active: frameReflections
sourceComponent: ShaderEffectSource{
id: frameReflectionSource
sourceItem: reflectionEffectLoader.item
hideSource: true
smooth: true
visible: false
}
}
blending: true
fragmentShader: "
uniform sampler2D source;
uniform sampler2D normals;
uniform highp float screen_distorsion;
uniform highp float ambient_light;
uniform highp float qt_Opacity;
uniform lowp float chroma_color;" +
(frameReflections ?
"uniform sampler2D lightSource;" : "") + "
uniform vec4 font_color;
uniform vec4 background_color;
varying lowp float brightness;
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);
}
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
vec4 txt_color = texture2D(source, coords);
vec4 txt_normal = texture2D(normals, coords);
vec3 normal = normalize(txt_normal.rgb * 2.0 - 1.0);
vec3 light_direction = normalize(vec3(0.5, 0.5, 0.0) - vec3(qt_TexCoord0, 0.0));
float dotProd = dot(normal, light_direction);" +
(frameReflections ? "
vec3 realLightColor = texture2D(lightSource, coords).rgb;
float screenLight = rgb2grey(realLightColor);
float clampedDotProd = clamp(dotProd, 0.05, 1.0);
float diffuseReflection = clamp(screenLight * 1.5 * clampedDotProd, 0.0, 0.35);
float reflectionAlpha = mix(1.0, 0.90, dotProd);
vec3 lightColor = mix(font_color.rgb * screenLight, font_color.rgb * realLightColor, chroma_color);"
: "
float diffuseReflection = 0.0;
float reflectionAlpha = 1.0;
vec3 lightColor = font_color.rgb;") + "
vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd);
vec3 front_color = lightColor * (0.05 + diffuseReflection);
vec4 dark_color = vec4((back_color + front_color) * txt_normal.a, txt_normal.a * reflectionAlpha);
gl_FragColor = mix(dark_color, txt_color, ambient_light);
}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}

View File

@ -1,4 +1,7 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
import "../../utils.js" as Utils
Item{
id: framecontainer
@ -21,6 +24,10 @@ Item{
property real displacementRight
property real displacementBottom
// Material coefficients
property real staticDiffuseComponent: 0.7
property real dinamycDiffuseComponent: 1.0
property real distortionCoefficient
BorderImage{
@ -65,10 +72,138 @@ Item{
textureSize: Qt.size(parent.width, parent.height)
visible: false
}
// REFLECTIONS ////////////////////////////////////////////////////////////
Loader{
id: reflectionEffectLoader
width: parent.width * 0.33
height: parent.height * 0.33
active: appSettings.frameReflections
sourceComponent: FastBlur{
id: frameReflectionEffect
radius: 128
source: terminal.kterminal
smooth: false
}
}
Loader{
id: reflectionEffectSourceLoader
active: appSettings.frameReflections
sourceComponent: ShaderEffectSource{
id: frameReflectionSource
sourceItem: reflectionEffectLoader.item
hideSource: true
smooth: true
visible: false
}
}
// This texture represent the static light component.
ShaderEffect {
id: staticLight
property alias source: framesource
property alias normals: framesourcenormals
property real screen_distorsion: appSettings.screen_distortion * framecontainer.distortionCoefficient
property real ambient_light: appSettings.ambient_light
property color font_color: appSettings.font_color
property color background_color: appSettings.background_color
property color reflectionColor: Utils.mix(font_color, background_color, 0.2)
property real diffuseComponent: staticDiffuseComponent
anchors.centerIn: parent
width: parent.width + (addedWidth / textureWidth) * parent.width
height: parent.height + (addedHeight / textureHeight) * parent.height
source: shaderString
blending: true
fragmentShader: "
uniform highp sampler2D normals;
uniform highp sampler2D source;
uniform lowp float screen_distorsion;
uniform lowp float ambient_light;
uniform highp float qt_Opacity;
uniform lowp vec4 reflectionColor;
uniform lowp float diffuseComponent;
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);
}
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
vec4 txtColor = texture2D(source, coords);
vec4 txtNormal = texture2D(normals, coords);
vec3 normal = normalize(txtNormal.rgb * 2.0 - 1.0);
vec2 lightDirection = normalize(vec2(0.5, 0.5) - coords);
float dotProd = dot(normal, vec3(lightDirection, 0.0)) * diffuseComponent;
vec3 darkColor = dotProd * reflectionColor.rgb;
gl_FragColor = vec4(mix(darkColor, txtColor.rgb, ambient_light), dotProd);
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
ShaderEffectSource {
id: staticLightSource
sourceItem: staticLight
hideSource: true
anchors.fill: staticLight
live: true
}
Loader{
id: dynamicLightLoader
anchors.fill: staticLight
active: appSettings.frameReflections
sourceComponent: ShaderEffect {
property ShaderEffectSource lightMask: staticLightSource
property ShaderEffectSource reflectionSource: reflectionEffectSourceLoader.item
property real diffuseComponent: dinamycDiffuseComponent
property real chroma_color: appSettings.chroma_color
property color font_color: appSettings.font_color
visible: true
blending: true
fragmentShader: "
uniform sampler2D lightMask;
uniform sampler2D reflectionSource;
uniform lowp float diffuseComponent;
uniform lowp float chroma_color;
uniform highp vec4 font_color;
uniform highp float qt_Opacity;
varying highp vec2 qt_TexCoord0;
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main() {
float alpha = texture2D(lightMask, qt_TexCoord0).a * diffuseComponent;
vec3 reflectionColor = texture2D(reflectionSource, qt_TexCoord0).rgb;
vec3 color = font_color.rgb * rgb2grey(reflectionColor);" +
(chroma_color !== 0 ?
"color = mix(color, font_color.rgb * reflectionColor, chroma_color);"
: "") +
"gl_FragColor = vec4(color, 1.0) * alpha;
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
}
}

View File

@ -9,7 +9,6 @@
<file>frames/images/black-frame-original.png</file>
<file>frames/images/screen-frame-original.png</file>
<file>frames/WhiteSimpleFrame.qml</file>
<file>frames/utils/FrameShader.qml</file>
<file>frames/utils/TerminalFrame.qml</file>
<file>SizeOverlay.qml</file>
<file>ShaderTerminal.qml</file>