mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-10-30 22:54:21 +00:00 
			
		
		
		
	Much improved frame reflections. This is a little bit heavier but much better looking. The code should be ok, but maybe the parameters might use some fine tuning.
This commit is contained in:
		| @@ -128,8 +128,9 @@ Item{ | ||||
|  | ||||
|     // FRAMES ///////////////////////////////////////////////////////////////// | ||||
|  | ||||
|     property bool frame_reflections: true | ||||
|     property real frame_reflection_strength: ((frame_reflections && framelist.get(frames_index).reflections) ? 1.0 : 0.0) * 0.15 | ||||
|     property bool _frameReflections: true | ||||
|     property bool reflectionsAllowed: framelist.get(frames_index).reflections | ||||
|     property bool frameReflections: _frameReflections && reflectionsAllowed | ||||
|  | ||||
|     property alias profiles_list: profileslist | ||||
|     property int profiles_index: 0 | ||||
| @@ -147,7 +148,8 @@ Item{ | ||||
|             contrast: contrast, | ||||
|             ambient_light: ambient_light, | ||||
|             fontScalingIndexes: fontScalingIndexes, | ||||
|             fontIndexes: fontIndexes | ||||
|             fontIndexes: fontIndexes, | ||||
|             frameReflections: _frameReflections | ||||
|         } | ||||
|         return JSON.stringify(settings); | ||||
|     } | ||||
| @@ -210,6 +212,8 @@ Item{ | ||||
|  | ||||
|         fontIndexes = settings.fontIndexes !== undefined ? settings.fontIndexes : fontIndexes | ||||
|         fontScalingIndexes = settings.fontScalingIndexes !== undefined ? settings.fontScalingIndexes : fontScalingIndexes | ||||
|  | ||||
|         _frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections; | ||||
|     } | ||||
|  | ||||
|     function loadProfileString(profileString){ | ||||
|   | ||||
| @@ -99,8 +99,15 @@ Tab{ | ||||
|             anchors.right: parent.right | ||||
|             GridLayout{ | ||||
|                 anchors.fill: parent | ||||
|                 rows: 2 | ||||
|                 rows: 3 | ||||
|                 columns: 3 | ||||
|                 CheckBox{ | ||||
|                     Layout.columnSpan: 3 | ||||
|                     checked: shadersettings._frameReflections | ||||
|                     text: qsTr("Frame reflections") | ||||
|                     onCheckedChanged: shadersettings._frameReflections = checked | ||||
|                     enabled: shadersettings.reflectionsAllowed | ||||
|                 } | ||||
|                 CheckBox{ | ||||
|                     property int fps: checked ? slider.value : 0 | ||||
|                     onFpsChanged: shadersettings.fps = fps | ||||
|   | ||||
| @@ -122,12 +122,6 @@ Tab{ | ||||
|                     currentIndex: shadersettings.frames_index | ||||
|                     onCurrentIndexChanged: shadersettings.frames_index = currentIndex | ||||
|                 } | ||||
|                 CheckBox{ | ||||
|                     checked: shadersettings.frame_reflections | ||||
|                     text: qsTr("Reflections") | ||||
|                     onCheckedChanged: shadersettings.frame_reflections = checked | ||||
|                     enabled: framescombobox.model.get(framescombobox.currentIndex).reflections | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -42,7 +42,7 @@ ShaderEffect { | ||||
|     property real brightness_flickering: shadersettings.brightness_flickering | ||||
|     property real horizontal_sincronization: shadersettings.horizontal_sincronization | ||||
|  | ||||
|     property bool frame_reflection_strength: shadersettings.frame_reflection_strength | ||||
|     property bool frameReflections: shadersettings.frameReflections | ||||
|  | ||||
|     property real disp_top: frame.item.displacementTop * shadersettings.window_scaling | ||||
|     property real disp_bottom: frame.item.displacementBottom * shadersettings.window_scaling | ||||
| @@ -51,7 +51,7 @@ ShaderEffect { | ||||
|  | ||||
|     property real brightness: shadersettings.brightness * 1.5 + 0.5 | ||||
|  | ||||
|     property real time: timeManager.time !== 0 ? timeManager.time : 1 | ||||
|     property real time: timeManager.time | ||||
|     property variant randomFunctionSource: randfuncsource | ||||
|  | ||||
|     blending: false | ||||
| @@ -138,7 +138,7 @@ ShaderEffect { | ||||
|             :" | ||||
|                 vec2 coords = qt_TexCoord0;") + | ||||
|  | ||||
|             (frame_reflection_strength ? " | ||||
|             (frameReflections ? " | ||||
|                 vec2 inside = step(0.0, coords) - step(1.0, coords); | ||||
|                 coords = abs(mod(floor(coords), 2.0) - fract(coords)) * clamp(inside.x + inside.y, 0.0, 1.0);" : "") + | ||||
|  | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
| import QtQuick 2.2 | ||||
|  | ||||
| Timer{ | ||||
|     property int time | ||||
|     property real time | ||||
|  | ||||
|     NumberAnimation on time { | ||||
|         from: 0 | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| import QtQuick 2.2 | ||||
| import QtGraphicalEffects 1.0 | ||||
|  | ||||
| ShaderEffect{ | ||||
|     property variant source: framesource | ||||
| @@ -7,49 +8,50 @@ ShaderEffect{ | ||||
|     property real ambient_light: shadersettings.ambient_light | ||||
|     property color font_color: shadersettings.font_color | ||||
|     property color background_color: shadersettings.background_color | ||||
|     property real time: timeManager.time | ||||
|     property variant randomFunctionSource: randfuncsource | ||||
|     property real brightness_flickering: shadersettings.brightness_flickering | ||||
|     property real brightness: shadersettings.brightness * 1.5 + 0.5 | ||||
|  | ||||
|     property real frame_reflection_strength: shadersettings.frame_reflection_strength | ||||
|     property bool frameReflections: shadersettings.frameReflections | ||||
|     property variant lightSource: reflectionEffectSourceLoader.item | ||||
|  | ||||
|     property color reflection_color: Qt.rgba((font_color.r*0.3 + background_color.r*0.7), | ||||
|                                              (font_color.g*0.3 + background_color.g*0.7), | ||||
|                                              (font_color.b*0.3 + background_color.b*0.7), | ||||
|                                              1.0) | ||||
|     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 | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     blending: true | ||||
|  | ||||
|     vertexShader: " | ||||
|                     uniform highp mat4 qt_Matrix; | ||||
|                     uniform highp float time; | ||||
|                     uniform sampler2D randomFunctionSource; | ||||
|  | ||||
|                     attribute highp vec4 qt_Vertex; | ||||
|                     attribute highp vec2 qt_MultiTexCoord0; | ||||
|  | ||||
|                     varying highp vec2 qt_TexCoord0; | ||||
|                     varying lowp float brightness; | ||||
|  | ||||
|                     void main() { | ||||
|                         qt_TexCoord0 = qt_MultiTexCoord0; | ||||
|                         brightness = "+brightness.toFixed(1)+";" + | ||||
|                         (brightness_flickering !== 0 ? | ||||
|                             "brightness -= texture2D(randomFunctionSource, vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0*2.0)))).r * "+brightness_flickering.toFixed(1)+";" | ||||
|                         : "") + " | ||||
|  | ||||
|                         gl_Position = qt_Matrix * qt_Vertex; | ||||
|                     }" | ||||
|  | ||||
|     fragmentShader: " | ||||
|                             uniform sampler2D source; | ||||
|                             uniform sampler2D normals; | ||||
|                             uniform highp float screen_distorsion; | ||||
|                             uniform highp float ambient_light; | ||||
|                             uniform highp float qt_Opacity; | ||||
|                             uniform highp float qt_Opacity;" + | ||||
|  | ||||
|                             uniform vec4 reflection_color; | ||||
|                             (frameReflections ? | ||||
|                                 "uniform sampler2D lightSource;" : "") + " | ||||
|  | ||||
|                             uniform vec4 font_color; | ||||
|                             uniform vec4 background_color; | ||||
|                             varying lowp float brightness; | ||||
|  | ||||
|                             varying highp vec2 qt_TexCoord0; | ||||
| @@ -65,11 +67,23 @@ ShaderEffect{ | ||||
|                                 vec4 txt_color = texture2D(source, coords); | ||||
|                                 vec4 txt_normal = texture2D(normals, coords); | ||||
|                                 vec3 normal = normalize(txt_normal.rgb * 2.0 - 1.0); | ||||
|                                 vec3 light_dir = normalize(vec3(0.5,0.5, 0.0) - vec3(qt_TexCoord0, 0.0)); | ||||
|                                 float diffuse = dot(normal, light_dir); | ||||
|                                 float reflection = (diffuse * 0.6 + 0.4) * txt_normal.a; | ||||
|                                 float reflection_alpha = (1.0 - diffuse*"+frame_reflection_strength.toFixed(1)+"); | ||||
|                                 vec4 dark_color = vec4(reflection_color.rgb * reflection * 0.4, txt_normal.a * reflection_alpha); | ||||
|                                 vec3 light_direction = normalize(vec3(0.5, 0.5, 0.0) - vec3(qt_TexCoord0, 0.0)); | ||||
|  | ||||
|                                 float dotProd = dot(normal, light_direction);" + | ||||
|  | ||||
|                                 (frameReflections ? " | ||||
|                                     float screenLight = texture2D(lightSource, coords).r; | ||||
|                                     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);" | ||||
|                                 : " | ||||
|                                     float diffuseReflection = 0.0; | ||||
|                                     float reflectionAlpha = 1.0;") + " | ||||
|  | ||||
|                                 vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd); | ||||
|                                 vec3 front_color = font_color.rgb * (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); | ||||
|                             }" | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user