mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2026-02-08 00:32:27 +00:00
Create multiple shader variants for the various configurations.
This commit is contained in:
42
app/app.pro
42
app/app.pro
@@ -21,6 +21,9 @@ isEmpty(QSB_BIN): QSB_BIN = $$[QT_INSTALL_BINS]/qsb
|
||||
|
||||
SHADERS_DIR = $${_PRO_FILE_PWD_}/shaders
|
||||
SHADERS += $$files($$SHADERS_DIR/*.frag) $$files($$SHADERS_DIR/*.vert)
|
||||
SHADERS -= $$SHADERS_DIR/terminal_dynamic.frag
|
||||
SHADERS -= $$SHADERS_DIR/terminal_static.frag
|
||||
SHADERS -= $$SHADERS_DIR/passthrough.vert
|
||||
|
||||
qsb.input = SHADERS
|
||||
qsb.output = ../../app/shaders/${QMAKE_FILE_NAME}.qsb
|
||||
@@ -32,6 +35,45 @@ QMAKE_EXTRA_COMPILERS += qsb
|
||||
PRE_TARGETDEPS += $$QSB_FILES
|
||||
OTHER_FILES += $$SHADERS $$QSB_FILES
|
||||
|
||||
DYNAMIC_SHADER = $$SHADERS_DIR/terminal_dynamic.frag
|
||||
STATIC_SHADER = $$SHADERS_DIR/terminal_static.frag
|
||||
|
||||
RASTER_MODES = 0 1 2 3
|
||||
BINARY_FLAGS = 0 1
|
||||
VARIANT_SHADER_DIR = $$relative_path($$PWD/shaders, $$OUT_PWD)
|
||||
|
||||
for(raster_mode, RASTER_MODES) {
|
||||
for(burn_in, BINARY_FLAGS) {
|
||||
for(display_frame, BINARY_FLAGS) {
|
||||
for(chroma_on, BINARY_FLAGS) {
|
||||
dynamic_variant = terminal_dynamic_raster$${raster_mode}_burn$${burn_in}_frame$${display_frame}_chroma$${chroma_on}
|
||||
dynamic_output = $${VARIANT_SHADER_DIR}/$${dynamic_variant}.frag.qsb
|
||||
dynamic_target = shader_variant_$${dynamic_variant}
|
||||
$${dynamic_target}.target = $${dynamic_output}
|
||||
$${dynamic_target}.depends = $$DYNAMIC_SHADER
|
||||
$${dynamic_target}.commands = $$QSB_BIN --glsl \"100 es,120,150\" --hlsl 50 --msl 12 --qt6 -DCRT_RASTER_MODE=$${raster_mode} -DCRT_BURN_IN=$${burn_in} -DCRT_DISPLAY_FRAME=$${display_frame} -DCRT_CHROMA=$${chroma_on} -o $${dynamic_output} $$DYNAMIC_SHADER
|
||||
QMAKE_EXTRA_TARGETS += $${dynamic_target}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(rgb_shift, BINARY_FLAGS) {
|
||||
for(chroma_on, BINARY_FLAGS) {
|
||||
for(bloom_on, BINARY_FLAGS) {
|
||||
for(curve_on, BINARY_FLAGS) {
|
||||
static_variant = terminal_static_rgb$${rgb_shift}_chroma$${chroma_on}_bloom$${bloom_on}_curve$${curve_on}
|
||||
static_output = $${VARIANT_SHADER_DIR}/$${static_variant}.frag.qsb
|
||||
static_target = shader_variant_$${static_variant}
|
||||
$${static_target}.target = $${static_output}
|
||||
$${static_target}.depends = $$STATIC_SHADER
|
||||
$${static_target}.commands = $$QSB_BIN --glsl \"100 es,120,150\" --hlsl 50 --msl 12 --qt6 -DCRT_RGB_SHIFT=$${rgb_shift} -DCRT_CHROMA=$${chroma_on} -DCRT_BLOOM=$${bloom_on} -DCRT_CURVATURE=$${curve_on} -o $${static_output} $$STATIC_SHADER
|
||||
QMAKE_EXTRA_TARGETS += $${static_target}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#########################################
|
||||
## INTALLS
|
||||
#########################################
|
||||
|
||||
@@ -105,6 +105,8 @@ Loader {
|
||||
ShaderEffect {
|
||||
id: burnInShaderEffect
|
||||
|
||||
property real time: timeManager.time
|
||||
|
||||
property variant txt_source: kterminalSource
|
||||
property variant burnInSource: burnInEffectSource
|
||||
property real burnInTime: burnInFadeTime
|
||||
@@ -114,37 +116,8 @@ Loader {
|
||||
anchors.fill: parent
|
||||
blending: false
|
||||
|
||||
// Extra uniforms required by shared block
|
||||
property real qt_Opacity: 1.0
|
||||
property real time: timeManager.time
|
||||
property color fontColor: appSettings.fontColor
|
||||
property color backgroundColor: appSettings.backgroundColor
|
||||
property real shadowLength: 0
|
||||
property size virtualResolution: Qt.size(width, height)
|
||||
property real rasterizationIntensity: 0
|
||||
property int rasterizationMode: 0
|
||||
property real burnIn: appSettings.burnIn
|
||||
property real staticNoise: 0
|
||||
property real screenCurvature: 0
|
||||
property real glowingLine: 0
|
||||
property real chromaColor: 0
|
||||
property size jitterDisplacement: Qt.size(0, 0)
|
||||
property real ambientLight: 0
|
||||
property real jitter: 0
|
||||
property real horizontalSync: 0
|
||||
property real horizontalSyncStrength: 0
|
||||
property real flickering: 0
|
||||
property real displayTerminalFrame: 0
|
||||
property size scaleNoiseSize: Qt.size(0, 0)
|
||||
property real screen_brightness: 1.0
|
||||
property real bloom: 0
|
||||
property real rbgShift: 0
|
||||
property real frameShadowCoeff: 0
|
||||
property real frameShininess: 0
|
||||
property color frameColor: backgroundColor
|
||||
property real frameSize: 0
|
||||
fragmentShader: "qrc:/shaders/burn_in.frag.qsb"
|
||||
vertexShader: "qrc:/shaders/passthrough.vert.qsb"
|
||||
vertexShader: "qrc:/shaders/burn_in.vert.qsb"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
|
||||
@@ -23,6 +23,30 @@ import QtQuick 2.2
|
||||
import "utils.js" as Utils
|
||||
|
||||
Item {
|
||||
function dynamicFragmentPath() {
|
||||
var rasterMode = appSettings.rasterization;
|
||||
var burnInOn = appSettings.burnIn > 0 ? 1 : 0;
|
||||
var frameOn = (appSettings._frameSize > 0 || appSettings.screenCurvature > 0) ? 1 : 0;
|
||||
var chromaOn = appSettings.chromaColor > 0 ? 1 : 0;
|
||||
return "qrc:/shaders/terminal_dynamic_raster" + rasterMode +
|
||||
"_burn" + burnInOn +
|
||||
"_frame" + frameOn +
|
||||
"_chroma" + chromaOn +
|
||||
".frag.qsb";
|
||||
}
|
||||
|
||||
function staticFragmentPath() {
|
||||
var rgbShiftOn = appSettings.rbgShift > 0 ? 1 : 0;
|
||||
var chromaOn = appSettings.chromaColor > 0 ? 1 : 0;
|
||||
var bloomOn = appSettings.bloom > 0 ? 1 : 0;
|
||||
var curvatureOn = (appSettings.screenCurvature > 0 || appSettings.frameSize > 0) ? 1 : 0;
|
||||
return "qrc:/shaders/terminal_static_rgb" + rgbShiftOn +
|
||||
"_chroma" + chromaOn +
|
||||
"_bloom" + bloomOn +
|
||||
"_curve" + curvatureOn +
|
||||
".frag.qsb";
|
||||
}
|
||||
|
||||
property ShaderEffectSource source
|
||||
property BurnInEffect burnInEffect
|
||||
property ShaderEffectSource bloomSource
|
||||
@@ -69,7 +93,6 @@ Item {
|
||||
|
||||
property real jitter: appSettings.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 staticNoise: appSettings.staticNoise
|
||||
property size scaleNoiseSize: Qt.size((width * 0.75) / (noiseTexture.width * appSettings.windowScaling * appSettings.totalFontScaling),
|
||||
(height * 0.75) / (noiseTexture.height * appSettings.windowScaling * appSettings.totalFontScaling))
|
||||
@@ -79,21 +102,13 @@ Item {
|
||||
// Rasterization might display oversamping issues if virtual resolution is close to physical display resolution.
|
||||
// We progressively disable rasterization from 4x up to 2x resolution.
|
||||
property real rasterizationIntensity: Utils.smoothstep(2.0, 4.0, _screenDensity)
|
||||
property int rasterizationMode: appSettings.rasterization
|
||||
|
||||
property real displayTerminalFrame: appSettings._frameSize > 0 || appSettings.screenCurvature > 0
|
||||
|
||||
property real time: timeManager.time
|
||||
property ShaderEffectSource noiseSource: noiseShaderSource
|
||||
|
||||
// Extra uniforms expected by the shared uniform block
|
||||
property real frameShadowCoeff: 0
|
||||
property color frameColor: backgroundColor
|
||||
property real frameSize: appSettings.frameSize
|
||||
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
||||
property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
|
||||
property real bloom: appSettings.bloom
|
||||
property real rbgShift: (appSettings.rbgShift / Math.max(width, 1)) * appSettings.totalFontScaling
|
||||
property real frameShininess: appSettings.frameShininess
|
||||
|
||||
anchors.fill: parent
|
||||
@@ -116,7 +131,7 @@ Item {
|
||||
}
|
||||
|
||||
vertexShader: "qrc:/shaders/terminal_dynamic.vert.qsb"
|
||||
fragmentShader: "qrc:/shaders/terminal_dynamic.frag.qsb"
|
||||
fragmentShader: dynamicFragmentPath()
|
||||
|
||||
onStatusChanged: if (log) console.log(log)
|
||||
}
|
||||
@@ -167,43 +182,15 @@ Item {
|
||||
|
||||
property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling
|
||||
|
||||
property int rasterization: appSettings.rasterization
|
||||
|
||||
property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
|
||||
|
||||
property real ambientLight: parent.ambientLight
|
||||
|
||||
property size virtualResolution: parent.virtualResolution
|
||||
property real frameShininess: appSettings.frameShininess
|
||||
|
||||
// Extra uniforms to match shared uniform block
|
||||
property real time: timeManager.time
|
||||
property real shadowLength: 0
|
||||
property real rasterizationIntensity: Utils.smoothstep(2.0, 4.0, _screenDensity)
|
||||
property int rasterizationMode: appSettings.rasterization
|
||||
property real burnInLastUpdate: burnInEffect.lastUpdate
|
||||
property real burnInTime: burnInEffect.burnInFadeTime
|
||||
property real burnIn: appSettings.burnIn
|
||||
property real staticNoise: appSettings.staticNoise
|
||||
property real glowingLine: appSettings.glowingLine * 0.2
|
||||
property size jitterDisplacement: Qt.size(0, 0)
|
||||
property real jitter: appSettings.jitter
|
||||
property real horizontalSync: appSettings.horizontalSync
|
||||
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
||||
property real flickering: appSettings.flickering
|
||||
property real displayTerminalFrame: dynamicShader.displayTerminalFrame
|
||||
property size scaleNoiseSize: Qt.size((width * 0.75) / (512 * appSettings.windowScaling * appSettings.totalFontScaling),
|
||||
(height * 0.75) / (512 * appSettings.windowScaling * appSettings.totalFontScaling))
|
||||
property real frameShadowCoeff: 0
|
||||
property color frameColor: backgroundColor
|
||||
property real frameSize: appSettings.frameSize
|
||||
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
||||
|
||||
blending: false
|
||||
visible: false
|
||||
|
||||
vertexShader: "qrc:/shaders/passthrough.vert.qsb"
|
||||
fragmentShader: "qrc:/shaders/terminal_static.frag.qsb"
|
||||
vertexShader: "qrc:/shaders/terminal_static.vert.qsb"
|
||||
fragmentShader: staticFragmentPath()
|
||||
|
||||
onStatusChanged: if (log) console.log(log)
|
||||
}
|
||||
|
||||
@@ -42,35 +42,9 @@ ShaderEffect {
|
||||
|
||||
property real frameSize: appSettings.frameSize
|
||||
|
||||
// Uniforms required by the shared block
|
||||
property real qt_Opacity: 1.0
|
||||
property real time: timeManager.time
|
||||
property color fontColor: appSettings.fontColor
|
||||
property color backgroundColor: appSettings.backgroundColor
|
||||
property real shadowLength: 0
|
||||
property size virtualResolution: Qt.size(width, height)
|
||||
property real rasterizationIntensity: 0
|
||||
property int rasterizationMode: 0
|
||||
property real burnInLastUpdate: 0
|
||||
property real burnInTime: 0
|
||||
property real burnIn: 0
|
||||
property real staticNoise: 0
|
||||
property real glowingLine: 0
|
||||
property real chromaColor: 0
|
||||
property size jitterDisplacement: Qt.size(0, 0)
|
||||
property real ambientLight: _ambientLight
|
||||
property real jitter: 0
|
||||
property real horizontalSync: 0
|
||||
property real horizontalSyncStrength: 0
|
||||
property real flickering: 0
|
||||
property real displayTerminalFrame: 0
|
||||
property size scaleNoiseSize: Qt.size(0, 0)
|
||||
property real screen_brightness: 1.0
|
||||
property real bloom: 0
|
||||
property real rbgShift: 0
|
||||
property real prevLastUpdate: 0
|
||||
|
||||
vertexShader: "qrc:/shaders/passthrough.vert.qsb"
|
||||
vertexShader: "qrc:/shaders/terminal_frame.vert.qsb"
|
||||
fragmentShader: "qrc:/shaders/terminal_frame.frag.qsb"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
|
||||
@@ -45,9 +45,57 @@
|
||||
<file>ShaderLibrary.qml</file>
|
||||
<file>menus/OSXMenu.qml</file>
|
||||
<file>../shaders/terminal_dynamic.vert.qsb</file>
|
||||
<file>../shaders/terminal_dynamic.frag.qsb</file>
|
||||
<file>../shaders/passthrough.vert.qsb</file>
|
||||
<file>../shaders/terminal_static.frag.qsb</file>
|
||||
<file>../shaders/terminal_static.vert.qsb</file>
|
||||
<file>../shaders/terminal_frame.vert.qsb</file>
|
||||
<file>../shaders/burn_in.vert.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn0_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn0_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn0_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn0_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn1_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn1_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn1_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster0_burn1_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn0_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn0_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn0_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn0_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn1_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn1_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn1_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster1_burn1_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn0_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn0_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn0_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn0_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn1_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn1_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn1_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster2_burn1_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn0_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn0_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn0_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn0_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn1_frame0_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn1_frame0_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn1_frame1_chroma0.frag.qsb</file>
|
||||
<file>../shaders/terminal_dynamic_raster3_burn1_frame1_chroma1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma0_bloom0_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma0_bloom0_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma0_bloom1_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma0_bloom1_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma1_bloom0_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma1_bloom0_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma1_bloom1_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb0_chroma1_bloom1_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma0_bloom0_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma0_bloom0_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma0_bloom1_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma0_bloom1_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma1_bloom0_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma1_bloom0_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma1_bloom1_curve0.frag.qsb</file>
|
||||
<file>../shaders/terminal_static_rgb1_chroma1_bloom1_curve1.frag.qsb</file>
|
||||
<file>../shaders/terminal_frame.frag.qsb</file>
|
||||
<file>../shaders/burn_in.frag.qsb</file>
|
||||
<file>fonts/unscii/unscii-8-thin.ttf</file>
|
||||
|
||||
@@ -6,33 +6,8 @@ layout(location = 0) out vec4 fragColor;
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float time;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float shadowLength;
|
||||
vec2 virtualResolution;
|
||||
float rasterizationIntensity;
|
||||
int rasterizationMode;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float burnIn;
|
||||
float staticNoise;
|
||||
float screenCurvature;
|
||||
float glowingLine;
|
||||
float chromaColor;
|
||||
vec2 jitterDisplacement;
|
||||
float ambientLight;
|
||||
float jitter;
|
||||
float horizontalSync;
|
||||
float horizontalSyncStrength;
|
||||
float flickering;
|
||||
float displayTerminalFrame;
|
||||
vec2 scaleNoiseSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
float rbgShift;
|
||||
float frameShadowCoeff;
|
||||
vec4 frameColor;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
|
||||
Binary file not shown.
19
app/shaders/burn_in.vert
Normal file
19
app/shaders/burn_in.vert
Normal file
@@ -0,0 +1,19 @@
|
||||
#version 440
|
||||
|
||||
layout(location = 0) in vec4 qt_Vertex;
|
||||
layout(location = 1) in vec2 qt_MultiTexCoord0;
|
||||
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
layout(location = 0) out vec2 qt_TexCoord0;
|
||||
|
||||
void main() {
|
||||
qt_TexCoord0 = qt_MultiTexCoord0;
|
||||
gl_Position = qt_Matrix * qt_Vertex;
|
||||
}
|
||||
BIN
app/shaders/burn_in.vert.qsb
Normal file
BIN
app/shaders/burn_in.vert.qsb
Normal file
Binary file not shown.
@@ -1,5 +1,18 @@
|
||||
#version 440
|
||||
|
||||
#ifndef CRT_RASTER_MODE
|
||||
#define CRT_RASTER_MODE 0
|
||||
#endif
|
||||
#ifndef CRT_BURN_IN
|
||||
#define CRT_BURN_IN 1
|
||||
#endif
|
||||
#ifndef CRT_DISPLAY_FRAME
|
||||
#define CRT_DISPLAY_FRAME 1
|
||||
#endif
|
||||
#ifndef CRT_CHROMA
|
||||
#define CRT_CHROMA 1
|
||||
#endif
|
||||
|
||||
layout(location = 0) in vec2 qt_TexCoord0;
|
||||
layout(location = 1) in float vBrightness;
|
||||
layout(location = 2) in float vDistortionScale;
|
||||
@@ -13,10 +26,8 @@ layout(std140, binding = 0) uniform ubuf {
|
||||
float time;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float shadowLength;
|
||||
vec2 virtualResolution;
|
||||
float rasterizationIntensity;
|
||||
int rasterizationMode;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float burnIn;
|
||||
@@ -32,14 +43,8 @@ layout(std140, binding = 0) uniform ubuf {
|
||||
float flickering;
|
||||
float displayTerminalFrame;
|
||||
vec2 scaleNoiseSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
float rbgShift;
|
||||
float frameShadowCoeff;
|
||||
float frameShininess;
|
||||
vec4 frameColor;
|
||||
float frameSize;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
layout(binding = 0) uniform sampler2D noiseSource;
|
||||
@@ -59,53 +64,57 @@ vec2 distortCoordinates(vec2 coords){
|
||||
return (paddedCoords + cc * (1.0 + dist) * dist);
|
||||
}
|
||||
|
||||
vec3 applyRasterization(vec2 screenCoords, vec3 texel, vec2 virtualRes, float intensity, int mode) {
|
||||
if (intensity <= 0.0 || mode == 0) {
|
||||
vec3 applyRasterization(vec2 screenCoords, vec3 texel, vec2 virtualRes, float intensity) {
|
||||
#if CRT_RASTER_MODE == 0
|
||||
return texel;
|
||||
#else
|
||||
if (intensity <= 0.0) {
|
||||
return texel;
|
||||
}
|
||||
|
||||
const float INTENSITY = 0.30;
|
||||
const float BRIGHTBOOST = 0.30;
|
||||
|
||||
if (mode == 1) { // scanline
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
||||
#if CRT_RASTER_MODE == 1
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
||||
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
float mask = 1.0 - abs(coords.y);
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
float mask = 1.0 - abs(coords.y);
|
||||
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
} else if (mode == 2) { // pixel
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
#elif CRT_RASTER_MODE == 2
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
|
||||
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
coords = coords * coords;
|
||||
float mask = 1.0 - coords.x - coords.y;
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
coords = coords * coords;
|
||||
float mask = 1.0 - coords.x - coords.y;
|
||||
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
} else if (mode == 3) { // subpixel
|
||||
const float SUBPIXELS = 3.0;
|
||||
vec3 offsets = vec3(3.141592654) * vec3(0.5, 0.5 - 2.0 / 3.0, 0.5 - 4.0 / 3.0);
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
#elif CRT_RASTER_MODE == 3
|
||||
const float SUBPIXELS = 3.0;
|
||||
vec3 offsets = vec3(3.141592654) * vec3(0.5, 0.5 - 2.0 / 3.0, 0.5 - 4.0 / 3.0);
|
||||
|
||||
vec2 omega = vec2(3.141592654) * vec2(2.0) * virtualRes;
|
||||
vec2 angle = screenCoords * omega;
|
||||
vec3 xfactors = (SUBPIXELS + sin(angle.x + offsets)) / (SUBPIXELS + 1.0);
|
||||
vec2 omega = vec2(3.141592654) * vec2(2.0) * virtualRes;
|
||||
vec2 angle = screenCoords * omega;
|
||||
vec3 xfactors = (SUBPIXELS + sin(angle.x + offsets)) / (SUBPIXELS + 1.0);
|
||||
|
||||
vec3 result = texel * xfactors;
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * result)) * result;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * result)) * result;
|
||||
vec3 result = texel * xfactors;
|
||||
vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * result)) * result;
|
||||
vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * result)) * result;
|
||||
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
float mask = 1.0 - abs(coords.y);
|
||||
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
}
|
||||
vec2 coords = fract(screenCoords * virtualRes) * 2.0 - vec2(1.0);
|
||||
float mask = 1.0 - abs(coords.y);
|
||||
|
||||
vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
|
||||
return mix(texel, rasterizationColor, intensity);
|
||||
#else
|
||||
return texel;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
float randomPass(vec2 coords){
|
||||
@@ -113,11 +122,13 @@ float randomPass(vec2 coords){
|
||||
}
|
||||
|
||||
vec3 convertWithChroma(vec3 inColor) {
|
||||
#if CRT_CHROMA == 1
|
||||
vec3 outColor = fontColor.rgb * rgb2grey(inColor);
|
||||
if (chromaColor != 0.0) {
|
||||
outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);
|
||||
}
|
||||
outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);
|
||||
return outColor;
|
||||
#else
|
||||
return fontColor.rgb * rgb2grey(inColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
void main() {
|
||||
@@ -140,15 +151,15 @@ void main() {
|
||||
|
||||
vec3 txt_color = texture(screenBuffer, txt_coords).rgb;
|
||||
|
||||
if (burnIn > 0.0) {
|
||||
vec4 txt_blur = texture(burnInSource, staticCoords);
|
||||
float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
|
||||
vec3 burnInColor = 0.65 * (txt_blur.rgb - vec3(blurDecay));
|
||||
txt_color = max(txt_color, convertWithChroma(burnInColor));
|
||||
}
|
||||
#if CRT_BURN_IN == 1
|
||||
vec4 txt_blur = texture(burnInSource, staticCoords);
|
||||
float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
|
||||
vec3 burnInColor = 0.65 * (txt_blur.rgb - vec3(blurDecay));
|
||||
txt_color = max(txt_color, convertWithChroma(burnInColor));
|
||||
#endif
|
||||
|
||||
txt_color += fontColor.rgb * vec3(color);
|
||||
txt_color = applyRasterization(staticCoords, txt_color, virtualResolution, rasterizationIntensity, rasterizationMode);
|
||||
txt_color = applyRasterization(staticCoords, txt_color, virtualResolution, rasterizationIntensity);
|
||||
|
||||
vec3 finalColor = txt_color;
|
||||
float brightness = mix(1.0, vBrightness, step(0.0, flickering));
|
||||
@@ -156,12 +167,12 @@ void main() {
|
||||
|
||||
finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);
|
||||
|
||||
if (displayTerminalFrame > 0.0) {
|
||||
vec4 frameColor = texture(frameSource, qt_TexCoord0);
|
||||
vec3 reflection = max(finalColor - backgroundColor.rgb, vec3(0.0));
|
||||
reflection *= frameShininess;
|
||||
finalColor = mix(finalColor, frameColor.rgb + reflection, frameColor.a);
|
||||
}
|
||||
#if CRT_DISPLAY_FRAME == 1
|
||||
vec4 frameColor = texture(frameSource, qt_TexCoord0);
|
||||
vec3 reflection = max(finalColor - backgroundColor.rgb, vec3(0.0));
|
||||
reflection *= frameShininess;
|
||||
finalColor = mix(finalColor, frameColor.rgb + reflection, frameColor.a);
|
||||
#endif
|
||||
|
||||
fragColor = vec4(finalColor, qt_Opacity);
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -9,10 +9,8 @@ layout(std140, binding = 0) uniform ubuf {
|
||||
float time;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float shadowLength;
|
||||
vec2 virtualResolution;
|
||||
float rasterizationIntensity;
|
||||
int rasterizationMode;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float burnIn;
|
||||
@@ -28,14 +26,8 @@ layout(std140, binding = 0) uniform ubuf {
|
||||
float flickering;
|
||||
float displayTerminalFrame;
|
||||
vec2 scaleNoiseSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
float rbgShift;
|
||||
float frameShadowCoeff;
|
||||
float frameShininess;
|
||||
vec4 frameColor;
|
||||
float frameSize;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
layout(binding = 0) uniform sampler2D noiseSource;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -6,36 +6,9 @@ layout(location = 0) out vec4 fragColor;
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float time;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float shadowLength;
|
||||
vec2 virtualResolution;
|
||||
float rasterizationIntensity;
|
||||
int rasterizationMode;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float burnIn;
|
||||
float staticNoise;
|
||||
float screenCurvature;
|
||||
float glowingLine;
|
||||
float chromaColor;
|
||||
vec2 jitterDisplacement;
|
||||
float ambientLight;
|
||||
float jitter;
|
||||
float horizontalSync;
|
||||
float horizontalSyncStrength;
|
||||
float flickering;
|
||||
float displayTerminalFrame;
|
||||
vec2 scaleNoiseSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
float rbgShift;
|
||||
float frameShadowCoeff;
|
||||
float frameShininess;
|
||||
vec4 frameColor;
|
||||
float frameSize;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
float min2(vec2 v) { return min(v.x, v.y); }
|
||||
|
||||
Binary file not shown.
19
app/shaders/terminal_frame.vert
Normal file
19
app/shaders/terminal_frame.vert
Normal file
@@ -0,0 +1,19 @@
|
||||
#version 440
|
||||
|
||||
layout(location = 0) in vec4 qt_Vertex;
|
||||
layout(location = 1) in vec2 qt_MultiTexCoord0;
|
||||
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float screenCurvature;
|
||||
vec4 frameColor;
|
||||
float frameSize;
|
||||
};
|
||||
|
||||
layout(location = 0) out vec2 qt_TexCoord0;
|
||||
|
||||
void main() {
|
||||
qt_TexCoord0 = qt_MultiTexCoord0;
|
||||
gl_Position = qt_Matrix * qt_Vertex;
|
||||
}
|
||||
BIN
app/shaders/terminal_frame.vert.qsb
Normal file
BIN
app/shaders/terminal_frame.vert.qsb
Normal file
Binary file not shown.
@@ -1,41 +1,33 @@
|
||||
#version 440
|
||||
|
||||
#ifndef CRT_RGB_SHIFT
|
||||
#define CRT_RGB_SHIFT 1
|
||||
#endif
|
||||
#ifndef CRT_CHROMA
|
||||
#define CRT_CHROMA 1
|
||||
#endif
|
||||
#ifndef CRT_BLOOM
|
||||
#define CRT_BLOOM 1
|
||||
#endif
|
||||
#ifndef CRT_CURVATURE
|
||||
#define CRT_CURVATURE 1
|
||||
#endif
|
||||
|
||||
layout(location = 0) in vec2 qt_TexCoord0;
|
||||
layout(location = 0) out vec4 fragColor;
|
||||
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float time;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float shadowLength;
|
||||
vec2 virtualResolution;
|
||||
float rasterizationIntensity;
|
||||
int rasterizationMode;
|
||||
float burnInLastUpdate;
|
||||
float burnInTime;
|
||||
float burnIn;
|
||||
float staticNoise;
|
||||
float screenCurvature;
|
||||
float glowingLine;
|
||||
float chromaColor;
|
||||
vec2 jitterDisplacement;
|
||||
float ambientLight;
|
||||
float jitter;
|
||||
float horizontalSync;
|
||||
float horizontalSyncStrength;
|
||||
float flickering;
|
||||
float displayTerminalFrame;
|
||||
vec2 scaleNoiseSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
float rbgShift;
|
||||
float frameShadowCoeff;
|
||||
float frameShininess;
|
||||
vec4 frameColor;
|
||||
float frameSize;
|
||||
float prevLastUpdate;
|
||||
};
|
||||
|
||||
layout(binding = 1) uniform sampler2D source;
|
||||
@@ -53,11 +45,13 @@ vec2 distortCoordinates(vec2 coords){
|
||||
}
|
||||
|
||||
vec3 convertWithChroma(vec3 inColor) {
|
||||
#if CRT_CHROMA == 1
|
||||
vec3 outColor = fontColor.rgb * rgb2grey(inColor);
|
||||
if (chromaColor != 0.0) {
|
||||
outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);
|
||||
}
|
||||
outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);
|
||||
return outColor;
|
||||
#else
|
||||
return fontColor.rgb * rgb2grey(inColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
void main() {
|
||||
@@ -68,44 +62,49 @@ void main() {
|
||||
float isScreen = 1.0;
|
||||
|
||||
vec2 txt_coords = qt_TexCoord0;
|
||||
if (screenCurvature > 0.0 || frameSize > 0.0) {
|
||||
vec2 curvatureCoords = distortCoordinates(qt_TexCoord0);
|
||||
shownDraw = max2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||
isScreen = min2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||
isReflection = shownDraw - isScreen;
|
||||
txt_coords = -2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;
|
||||
}
|
||||
#if CRT_CURVATURE == 1
|
||||
vec2 curvatureCoords = distortCoordinates(qt_TexCoord0);
|
||||
shownDraw = max2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||
isScreen = min2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||
isReflection = shownDraw - isScreen;
|
||||
txt_coords = -2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;
|
||||
#endif
|
||||
|
||||
vec3 txt_color = texture(source, txt_coords).rgb;
|
||||
|
||||
if (rbgShift > 0.0) {
|
||||
vec2 displacement = vec2(12.0, 0.0) * rbgShift;
|
||||
vec3 rightColor = texture(source, txt_coords + displacement).rgb;
|
||||
vec3 leftColor = texture(source, txt_coords - displacement).rgb;
|
||||
txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
|
||||
txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
|
||||
txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
|
||||
}
|
||||
#if CRT_RGB_SHIFT == 1
|
||||
vec2 displacement = vec2(12.0, 0.0) * rbgShift;
|
||||
vec3 rightColor = texture(source, txt_coords + displacement).rgb;
|
||||
vec3 leftColor = texture(source, txt_coords - displacement).rgb;
|
||||
txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
|
||||
txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
|
||||
txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
|
||||
#endif
|
||||
|
||||
txt_color += vec3(0.0001);
|
||||
float greyscale_color = rgb2grey(txt_color);
|
||||
|
||||
vec3 finalColor;
|
||||
if (chromaColor > 0.0) {
|
||||
vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
|
||||
finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color * shownDraw);
|
||||
} else {
|
||||
finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color * shownDraw);
|
||||
}
|
||||
#if CRT_CHROMA == 1
|
||||
vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
|
||||
finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color * shownDraw);
|
||||
#else
|
||||
finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color * shownDraw);
|
||||
#endif
|
||||
|
||||
vec3 bloomColor;
|
||||
float bloomAlpha;
|
||||
#if CRT_BLOOM == 1
|
||||
vec4 bloomFullColor = texture(bloomSource, txt_coords);
|
||||
vec3 bloomColor = convertWithChroma(bloomFullColor.rgb);
|
||||
float bloomAlpha = bloomFullColor.a;
|
||||
bloomColor = convertWithChroma(bloomFullColor.rgb);
|
||||
bloomAlpha = bloomFullColor.a;
|
||||
|
||||
if (bloom > 0.0) {
|
||||
vec3 bloomOnScreen = bloomColor * isScreen;
|
||||
finalColor += clamp(bloomOnScreen * bloom * bloomAlpha, 0.0, 0.5);
|
||||
}
|
||||
vec3 bloomOnScreen = bloomColor * isScreen;
|
||||
finalColor += clamp(bloomOnScreen * bloom * bloomAlpha, 0.0, 0.5);
|
||||
#else
|
||||
bloomColor = finalColor;
|
||||
bloomAlpha = 0.0;
|
||||
#endif
|
||||
|
||||
if (frameShininess > 0.0) {
|
||||
float shine = clamp(frameShininess, 0.0, 1.0);
|
||||
|
||||
Binary file not shown.
25
app/shaders/terminal_static.vert
Normal file
25
app/shaders/terminal_static.vert
Normal file
@@ -0,0 +1,25 @@
|
||||
#version 440
|
||||
|
||||
layout(location = 0) in vec4 qt_Vertex;
|
||||
layout(location = 1) in vec2 qt_MultiTexCoord0;
|
||||
|
||||
layout(std140, binding = 0) uniform ubuf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
vec4 fontColor;
|
||||
vec4 backgroundColor;
|
||||
float screenCurvature;
|
||||
float chromaColor;
|
||||
float rbgShift;
|
||||
float frameShininess;
|
||||
float frameSize;
|
||||
float screen_brightness;
|
||||
float bloom;
|
||||
};
|
||||
|
||||
layout(location = 0) out vec2 qt_TexCoord0;
|
||||
|
||||
void main() {
|
||||
qt_TexCoord0 = qt_MultiTexCoord0;
|
||||
gl_Position = qt_Matrix * qt_Vertex;
|
||||
}
|
||||
BIN
app/shaders/terminal_static.vert.qsb
Normal file
BIN
app/shaders/terminal_static.vert.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom0_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom0_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom0_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom0_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom1_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom1_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom1_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma0_bloom1_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom0_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom0_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom0_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom0_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom1_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom1_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom1_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb0_chroma1_bloom1_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom0_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom0_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom0_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom0_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom1_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom1_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom1_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma0_bloom1_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom0_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom0_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom0_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom0_curve1.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom1_curve0.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom1_curve0.frag.qsb
Normal file
Binary file not shown.
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom1_curve1.frag.qsb
Normal file
BIN
app/shaders/terminal_static_rgb1_chroma1_bloom1_curve1.frag.qsb
Normal file
Binary file not shown.
Reference in New Issue
Block a user