mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2025-01-18 20:20:45 +00:00
Add subpixel rasterization.
This commit is contained in:
parent
7714f7b503
commit
3104abd4ad
@ -104,7 +104,7 @@ QtObject {
|
|||||||
readonly property int no_rasterization: 0
|
readonly property int no_rasterization: 0
|
||||||
readonly property int scanline_rasterization: 1
|
readonly property int scanline_rasterization: 1
|
||||||
readonly property int pixel_rasterization: 2
|
readonly property int pixel_rasterization: 2
|
||||||
readonly property int lcd_rasterization: 3
|
readonly property int subpixel_rasterization: 3
|
||||||
|
|
||||||
property int rasterization: no_rasterization
|
property int rasterization: no_rasterization
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ QtObject {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
when: rasterization == lcd_rasterization
|
when: rasterization == subpixel_rasterization
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: fontManager
|
target: fontManager
|
||||||
source: "FontPixels.qml"
|
source: "FontPixels.qml"
|
||||||
|
@ -41,7 +41,7 @@ ColumnLayout {
|
|||||||
property string selectedElement: model[currentIndex]
|
property string selectedElement: model[currentIndex]
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels"), qsTr("LCD")]
|
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels"), qsTr("Sub-Pixels")]
|
||||||
currentIndex: appSettings.rasterization
|
currentIndex: appSettings.rasterization
|
||||||
onCurrentIndexChanged: {
|
onCurrentIndexChanged: {
|
||||||
appSettings.rasterization = currentIndex
|
appSettings.rasterization = currentIndex
|
||||||
|
@ -12,8 +12,6 @@ QtObject {
|
|||||||
#define BRIGHTBOOST 0.30
|
#define BRIGHTBOOST 0.30
|
||||||
|
|
||||||
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
|
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
|
||||||
lowp vec3 result = texel;
|
|
||||||
|
|
||||||
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
||||||
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
||||||
|
|
||||||
@ -42,20 +40,25 @@ QtObject {
|
|||||||
return mix(texel, rasterizationColor, intensity);
|
return mix(texel, rasterizationColor, intensity);
|
||||||
}" : "") +
|
}" : "") +
|
||||||
|
|
||||||
(appSettings.rasterization === appSettings.lcd_rasterization ? "
|
(appSettings.rasterization === appSettings.subpixel_rasterization ? "
|
||||||
#define brighten_scanlines 16.0
|
#define INTENSITY 0.30
|
||||||
#define brighten_lcd 4.0
|
#define BRIGHTBOOST 0.30
|
||||||
|
#define SUBPIXELS 3.0
|
||||||
const vec3 offsets = vec3(3.141592654) * vec3(1.0/2.0,1.0/2.0 - 2.0/3.0,1.0/2.0-4.0/3.0);
|
const vec3 offsets = vec3(3.141592654) * vec3(1.0/2.0,1.0/2.0 - 2.0/3.0,1.0/2.0-4.0/3.0);
|
||||||
|
|
||||||
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
|
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
|
||||||
vec2 omega = vec2(3.141592654) * vec2(2.0) * virtualResolution;
|
vec2 omega = vec2(3.141592654) * vec2(2.0) * virtualResolution;
|
||||||
|
|
||||||
vec2 angle = screenCoords * omega;
|
vec2 angle = screenCoords * omega;
|
||||||
|
vec3 xfactors = (SUBPIXELS + sin(angle.x + offsets)) / (SUBPIXELS + 1.0);
|
||||||
|
|
||||||
float yfactor = (brighten_scanlines + sin(angle.y)) / (brighten_scanlines + 1.0);
|
lowp vec3 result = texel * xfactors;
|
||||||
vec3 xfactors = (brighten_lcd + sin(angle.x + offsets)) / (brighten_lcd + 1.0);
|
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * result)) * result;
|
||||||
|
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * result)) * result;
|
||||||
|
|
||||||
lowp vec3 rasterizationColor = yfactor * xfactors * texel;
|
vec2 coords = fract(screenCoords * virtualResolution) * 2.0 - vec2(1.0);
|
||||||
|
lowp float mask = 1.0 - abs(coords.y);
|
||||||
|
|
||||||
|
lowp vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||||
return mix(texel, rasterizationColor, intensity);
|
return mix(texel, rasterizationColor, intensity);
|
||||||
}" : "") +
|
}" : "") +
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user