mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-10-30 22:54:21 +00:00 
			
		
		
		
	First version with cool shader applied
This commit is contained in:
		| @@ -18,4 +18,5 @@ OTHER_FILES += \ | |||||||
|     $$PWD/qml/cool-old-term/TerminalLine.qml \ |     $$PWD/qml/cool-old-term/TerminalLine.qml \ | ||||||
|     $$PWD/qml/cool-old-term/TerminalScreen.qml \ |     $$PWD/qml/cool-old-term/TerminalScreen.qml \ | ||||||
|     $$PWD/qml/cool-old-term/TerminalText.qml \ |     $$PWD/qml/cool-old-term/TerminalText.qml \ | ||||||
|     $$PWD/qml/cool-old-term/HighlightArea.qml |     $$PWD/qml/cool-old-term/HighlightArea.qml \ | ||||||
|  |     qml/cool-old-term/ShaderSettings.qml | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								qml/cool-old-term/ShaderSettings.qml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								qml/cool-old-term/ShaderSettings.qml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | import QtQuick 2.0 | ||||||
|  |  | ||||||
|  | Item{ | ||||||
|  |     property real noise_strength: 0.25 | ||||||
|  |     property rect base_color: Qt.rect(0.5, 1.0, 0.5, 1.0) | ||||||
|  |     property real screen_distortion: 0.15 | ||||||
|  |     property real glowing_line_strength: 0.7 | ||||||
|  |     //property real faulty_screen_prob: 1.0 | ||||||
|  | } | ||||||
| @@ -11,7 +11,8 @@ TerminalScreen { | |||||||
|  |  | ||||||
|     property var lineComponent : Qt.createComponent("TerminalLine.qml") |     property var lineComponent : Qt.createComponent("TerminalLine.qml") | ||||||
|  |  | ||||||
|     font.family: "courier" |     font.family: "monospace" | ||||||
|  |     font.pointSize: 14 | ||||||
|  |  | ||||||
|     Text { |     Text { | ||||||
|         id: fontMetricText |         id: fontMetricText | ||||||
|   | |||||||
| @@ -30,11 +30,101 @@ import QtQuick.Controls 1.0 | |||||||
|  |  | ||||||
| ApplicationWindow{ | ApplicationWindow{ | ||||||
|     id: mainwindow |     id: mainwindow | ||||||
|     width: 640 |     width: 1024 | ||||||
|     height: 480 |     height: 768 | ||||||
|  |  | ||||||
|     visible: true |     visible: true | ||||||
|  |  | ||||||
|  |     ShaderSettings{ | ||||||
|  |         id: shadersettings | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ShaderEffectSource{ | ||||||
|  |         id: theSource | ||||||
|  |         sourceItem: terminal | ||||||
|  |         sourceRect: Qt.rect(-20, -20, kterm.width + 40, kterm.height + 40) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ShaderEffect { | ||||||
|  |         id: shadercontainer | ||||||
|  |         anchors.fill: parent | ||||||
|  |         blending: false | ||||||
|  |         z: 10 | ||||||
|  |         property rect base_color: shadersettings.base_color | ||||||
|  |         property variant source: theSource | ||||||
|  |         property size txt_Size: Qt.size(terminal.width, terminal.height) | ||||||
|  |         property real time: 0 | ||||||
|  |  | ||||||
|  |         property real noise_strength: shadersettings.noise_strength | ||||||
|  |         property real screen_distorsion: shadersettings.screen_distortion | ||||||
|  |         property real glowing_line_strength: shadersettings.glowing_line_strength | ||||||
|  |         //property real faulty_screen_prob: shadersettings.faulty_screen_prob | ||||||
|  |  | ||||||
|  |         NumberAnimation on time{ | ||||||
|  |             from: -1 | ||||||
|  |             to: 100 | ||||||
|  |             duration: 5000 | ||||||
|  |             loops: Animation.Infinite | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         fragmentShader: " | ||||||
|  |                         uniform sampler2D source; | ||||||
|  |                         uniform highp float qt_Opacity; | ||||||
|  |                         uniform highp float time; | ||||||
|  |                         uniform highp vec2 txt_Size; | ||||||
|  |                         varying highp vec2 qt_TexCoord0; | ||||||
|  |  | ||||||
|  |                         uniform highp vec4 base_color; | ||||||
|  |                         uniform highp float noise_strength; | ||||||
|  |                         uniform highp float screen_distorsion; | ||||||
|  |                         uniform highp float glowing_line_strength; | ||||||
|  |  | ||||||
|  |                         float rand(vec2 co, float time){ | ||||||
|  |                             return fract(sin(dot(co.xy ,vec2(1.129898 * time ,78.233))) * 43758.5453); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         float stepNoise(vec2 p){ | ||||||
|  |                             vec2 newP = p * txt_Size*0.25; | ||||||
|  |                             return rand(floor(newP), time); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         float getScanlineIntensity(vec2 pos){ | ||||||
|  |                             return 0.5 + abs(sin(pos.y * txt_Size.y * 0.6)) * 0.5; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         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 drawGlowEffect(vec2 pos){ | ||||||
|  |                             float dist = length(pos - vec2(0.5, 0.5)) * 1.5; | ||||||
|  |                             return 1.0 - dist; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         float randomPass(vec2 coords){ | ||||||
|  |                             return fract(smoothstep(-0.2, 0.0, coords.y - time * 0.03)) * glowing_line_strength; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         void main() { | ||||||
|  |                             vec2 coords = distortCoordinates(qt_TexCoord0); | ||||||
|  |  | ||||||
|  |                             //Emulate faulty screen | ||||||
|  |                             //coords.x = coords.x + sin(coords.y * 5.0) * 0.05 * step(faulty_screen_prob, rand(txt_Size, floor(time))); | ||||||
|  |  | ||||||
|  |                             vec4 color = texture2D(source, coords); | ||||||
|  |                             float alpha = getScanlineIntensity(coords) * step(0.0, coords.x) * step(-1.0, -coords.x) * step(0.0, coords.y) * step(-1.0, -coords.y); | ||||||
|  |                             float glow = drawGlowEffect(qt_TexCoord0)*0.3; | ||||||
|  |                             float noise = stepNoise(coords) * noise_strength; | ||||||
|  |                             float randomPass = randomPass(coords) * 0.3; | ||||||
|  |                             vec4 artificialColor = vec4((glow + randomPass), (glow + randomPass), (glow + randomPass), 0.0); | ||||||
|  |                             vec4 finalColor = base_color * color + artificialColor * base_color; | ||||||
|  |  | ||||||
|  |                             gl_FragColor = mix(finalColor, vec4(vec3(0.0), 1.0), 1.0 - alpha + noise); | ||||||
|  |                         }" | ||||||
|  |     } | ||||||
|  |  | ||||||
|     TerminalScreen { |     TerminalScreen { | ||||||
|         id: terminal |         id: terminal | ||||||
|         width: mainwindow.width |         width: mainwindow.width | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user