mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-10-31 07:04:20 +00:00 
			
		
		
		
	Move frame to separate framebuffer. This fixes some glitches in terminal
frame.
This commit is contained in:
		| @@ -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; | ||||
|  | ||||
| @@ -53,10 +56,10 @@ ShaderEffect { | ||||
|             float outShadowLength = shadowLength; | ||||
|  | ||||
|             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); | ||||
|  | ||||
|             gl_FragColor = vec4(color * alpha, alpha); | ||||
|         } | ||||
|   | ||||
| @@ -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 | ||||
| @@ -167,7 +168,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 ? " | ||||
| @@ -247,12 +249,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 +282,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 +301,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 +321,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 +433,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 +479,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 +501,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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user