mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2025-01-18 20:20:45 +00:00
Settings optin for old burinin version. It seems to be working better on osx.
This commit is contained in:
parent
f2f38c0e0d
commit
0af2b20b3a
@ -33,6 +33,9 @@ QtObject{
|
|||||||
readonly property real minimumFontScaling: 0.25
|
readonly property real minimumFontScaling: 0.25
|
||||||
readonly property real maximumFontScaling: 2.50
|
readonly property real maximumFontScaling: 2.50
|
||||||
|
|
||||||
|
readonly property real minBurnInFadeTime: 160
|
||||||
|
readonly property real maxBurnInFadeTime: 1600
|
||||||
|
|
||||||
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
||||||
|
|
||||||
property int x: 100
|
property int x: 100
|
||||||
@ -52,7 +55,9 @@ QtObject{
|
|||||||
property bool verbose: false
|
property bool verbose: false
|
||||||
|
|
||||||
property real bloomQuality: 0.5
|
property real bloomQuality: 0.5
|
||||||
|
|
||||||
property real burnInQuality: 0.5
|
property real burnInQuality: 0.5
|
||||||
|
property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true
|
||||||
|
|
||||||
onWindowScalingChanged: handleFontChanged();
|
onWindowScalingChanged: handleFontChanged();
|
||||||
|
|
||||||
@ -202,7 +207,8 @@ QtObject{
|
|||||||
bloomQuality: bloomQuality,
|
bloomQuality: bloomQuality,
|
||||||
burnInQuality: burnInQuality,
|
burnInQuality: burnInQuality,
|
||||||
useCustomCommand: useCustomCommand,
|
useCustomCommand: useCustomCommand,
|
||||||
customCommand: customCommand
|
customCommand: customCommand,
|
||||||
|
useFastBurnIn: useFastBurnIn
|
||||||
}
|
}
|
||||||
return stringify(settings);
|
return stringify(settings);
|
||||||
}
|
}
|
||||||
@ -288,6 +294,8 @@ QtObject{
|
|||||||
|
|
||||||
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
||||||
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
||||||
|
|
||||||
|
useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadProfileString(profileString){
|
function loadProfileString(profileString){
|
||||||
|
@ -13,10 +13,12 @@ Loader {
|
|||||||
property real delay: (1.0 / appSettings.fps) * 1000
|
property real delay: (1.0 / appSettings.fps) * 1000
|
||||||
property real burnIn: appSettings.burnIn
|
property real burnIn: appSettings.burnIn
|
||||||
property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
|
property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
|
||||||
property real _minBurnInFadeTime: 160
|
property real _minBurnInFadeTime: appSettings.minBurnInFadeTime
|
||||||
property real _maxBurnInFadeTime: 1600
|
property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime
|
||||||
|
|
||||||
active: appSettings.burnIn !== 0
|
active: appSettings.useFastBurnIn && appSettings.burnIn !== 0
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
function completelyUpdate() {
|
function completelyUpdate() {
|
||||||
prevLastUpdate = lastUpdate;
|
prevLastUpdate = lastUpdate;
|
||||||
@ -33,16 +35,6 @@ Loader {
|
|||||||
sourceComponent: Item {
|
sourceComponent: Item {
|
||||||
property alias source: burnInEffectSource
|
property alias source: burnInEffectSource
|
||||||
|
|
||||||
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
width: appSettings.lowResolutionFont
|
|
||||||
? kterminal.totalWidth * Math.max(1, burnInScaling)
|
|
||||||
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
height: appSettings.lowResolutionFont
|
|
||||||
? kterminal.totalHeight * Math.max(1, burnInScaling)
|
|
||||||
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
ShaderEffectSource {
|
ShaderEffectSource {
|
||||||
id: burnInEffectSource
|
id: burnInEffectSource
|
||||||
|
|
||||||
@ -88,7 +80,6 @@ Loader {
|
|||||||
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
blending: false
|
blending: false
|
||||||
|
|
||||||
fragmentShader:
|
fragmentShader:
|
||||||
|
@ -33,6 +33,7 @@ Item{
|
|||||||
|
|
||||||
property ShaderEffectSource mainSource: kterminalSource
|
property ShaderEffectSource mainSource: kterminalSource
|
||||||
property BurnInEffect burnInEffect: burnInEffect
|
property BurnInEffect burnInEffect: burnInEffect
|
||||||
|
property SlowBurnIn slowBurnInEffect: slowBurnInEffect
|
||||||
property real fontWidth: 1.0
|
property real fontWidth: 1.0
|
||||||
property real screenScaling: 1.0
|
property real screenScaling: 1.0
|
||||||
property real scaleTexture: 1.0
|
property real scaleTexture: 1.0
|
||||||
@ -227,7 +228,26 @@ Item{
|
|||||||
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
|
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: burnInContainer
|
||||||
|
|
||||||
|
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||||
|
|
||||||
|
width: Math.round(appSettings.lowResolutionFont
|
||||||
|
? kterminal.totalWidth * Math.max(1, burnInScaling)
|
||||||
|
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality)
|
||||||
|
|
||||||
|
height: Math.round(appSettings.lowResolutionFont
|
||||||
|
? kterminal.totalHeight * Math.max(1, burnInScaling)
|
||||||
|
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality)
|
||||||
|
|
||||||
|
|
||||||
BurnInEffect {
|
BurnInEffect {
|
||||||
id: burnInEffect
|
id: burnInEffect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SlowBurnIn {
|
||||||
|
id: slowBurnInEffect
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,6 +133,12 @@ Tab{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||||
|
CheckBox{
|
||||||
|
Layout.columnSpan: 2
|
||||||
|
text: qsTr("Burnin optimization (Might display timing artifacts)")
|
||||||
|
checked: appSettings.useFastBurnIn
|
||||||
|
onCheckedChanged: appSettings.useFastBurnIn = checked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import QtGraphicalEffects 1.0
|
|||||||
import "utils.js" as Utils
|
import "utils.js" as Utils
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
property SlowBurnIn slowBurnInEffect
|
||||||
property ShaderEffectSource source
|
property ShaderEffectSource source
|
||||||
property BurnInEffect burnInEffect
|
property BurnInEffect burnInEffect
|
||||||
property ShaderEffectSource bloomSource
|
property ShaderEffectSource bloomSource
|
||||||
@ -56,9 +57,16 @@ Item {
|
|||||||
property real horizontalSync: appSettings.horizontalSync
|
property real horizontalSync: appSettings.horizontalSync
|
||||||
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
||||||
property real glowingLine: appSettings.glowingLine * 0.2
|
property real glowingLine: appSettings.glowingLine * 0.2
|
||||||
property real burnIn: appSettings.burnIn
|
|
||||||
|
// Fast burnin properties
|
||||||
|
property real burnIn: appSettings.useFastBurnIn ? appSettings.burnIn : 0
|
||||||
property real burnInLastUpdate: burnInEffect.lastUpdate
|
property real burnInLastUpdate: burnInEffect.lastUpdate
|
||||||
property real burnInTime: burnInEffect.burnInFadeTime
|
property real burnInTime: burnInEffect.burnInFadeTime
|
||||||
|
|
||||||
|
// Slow burnin properties
|
||||||
|
property real slowBurnIn: appSettings.useFastBurnIn ? 0 : appSettings.burnIn
|
||||||
|
property ShaderEffectSource slowBurnInSource: slowBurnInEffect.source
|
||||||
|
|
||||||
property real jitter: appSettings.jitter
|
property real jitter: appSettings.jitter
|
||||||
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
|
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
|
||||||
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
|
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
|
||||||
@ -162,6 +170,8 @@ Item {
|
|||||||
uniform sampler2D burnInSource;
|
uniform sampler2D burnInSource;
|
||||||
uniform highp float burnInLastUpdate;
|
uniform highp float burnInLastUpdate;
|
||||||
uniform highp float burnInTime;" : "") +
|
uniform highp float burnInTime;" : "") +
|
||||||
|
(slowBurnIn !== 0 ? "
|
||||||
|
uniform sampler2D slowBurnInSource;" : "") +
|
||||||
(staticNoise !== 0 ? "
|
(staticNoise !== 0 ? "
|
||||||
uniform highp float staticNoise;" : "") +
|
uniform highp float staticNoise;" : "") +
|
||||||
(((staticNoise !== 0 || jitter !== 0)
|
(((staticNoise !== 0 || jitter !== 0)
|
||||||
@ -292,6 +302,11 @@ Item {
|
|||||||
txt_color = max(txt_color, convertWithChroma(burnInColor));"
|
txt_color = max(txt_color, convertWithChroma(burnInColor));"
|
||||||
: "") +
|
: "") +
|
||||||
|
|
||||||
|
(slowBurnIn !== 0 ? "
|
||||||
|
vec4 txt_blur = texture2D(slowBurnInSource, staticCoords);
|
||||||
|
txt_color = max(txt_color, convertWithChroma(txt_blur.rgb * txt_blur.a));
|
||||||
|
" : "") +
|
||||||
|
|
||||||
"txt_color += fontColor.rgb * vec3(color);" +
|
"txt_color += fontColor.rgb * vec3(color);" +
|
||||||
|
|
||||||
"vec3 finalColor = txt_color;" +
|
"vec3 finalColor = txt_color;" +
|
||||||
|
122
app/qml/SlowBurnIn.qml
Normal file
122
app/qml/SlowBurnIn.qml
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
import "utils.js" as Utils
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
property ShaderEffectSource source: item ? item.source : null
|
||||||
|
|
||||||
|
active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
sourceComponent: Item {
|
||||||
|
property alias source: burnInSourceEffect
|
||||||
|
|
||||||
|
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||||
|
|
||||||
|
ShaderEffectSource {
|
||||||
|
property bool updateBurnIn: false
|
||||||
|
property real burnIn: appSettings.burnIn
|
||||||
|
property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
|
||||||
|
property real burnInFadeTime: Utils.lint(minBurnInFadeTime, maxBurnInFadeTime, burnIn)
|
||||||
|
property real burnInCoefficient: 1000 / (fps * burnInFadeTime)
|
||||||
|
property real minBurnInFadeTime: appSettings.minBurnInFadeTime
|
||||||
|
property real maxBurnInFadeTime: appSettings.maxBurnInFadeTime
|
||||||
|
|
||||||
|
id: burnInSourceEffect
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
sourceItem: burnInEffect
|
||||||
|
recursive: true
|
||||||
|
live: false
|
||||||
|
hideSource: true
|
||||||
|
wrapMode: kterminalSource.wrapMode
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
|
||||||
|
function restartBlurSource(){
|
||||||
|
livetimer.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This updates the burnin synched with the timer.
|
||||||
|
Connections {
|
||||||
|
target: burnInSourceEffect.updateBurnIn ? timeManager : null
|
||||||
|
ignoreUnknownSignals: false
|
||||||
|
onTimeChanged: {
|
||||||
|
burnInSourceEffect.scheduleUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id: livetimer
|
||||||
|
|
||||||
|
// The interval assumes 60 fps. This is the time needed burnout a white pixel.
|
||||||
|
// We multiply 1.1 to have a little bit of margin over the theoretical value.
|
||||||
|
// This solution is not extremely clean, but it's probably the best to avoid measuring fps.
|
||||||
|
|
||||||
|
interval: burnInSourceEffect.burnInFadeTime * 1.1
|
||||||
|
running: true
|
||||||
|
onTriggered: burnInSourceEffect.updateBurnIn = false;
|
||||||
|
}
|
||||||
|
Connections{
|
||||||
|
target: kterminal
|
||||||
|
onImagePainted:{
|
||||||
|
burnInSourceEffect.scheduleUpdate();
|
||||||
|
burnInSourceEffect.updateBurnIn = true;
|
||||||
|
livetimer.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Restart blurred source settings change.
|
||||||
|
Connections{
|
||||||
|
target: appSettings
|
||||||
|
onBurnInChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onTerminalFontChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onRasterizationChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onBurnInQualityChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
}
|
||||||
|
Connections {
|
||||||
|
target: kterminalScrollbar
|
||||||
|
onOpacityChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderEffect {
|
||||||
|
id: burnInEffect
|
||||||
|
|
||||||
|
property variant txt_source: kterminalSource
|
||||||
|
property variant blurredSource: burnInSourceEffect
|
||||||
|
property real burnInCoefficient: burnInSourceEffect.burnInCoefficient
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
blending: false
|
||||||
|
|
||||||
|
fragmentShader:
|
||||||
|
"#ifdef GL_ES
|
||||||
|
precision mediump float;
|
||||||
|
#endif\n" +
|
||||||
|
|
||||||
|
"uniform lowp float qt_Opacity;" +
|
||||||
|
"uniform lowp sampler2D txt_source;" +
|
||||||
|
|
||||||
|
"varying highp vec2 qt_TexCoord0;
|
||||||
|
uniform lowp sampler2D blurredSource;
|
||||||
|
uniform highp float burnInCoefficient;" +
|
||||||
|
|
||||||
|
"float max3(vec3 v) {
|
||||||
|
return max (max (v.x, v.y), v.z);
|
||||||
|
}" +
|
||||||
|
|
||||||
|
"void main() {" +
|
||||||
|
"vec2 coords = qt_TexCoord0;" +
|
||||||
|
"vec3 origColor = texture2D(txt_source, coords).rgb;" +
|
||||||
|
"vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" +
|
||||||
|
"vec3 color = min(origColor + blur_color, max(origColor, blur_color));" +
|
||||||
|
|
||||||
|
"gl_FragColor = vec4(color, max3(color - origColor));" +
|
||||||
|
"}"
|
||||||
|
|
||||||
|
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,7 @@ ShaderTerminal {
|
|||||||
|
|
||||||
source: terminal.mainSource
|
source: terminal.mainSource
|
||||||
burnInEffect: terminal.burnInEffect
|
burnInEffect: terminal.burnInEffect
|
||||||
|
slowBurnInEffect: terminal.slowBurnInEffect
|
||||||
virtual_resolution: terminal.virtualResolution
|
virtual_resolution: terminal.virtualResolution
|
||||||
|
|
||||||
TimeManager{
|
TimeManager{
|
||||||
|
@ -43,5 +43,6 @@
|
|||||||
<file>BurnInEffect.qml</file>
|
<file>BurnInEffect.qml</file>
|
||||||
<file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
|
<file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
|
||||||
<file>NewTerminalFrame.qml</file>
|
<file>NewTerminalFrame.qml</file>
|
||||||
|
<file>SlowBurnIn.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user