mirror of
https://github.com/italicsjenga/slang-shaders.git
synced 2024-11-22 15:51:30 +11:00
update pokefan's handheld color shaders
This commit is contained in:
parent
9ed0fc60ed
commit
93baa7ffac
6
handheld/NSO-gba-color.slangp
Normal file
6
handheld/NSO-gba-color.slangp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
shaders = 1
|
||||||
|
|
||||||
|
shader0 = shaders/color/NSO-gba-color.slang
|
||||||
|
filter_linear0 = false
|
||||||
|
scale_type0 = source
|
||||||
|
scale0 = 1.0
|
6
handheld/NSO-gbc-color.slangp
Normal file
6
handheld/NSO-gbc-color.slangp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
shaders = 1
|
||||||
|
|
||||||
|
shader0 = shaders/color/NSO-gbc-color.slang
|
||||||
|
filter_linear0 = false
|
||||||
|
scale_type0 = source
|
||||||
|
scale0 = 1.0
|
6
handheld/SP101-color.slangp
Normal file
6
handheld/SP101-color.slangp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
shaders = 1
|
||||||
|
|
||||||
|
shader0 = shaders/color/sp101-color.slang
|
||||||
|
filter_linear0 = false
|
||||||
|
scale_type0 = source
|
||||||
|
scale0 = 1.0
|
6
handheld/SwitchOLED-color.slangp
Normal file
6
handheld/SwitchOLED-color.slangp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
shaders = 1
|
||||||
|
|
||||||
|
shader0 = shaders/color/SwitchOLED-color.slang
|
||||||
|
filter_linear0 = false
|
||||||
|
scale_type0 = source
|
||||||
|
scale0 = 1.0
|
6
handheld/gbc-dev.slangp
Normal file
6
handheld/gbc-dev.slangp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
shaders = 1
|
||||||
|
|
||||||
|
shader0 = shaders/color/gbc-dev.slang
|
||||||
|
filter_linear0 = false
|
||||||
|
scale_type_0 = source
|
||||||
|
scale0 = 1.0
|
|
@ -5,28 +5,29 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/gba-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/gba-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR;darken_screen"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "1"
|
||||||
|
darken_screen = "0"
|
||||||
|
|
|
@ -1,27 +1,28 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/gba-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/gba-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR;darken_screen"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "1"
|
||||||
|
darken_screen = "0"
|
||||||
|
|
|
@ -5,28 +5,29 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/gbc-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/gbc-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR;lighten_screen"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "0.0"
|
BGR = "0"
|
||||||
|
lighten_screen = "0"
|
||||||
|
|
|
@ -1,27 +1,28 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/gbc-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/gbc-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR;lighten_screen"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "0.0"
|
BGR = "0"
|
||||||
|
lighten_screen = "0"
|
||||||
|
|
|
@ -5,28 +5,28 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/nds-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/nds-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/nds-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/nds-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -5,28 +5,28 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/palm-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/palm-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/palm-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/palm-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -5,28 +5,28 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/psp-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/psp-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/psp-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/psp-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
32
handheld/lcd-grid-v2-sp101-color-motionblur.slangp
Normal file
32
handheld/lcd-grid-v2-sp101-color-motionblur.slangp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
shaders = "3"
|
||||||
|
|
||||||
|
shader0 = "../motionblur/shaders/response-time.slang"
|
||||||
|
filter_linear0 = "false"
|
||||||
|
scale_type0 = "source"
|
||||||
|
scale0 = "1.0"
|
||||||
|
|
||||||
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
|
filter_linear1 = "false"
|
||||||
|
scale_type1 = "viewport"
|
||||||
|
scale1 = "1.0"
|
||||||
|
|
||||||
|
shader2 = "shaders/color/sp101-color.slang"
|
||||||
|
filter_linear2 = "false"
|
||||||
|
scale_type2 = "source"
|
||||||
|
scale2 = "1.0"
|
||||||
|
|
||||||
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
|
RSUBPIX_R = "1"
|
||||||
|
RSUBPIX_G = "0"
|
||||||
|
RSUBPIX_B = "0"
|
||||||
|
GSUBPIX_R = "0"
|
||||||
|
GSUBPIX_G = "1"
|
||||||
|
GSUBPIX_B = "0"
|
||||||
|
BSUBPIX_R = "0"
|
||||||
|
BSUBPIX_G = "0"
|
||||||
|
BSUBPIX_B = "1"
|
||||||
|
gain = "1"
|
||||||
|
gamma = "2.2"
|
||||||
|
blacklevel = "0"
|
||||||
|
ambient = "0"
|
||||||
|
BGR = "0"
|
27
handheld/lcd-grid-v2-sp101-color.slangp
Normal file
27
handheld/lcd-grid-v2-sp101-color.slangp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
shaders = "2"
|
||||||
|
|
||||||
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
|
filter_linear0 = "false"
|
||||||
|
scale_type0 = "viewport"
|
||||||
|
scale0 = "1.0"
|
||||||
|
|
||||||
|
shader1 = "shaders/color/sp101-color.slang"
|
||||||
|
filter_linear1 = "false"
|
||||||
|
scale_type1 = "source"
|
||||||
|
scale1 = "1.0"
|
||||||
|
|
||||||
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
|
RSUBPIX_R = "1"
|
||||||
|
RSUBPIX_G = "0"
|
||||||
|
RSUBPIX_B = "0"
|
||||||
|
GSUBPIX_R = "0"
|
||||||
|
GSUBPIX_G = "1"
|
||||||
|
GSUBPIX_B = "0"
|
||||||
|
BSUBPIX_R = "0"
|
||||||
|
BSUBPIX_G = "0"
|
||||||
|
BSUBPIX_B = "1"
|
||||||
|
gain = "1"
|
||||||
|
gamma = "2.2"
|
||||||
|
blacklevel = "0"
|
||||||
|
ambient = "0"
|
||||||
|
BGR = "0"
|
|
@ -5,28 +5,28 @@ filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "source"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/color/vba-color.slang"
|
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "source"
|
scale_type1 = "viewport"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader2 = "shaders/color/vba-color.slang"
|
||||||
filter_linear2 = "false"
|
filter_linear2 = "false"
|
||||||
scale_type2 = "viewport"
|
scale_type2 = "source"
|
||||||
scale2 = "1.0"
|
scale2 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
shaders = "2"
|
shaders = "2"
|
||||||
|
|
||||||
shader0 = "shaders/color/vba-color.slang"
|
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||||
filter_linear0 = "false"
|
filter_linear0 = "false"
|
||||||
scale_type0 = "source"
|
scale_type0 = "viewport"
|
||||||
scale0 = "1.0"
|
scale0 = "1.0"
|
||||||
|
|
||||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
shader1 = "shaders/color/vba-color.slang"
|
||||||
filter_linear1 = "false"
|
filter_linear1 = "false"
|
||||||
scale_type1 = "viewport"
|
scale_type1 = "source"
|
||||||
scale1 = "1.0"
|
scale1 = "1.0"
|
||||||
|
|
||||||
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
parameters = "RSUBPIX_R;RSUBPIX_G;RSUBPIX_B;GSUBPIX_R;GSUBPIX_G;GSUBPIX_B;BSUBPIX_R;BSUBPIX_G;BSUBPIX_B;gain;gamma;blacklevel;ambient;BGR"
|
||||||
RSUBPIX_R = "0.750000"
|
RSUBPIX_R = "1"
|
||||||
RSUBPIX_G = "0.000000"
|
RSUBPIX_G = "0"
|
||||||
RSUBPIX_B = "0.000000"
|
RSUBPIX_B = "0"
|
||||||
GSUBPIX_R = "0.000000"
|
GSUBPIX_R = "0"
|
||||||
GSUBPIX_G = "0.750000"
|
GSUBPIX_G = "1"
|
||||||
GSUBPIX_B = "0.000000"
|
GSUBPIX_B = "0"
|
||||||
BSUBPIX_R = "0.000000"
|
BSUBPIX_R = "0"
|
||||||
BSUBPIX_G = "0.000000"
|
BSUBPIX_G = "0"
|
||||||
BSUBPIX_B = "0.750000"
|
BSUBPIX_B = "1"
|
||||||
gain = "1.500000"
|
gain = "1"
|
||||||
gamma = "2.200000"
|
gamma = "2.2"
|
||||||
blacklevel = "0.000000"
|
blacklevel = "0"
|
||||||
ambient = "0.000000"
|
ambient = "0"
|
||||||
BGR = "1.000000"
|
BGR = "0"
|
||||||
|
|
95
handheld/shaders/color/NSO-gba-color.slang
Normal file
95
handheld/shaders/color/NSO-gba-color.slang
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the Nintendo Switch Online's GBA color filter --
|
||||||
|
|
||||||
|
layout(push_constant) uniform Push
|
||||||
|
{
|
||||||
|
float darken_screen;
|
||||||
|
} params;
|
||||||
|
|
||||||
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
float mode;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter darken_screen "Darken Screen" 0.8 0.0 1.0 0.05
|
||||||
|
|
||||||
|
#define target_gamma 2.2
|
||||||
|
#define display_gamma 2.2
|
||||||
|
|
||||||
|
/*
|
||||||
|
We'll define our color weights in this pattern:
|
||||||
|
r, rg, rb, 0.0, //red channel
|
||||||
|
gr, g, gb, 0.0, //green channel
|
||||||
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mat4 GBA_sRGB = mat4(
|
||||||
|
0.865, 0.0575, 0.0575, 0.0, //red channel
|
||||||
|
0.1225, 0.925, 0.1225, 0.0, //green channel
|
||||||
|
0.0125, 0.0125, 0.82, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 GBA_DCI = mat4(
|
||||||
|
0.72, 0.0875, 0.0725, 0.0, //red channel
|
||||||
|
0.2675, 0.9, 0.185, 0.0, //green channel
|
||||||
|
0.0125, 0.0125, 0.7425, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 GBA_Rec2020 = mat4(
|
||||||
|
0.57, 0.115, 0.0725, 0.0, //red channel
|
||||||
|
0.3825, 0.8625, 0.195, 0.0, //green channel
|
||||||
|
0.0475, 0.0225, 0.7325, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
#pragma stage vertex
|
||||||
|
layout(location = 0) in vec4 Position;
|
||||||
|
layout(location = 1) in vec2 TexCoord;
|
||||||
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = global.MVP * Position;
|
||||||
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = GBA_sRGB;
|
||||||
|
else if (color_mode == 2) profile = GBA_DCI;
|
||||||
|
else if (color_mode == 3) profile = GBA_Rec2020;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma stage fragment
|
||||||
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
|
layout(location = 0) out vec4 FragColor;
|
||||||
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// bring out our stored luminance value
|
||||||
|
float lum = profile[3].w;
|
||||||
|
|
||||||
|
// our adjustments need to happen in linear gamma
|
||||||
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + params.darken_screen)).rgba;
|
||||||
|
|
||||||
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
|
screen = profile * screen;
|
||||||
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
|
}
|
96
handheld/shaders/color/NSO-gbc-color.slang
Normal file
96
handheld/shaders/color/NSO-gbc-color.slang
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the Nintendo Switch Online's GBC color filter --
|
||||||
|
// (Experimental WIP shader. Due to how complex the NSO GBC filter used (using different gamma ramps and greyscale temperatures), it couldn't be replicated to a shader as of now completely, so a side effect of using correct color metrics for RGB, is warm greyscales. This is not an issue with NSO GBA Filter which was easy to replicate. If you want an actual NSO GBC replication, use Reshade NSO-GBC shader pack instead that uses Reshade LUT shader)
|
||||||
|
|
||||||
|
layout(push_constant) uniform Push
|
||||||
|
{
|
||||||
|
float lighten_screen;
|
||||||
|
} params;
|
||||||
|
|
||||||
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
float mode;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter lighten_screen "Lighten Screen" 1.0 0.0 1.0 0.05
|
||||||
|
|
||||||
|
#define target_gamma 1.0
|
||||||
|
#define display_gamma 1.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
We'll define our color weights in this pattern:
|
||||||
|
r, rg, rb, 0.0, //red channel
|
||||||
|
gr, g, gb, 0.0, //green channel
|
||||||
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mat4 GBC_sRGB = mat4(
|
||||||
|
0.84, 0.105, 0.15, 0.0, //red channel
|
||||||
|
0.265, 0.67, 0.30, 0.0, //green channel
|
||||||
|
0.0, 0.24, 0.525, 0.0, //blue channel
|
||||||
|
0.175, 0.18, 0.18, 0.85 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 GBC_DCI = mat4(
|
||||||
|
0.69, 0.17, 0.195, 0.0, //red channel
|
||||||
|
0.31, 0.61, 0.165, 0.0, //green channel
|
||||||
|
0.0, 0.22, 0.64, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 GBC_Rec2020 = mat4(
|
||||||
|
0.57, 0.195, 0.195, 0.0, //red channel
|
||||||
|
0.37, 0.605, 0.175, 0.0, //green channel
|
||||||
|
0.06, 0.22, 0.63, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
#pragma stage vertex
|
||||||
|
layout(location = 0) in vec4 Position;
|
||||||
|
layout(location = 1) in vec2 TexCoord;
|
||||||
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = global.MVP * Position;
|
||||||
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = GBC_sRGB;
|
||||||
|
else if (color_mode == 2) profile = GBC_DCI;
|
||||||
|
else if (color_mode == 3) profile = GBC_Rec2020;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma stage fragment
|
||||||
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
|
layout(location = 0) out vec4 FragColor;
|
||||||
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// bring out our stored luminance value
|
||||||
|
float lum = profile[3].w;
|
||||||
|
|
||||||
|
// our adjustments need to happen in linear gamma
|
||||||
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.lighten_screen * -1.0))).rgba;
|
||||||
|
|
||||||
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
|
screen = profile * screen;
|
||||||
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
|
}
|
112
handheld/shaders/color/SwitchOLED-color.slang
Normal file
112
handheld/shaders/color/SwitchOLED-color.slang
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the Vivid mode of Nintendo Switch OLED Model --
|
||||||
|
|
||||||
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
float mode, white_toggle;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter white_toggle "Full White Scale" 1.0 0.0 1.0 1.0
|
||||||
|
bool white = bool(global.white_toggle);
|
||||||
|
|
||||||
|
#define target_gamma 2.0
|
||||||
|
#define display_gamma 2.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
We'll define our color weights in this pattern:
|
||||||
|
r, rg, rb, 0.0, //red channel
|
||||||
|
gr, g, gb, 0.0, //green channel
|
||||||
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mat4 SWITCH_sRGB = mat4(
|
||||||
|
1.54, -0.045, -0.0225, 0.0, //red channel
|
||||||
|
-0.48, 1.0625, -0.075, 0.0, //green channel
|
||||||
|
-0.06, -0.0175, 1.1025, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.65 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 SWITCH_sRGB_white = mat4(
|
||||||
|
1.54, -0.045, -0.0225, 0.0, //red channel
|
||||||
|
-0.48, 1.0625, -0.075, 0.0, //green channel
|
||||||
|
-0.06, -0.0175, 1.1025, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 SWITCH_DCI = mat4(
|
||||||
|
1.2125, 0.0025, 0.0, 0.0, //red channel
|
||||||
|
-0.1625, 1.02, 0.0, 0.0, //green channel
|
||||||
|
-0.05, -0.0225, 1.0, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.825 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 SWITCH_DCI_white = mat4(
|
||||||
|
1.2125, 0.0025, 0.0, 0.0, //red channel
|
||||||
|
-0.1625, 1.02, 0.0, 0.0, //green channel
|
||||||
|
-0.05, -0.0225, 1.0, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 SWITCH_Rec2020 = mat4(
|
||||||
|
0.865, 0.0475, 0.0, 0.0, //red channel
|
||||||
|
0.12, 0.9575, 0.02, 0.0, //green channel
|
||||||
|
0.015, -0.005, 0.98, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.995 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 SWITCH_Rec2020_white = mat4(
|
||||||
|
0.865, 0.0475, 0.0, 0.0, //red channel
|
||||||
|
0.12, 0.9575, 0.02, 0.0, //green channel
|
||||||
|
0.015, -0.005, 0.98, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
#pragma stage vertex
|
||||||
|
layout(location = 0) in vec4 Position;
|
||||||
|
layout(location = 1) in vec2 TexCoord;
|
||||||
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = global.MVP * Position;
|
||||||
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = (!white) ? SWITCH_sRGB : SWITCH_sRGB_white;
|
||||||
|
else if (color_mode == 2) profile = (!white) ? SWITCH_DCI : SWITCH_DCI_white;
|
||||||
|
else if (color_mode == 3) profile = (!white) ? SWITCH_Rec2020 : SWITCH_Rec2020_white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma stage fragment
|
||||||
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
|
layout(location = 0) out vec4 FragColor;
|
||||||
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// bring out our stored luminance value
|
||||||
|
float lum = profile[3].w;
|
||||||
|
|
||||||
|
// our adjustments need to happen in linear gamma
|
||||||
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
||||||
|
|
||||||
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
|
screen = profile * screen;
|
||||||
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
|
}
|
|
@ -1,5 +1,13 @@
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the LCD Colorspace from Gameboy Advance --
|
||||||
|
|
||||||
layout(push_constant) uniform Push
|
layout(push_constant) uniform Push
|
||||||
{
|
{
|
||||||
float darken_screen;
|
float darken_screen;
|
||||||
|
@ -7,76 +15,81 @@ layout(push_constant) uniform Push
|
||||||
|
|
||||||
layout(std140, set = 0, binding = 0) uniform UBO
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
{
|
{
|
||||||
mat4 MVP;
|
mat4 MVP;
|
||||||
vec4 OutputSize;
|
vec4 OutputSize;
|
||||||
vec4 OriginalSize;
|
vec4 OriginalSize;
|
||||||
vec4 SourceSize;
|
vec4 SourceSize;
|
||||||
|
float mode;
|
||||||
} global;
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter darken_screen "Darken Screen" 0.5 0.0 1.0 0.05
|
||||||
|
|
||||||
|
#define target_gamma 2.0
|
||||||
|
#define display_gamma 2.0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shader Modified: Pokefan531
|
We'll define our color weights in this pattern:
|
||||||
Color Mangler
|
r, rg, rb, 0.0, //red channel
|
||||||
Author: hunterk
|
gr, g, gb, 0.0, //green channel
|
||||||
License: Public domain
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
*/
|
*/
|
||||||
// Shader that replicates the LCD dynamics from a GameBoy Advance
|
|
||||||
|
|
||||||
#pragma parameter darken_screen "Darken Screen" 1.0 -0.25 1.0 0.05
|
const mat4 GBA_sRGB = mat4(
|
||||||
|
0.80, 0.135, 0.195, 0.0, //red channel
|
||||||
|
0.275, 0.64, 0.155, 0.0, //green channel
|
||||||
|
-0.075, 0.225, 0.65, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.93 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
#define target_gamma 2.2
|
const mat4 GBA_DCI = mat4(
|
||||||
#define display_gamma 2.2
|
0.685, 0.16, 0.20, 0.0, //red channel
|
||||||
#define sat 1.0
|
0.34, 0.629, 0.19, 0.0, //green channel
|
||||||
#define lum 0.94
|
-0.025, 0.211, 0.61, 0.0, //blue channel
|
||||||
#define contrast 1.0
|
0.0, 0.0, 0.0, 0.975 //alpha channel
|
||||||
#define blr 0.0
|
);
|
||||||
#define blg 0.0
|
|
||||||
#define blb 0.0
|
const mat4 GBA_Rec2020 = mat4(
|
||||||
#define r 0.82
|
0.555, 0.1825, 0.20, 0.0, //red channel
|
||||||
#define g 0.665
|
0.395, 0.61, 0.195, 0.0, //green channel
|
||||||
#define b 0.73
|
0.05, 0.2075, 0.605, 0.0, //blue channel
|
||||||
#define rg 0.125
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
#define rb 0.195
|
);
|
||||||
#define gr 0.24
|
|
||||||
#define gb 0.075
|
|
||||||
#define br -0.06
|
|
||||||
#define bg 0.21
|
|
||||||
#define overscan_percent_x 0.0
|
|
||||||
#define overscan_percent_y 0.0
|
|
||||||
|
|
||||||
#pragma stage vertex
|
#pragma stage vertex
|
||||||
layout(location = 0) in vec4 Position;
|
layout(location = 0) in vec4 Position;
|
||||||
layout(location = 1) in vec2 TexCoord;
|
layout(location = 1) in vec2 TexCoord;
|
||||||
layout(location = 0) out vec2 vTexCoord;
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = global.MVP * Position;
|
gl_Position = global.MVP * Position;
|
||||||
vTexCoord = TexCoord;
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = GBA_sRGB;
|
||||||
|
else if (color_mode == 2) profile = GBA_DCI;
|
||||||
|
else if (color_mode == 3) profile = GBA_Rec2020;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma stage fragment
|
#pragma stage fragment
|
||||||
layout(location = 0) in vec2 vTexCoord;
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
layout(location = 0) out vec4 FragColor;
|
layout(location = 0) out vec4 FragColor;
|
||||||
layout(set = 0, binding = 2) uniform sampler2D Source;
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + params.darken_screen)).rgba;
|
// bring out our stored luminance value
|
||||||
vec4 avglum = vec4(0.5);
|
float lum = profile[3].w;
|
||||||
screen = mix(screen, avglum, (1.0 - contrast));
|
|
||||||
|
|
||||||
// r g b black
|
// our adjustments need to happen in linear gamma
|
||||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + params.darken_screen)).rgba;
|
||||||
gr, g, gb, 0.0, //green channel
|
|
||||||
br, bg, b, 0.0, //blue channel
|
|
||||||
blr, blg, blb, 0.0); //alpha channel; these numbers do nothing for our purposes.
|
|
||||||
|
|
||||||
mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0,
|
|
||||||
(1.0 - sat) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 1.0,
|
|
||||||
(1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 1.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0);
|
|
||||||
color *= adjust;
|
|
||||||
screen = clamp(screen * lum, 0.0, 1.0);
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
screen = color * screen;
|
screen = profile * screen;
|
||||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
}
|
}
|
|
@ -1,5 +1,13 @@
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the LCD Colorspace from Gameboy Color --
|
||||||
|
|
||||||
layout(push_constant) uniform Push
|
layout(push_constant) uniform Push
|
||||||
{
|
{
|
||||||
float lighten_screen;
|
float lighten_screen;
|
||||||
|
@ -7,76 +15,81 @@ layout(push_constant) uniform Push
|
||||||
|
|
||||||
layout(std140, set = 0, binding = 0) uniform UBO
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
{
|
{
|
||||||
mat4 MVP;
|
mat4 MVP;
|
||||||
vec4 OutputSize;
|
vec4 OutputSize;
|
||||||
vec4 OriginalSize;
|
vec4 OriginalSize;
|
||||||
vec4 SourceSize;
|
vec4 SourceSize;
|
||||||
|
float mode;
|
||||||
} global;
|
} global;
|
||||||
|
|
||||||
/*
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
Shader Modified: Pokefan531
|
int color_mode = int(global.mode);
|
||||||
Color Mangler
|
|
||||||
Author: hunterk
|
|
||||||
License: Public domain
|
|
||||||
*/
|
|
||||||
// Shader that replicates the LCD dynamics from a GameBoy Color
|
|
||||||
|
|
||||||
#pragma parameter lighten_screen "Lighten Screen" 1.0 0.0 1.0 0.05
|
#pragma parameter lighten_screen "Lighten Screen" 1.0 0.0 1.0 0.05
|
||||||
|
|
||||||
#define target_gamma 2.2
|
#define target_gamma 2.2
|
||||||
#define display_gamma 2.2
|
#define display_gamma 2.2
|
||||||
#define sat 1.0
|
|
||||||
#define lum 0.94
|
/*
|
||||||
#define contrast 1.0
|
We'll define our color weights in this pattern:
|
||||||
#define blr 0.0
|
r, rg, rb, 0.0, //red channel
|
||||||
#define blg 0.0
|
gr, g, gb, 0.0, //green channel
|
||||||
#define blb 0.0
|
br, bg, b, 0.0, //blue channel
|
||||||
#define r 0.82
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
#define g 0.665
|
*/
|
||||||
#define b 0.73
|
|
||||||
#define rg 0.125
|
const mat4 GBC_sRGB = mat4(
|
||||||
#define rb 0.195
|
0.80, 0.135, 0.195, 0.0, //red channel
|
||||||
#define gr 0.24
|
0.275, 0.64, 0.155, 0.0, //green channel
|
||||||
#define gb 0.075
|
-0.075, 0.225, 0.65, 0.0, //blue channel
|
||||||
#define br -0.06
|
0.0, 0.0, 0.0, 0.93 //alpha channel
|
||||||
#define bg 0.21
|
);
|
||||||
#define overscan_percent_x 0.0
|
|
||||||
#define overscan_percent_y 0.0
|
const mat4 GBC_DCI = mat4(
|
||||||
|
0.685, 0.16, 0.20, 0.0, //red channel
|
||||||
|
0.34, 0.629, 0.19, 0.0, //green channel
|
||||||
|
-0.025, 0.211, 0.61, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.975 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 GBC_Rec2020 = mat4(
|
||||||
|
0.555, 0.1825, 0.20, 0.0, //red channel
|
||||||
|
0.395, 0.61, 0.195, 0.0, //green channel
|
||||||
|
0.05, 0.2075, 0.605, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
#pragma stage vertex
|
#pragma stage vertex
|
||||||
layout(location = 0) in vec4 Position;
|
layout(location = 0) in vec4 Position;
|
||||||
layout(location = 1) in vec2 TexCoord;
|
layout(location = 1) in vec2 TexCoord;
|
||||||
layout(location = 0) out vec2 vTexCoord;
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = global.MVP * Position;
|
gl_Position = global.MVP * Position;
|
||||||
vTexCoord = TexCoord;
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = GBC_sRGB;
|
||||||
|
else if (color_mode == 2) profile = GBC_DCI;
|
||||||
|
else if (color_mode == 3) profile = GBC_Rec2020;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma stage fragment
|
#pragma stage fragment
|
||||||
layout(location = 0) in vec2 vTexCoord;
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
layout(location = 0) out vec4 FragColor;
|
layout(location = 0) out vec4 FragColor;
|
||||||
layout(set = 0, binding = 2) uniform sampler2D Source;
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.lighten_screen * -1.0))).rgba;
|
// bring out our stored luminance value
|
||||||
vec4 avglum = vec4(0.5);
|
float lum = profile[3].w;
|
||||||
screen = mix(screen, avglum, (1.0 - contrast));
|
|
||||||
|
|
||||||
// r g b black
|
// our adjustments need to happen in linear gamma
|
||||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.lighten_screen * -1.0))).rgba;
|
||||||
gr, g, gb, 0.0, //green channel
|
|
||||||
br, bg, b, 0.0, //blue channel
|
|
||||||
blr, blg, blb, 0.0); //alpha channel; these numbers do nothing for our purposes.
|
|
||||||
|
|
||||||
mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0,
|
|
||||||
(1.0 - sat) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 1.0,
|
|
||||||
(1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 1.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0);
|
|
||||||
color *= adjust;
|
|
||||||
screen = clamp(screen * lum, 0.0, 1.0);
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
screen = color * screen;
|
screen = profile * screen;
|
||||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
}
|
}
|
77
handheld/shaders/color/gbc-dev.slang
Normal file
77
handheld/shaders/color/gbc-dev.slang
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
#version 450
|
||||||
|
/*
|
||||||
|
Author: Pokefan531
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Shader that closely replicates Jeff Frohwein's "Gameboy HiColour Converter" color algorithm.
|
||||||
|
|
||||||
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma stage vertex
|
||||||
|
layout(location = 0) in vec4 Position;
|
||||||
|
layout(location = 1) in vec2 TexCoord;
|
||||||
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = global.MVP * Position;
|
||||||
|
vTexCoord = TexCoord;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma stage fragment
|
||||||
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in vec2 FragCoord;
|
||||||
|
layout(location = 0) out vec4 FragColor;
|
||||||
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
|
|
||||||
|
vec3 grayscale(vec3 col)
|
||||||
|
{
|
||||||
|
// Non-conventional way to do grayscale,
|
||||||
|
// but bSNES uses this as grayscale value.
|
||||||
|
return vec3(dot(col, vec3(0.2126, 0.7152, 0.0722)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
//part 1
|
||||||
|
float saturation = 1.0;
|
||||||
|
float Display_gamma = 2.2;
|
||||||
|
float CRT_gamma = 2.2;
|
||||||
|
float luminance = 1.12;
|
||||||
|
|
||||||
|
vec3 gamma = vec3(CRT_gamma / Display_gamma);
|
||||||
|
vec3 res = texture(Source, vTexCoord).xyz;
|
||||||
|
res = mix(grayscale(res), res, saturation); // Apply saturation
|
||||||
|
res = pow(res, gamma.rgb); // Apply gamma
|
||||||
|
vec4 c = vec4(clamp(res * luminance, 0.0, 1.0), 1.0);
|
||||||
|
|
||||||
|
//part 2
|
||||||
|
float r = c.x;
|
||||||
|
float g = c.y;
|
||||||
|
float b = c.z;
|
||||||
|
float a = c.w;
|
||||||
|
float w = r * 0.730 + g * 0.270 + b * 0.000;
|
||||||
|
float q = r * 0.085 + g * 0.675 + b * 0.240;
|
||||||
|
float e = r * 0.085 + g * 0.240 + b * 0.675;
|
||||||
|
|
||||||
|
//part 3
|
||||||
|
saturation = 1.0;
|
||||||
|
Display_gamma = 1.7;
|
||||||
|
CRT_gamma = 1.0;
|
||||||
|
luminance = 1.0;
|
||||||
|
|
||||||
|
res = vec3(w, q, e);
|
||||||
|
gamma = gamma = vec3(CRT_gamma / Display_gamma);
|
||||||
|
res = mix(grayscale(res), res, saturation); // Apply saturation
|
||||||
|
res = pow(res, gamma.rgb); // Apply gamma
|
||||||
|
|
||||||
|
FragColor = vec4(clamp(res * luminance, 0.0, 1.0), 1.0);
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
Author: hunterk
|
Author: hunterk
|
||||||
License: Public domain
|
License: Public domain
|
||||||
*/
|
*/
|
||||||
// Shader that replicates the LCD dynamics from a Nintendo DS Phat --
|
// Shader that replicates the LCD Colorspace from a Nintendo DS Phat --
|
||||||
|
|
||||||
layout(std140, set = 0, binding = 0) uniform UBO
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
{
|
{
|
||||||
|
@ -20,60 +20,60 @@ layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
int color_mode = int(global.mode);
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
#pragma parameter white_toggle "Toggle White Balance" 0.0 0.0 1.0 1.0
|
#pragma parameter white_toggle "Toggle White Balance" 1.0 0.0 1.0 1.0
|
||||||
bool white = bool(global.white_toggle);
|
bool white = bool(global.white_toggle);
|
||||||
|
|
||||||
#define target_gamma 2.2
|
#define target_gamma 2.0
|
||||||
#define display_gamma 2.2
|
#define display_gamma 2.0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We'll define our color weights in this pattern:
|
We'll define our color weights in this pattern:
|
||||||
r, rg, rb, 0.0, //red channel
|
r, rg, rb, 0.0, //red channel
|
||||||
gr, g, gb, 0.0, //green channel
|
gr, g, gb, 0.0, //green channel
|
||||||
br, bg, b, 0.0, //blue channel
|
br, bg, b, 0.0, //blue channel
|
||||||
blr, blg, blb, lum //alpha channel; we'll hide luma at the end, too
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const mat4 NDS_Rec2020 = mat4(
|
|
||||||
0.58, 0.13, 0.09, 0.0,
|
|
||||||
0.38, 0.645, 0.20, 0.0,
|
|
||||||
0.04, 0.225, 0.71, 0.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0
|
|
||||||
);
|
|
||||||
|
|
||||||
const mat4 NDS_Rec2020_white = mat4(
|
|
||||||
0.535, 0.12, 0.09, 0.0,
|
|
||||||
0.345, 0.585, 0.20, 0.0,
|
|
||||||
0.04, 0.215, 0.71, 0.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0
|
|
||||||
);
|
|
||||||
|
|
||||||
const mat4 NDS_DCI = mat4(
|
|
||||||
0.745, 0.10, 0.09, 0.0,
|
|
||||||
0.315, 0.665, 0.195, 0.0,
|
|
||||||
-0.06, 0.235, 0.715, 0.0,
|
|
||||||
0.0, 0.0, 0.0, 0.95
|
|
||||||
);
|
|
||||||
|
|
||||||
const mat4 NDS_DCI_white = mat4(
|
|
||||||
0.685, 0.095, 0.09, 0.0,
|
|
||||||
0.29, 0.605, 0.19, 0.0,
|
|
||||||
-0.06, 0.215, 0.715, 0.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0
|
|
||||||
);
|
|
||||||
|
|
||||||
const mat4 NDS_sRGB = mat4(
|
const mat4 NDS_sRGB = mat4(
|
||||||
0.815, 0.07, 0.075, 0.0,
|
0.705, 0.09, 0.1075, 0.0, //red channel
|
||||||
0.215, 0.62, 0.155, 0.0,
|
0.235, 0.585, 0.1725, 0.0, //green channel
|
||||||
-0.12, 0.22, 0.77, 0.0,
|
-0.075, 0.24, 0.72, 0.0, //blue channel
|
||||||
0.0, 0.0, 0.0, 0.89
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
);
|
);
|
||||||
|
|
||||||
const mat4 NDS_sRGB_white = mat4(
|
const mat4 NDS_sRGB_white = mat4(
|
||||||
0.815, 0.07, 0.075, 0.0,
|
0.815, 0.10, 0.1075, 0.0, //red channel
|
||||||
0.215, 0.62, 0.155, 0.0,
|
0.275, 0.64, 0.1725, 0.0, //green channel
|
||||||
-0.12, 0.22, 0.77, 0.0,
|
-0.09, 0.26, 0.72, 0.0, //blue channel
|
||||||
0.0, 0.0, 0.0, 0.97
|
0.0, 0.0, 0.0, 0.915 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_DCI = mat4(
|
||||||
|
0.605, 0.115, 0.115, 0.0, //red channel
|
||||||
|
0.295, 0.575, 0.205, 0.0, //green channel
|
||||||
|
-0.03, 0.23, 0.68, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_DCI_white = mat4(
|
||||||
|
0.69, 0.125, 0.12, 0.0, //red channel
|
||||||
|
0.335, 0.625, 0.20, 0.0, //green channel
|
||||||
|
-0.025, 0.25, 0.68, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.975 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_Rec2020 = mat4(
|
||||||
|
0.495, 0.135, 0.1175, 0.0, //red channel
|
||||||
|
0.345, 0.555, 0.2075, 0.0, //green channel
|
||||||
|
0.055, 0.225, 0.675, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_Rec2020_white = mat4(
|
||||||
|
0.55, 0.1475, 0.1175, 0.0, //red channel
|
||||||
|
0.39, 0.61, 0.2075, 0.0, //green channel
|
||||||
|
0.06, 0.2425, 0.675, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
);
|
);
|
||||||
|
|
||||||
#pragma stage vertex
|
#pragma stage vertex
|
||||||
|
@ -87,9 +87,9 @@ void main()
|
||||||
gl_Position = global.MVP * Position;
|
gl_Position = global.MVP * Position;
|
||||||
vTexCoord = TexCoord;
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
if (color_mode == 3) profile = (!white) ? NDS_Rec2020 : NDS_Rec2020_white;
|
if (color_mode == 1) profile = (!white) ? NDS_sRGB : NDS_sRGB_white;
|
||||||
else if (color_mode == 2) profile = (!white) ? NDS_DCI : NDS_DCI_white;
|
else if (color_mode == 2) profile = (!white) ? NDS_DCI : NDS_DCI_white;
|
||||||
else if (color_mode == 1) profile = (!white) ? NDS_sRGB : NDS_sRGB_white;
|
else if (color_mode == 3) profile = (!white) ? NDS_Rec2020 : NDS_Rec2020_white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma stage fragment
|
#pragma stage fragment
|
||||||
|
|
|
@ -1,82 +1,112 @@
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
layout(push_constant) uniform Push
|
|
||||||
{
|
|
||||||
float palm_gamma;
|
|
||||||
} params;
|
|
||||||
|
|
||||||
layout(std140, set = 0, binding = 0) uniform UBO
|
|
||||||
{
|
|
||||||
mat4 MVP;
|
|
||||||
vec4 OutputSize;
|
|
||||||
vec4 OriginalSize;
|
|
||||||
vec4 SourceSize;
|
|
||||||
} global;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shader Modified: Pokefan531
|
Shader Modified: Pokefan531
|
||||||
Color Mangler
|
Color Mangler
|
||||||
Author: hunterk
|
Author: hunterk
|
||||||
License: Public domain
|
License: Public domain
|
||||||
*/
|
*/
|
||||||
// Shader that replicates the LCD dynamics from Palm OS Phones
|
// Shader that replicates the LCD Colorspace from a PSP 1000 Model --
|
||||||
|
|
||||||
#pragma parameter palm_gamma "Use Palm's Gamma" 0.0 0.0 1.0 1.0
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
float mode, white_toggle;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter white_toggle "Toggle White Balance" 1.0 0.0 1.0 1.0
|
||||||
|
bool white = bool(global.white_toggle);
|
||||||
|
|
||||||
#define target_gamma 2.2
|
#define target_gamma 2.2
|
||||||
#define display_gamma 2.2
|
#define display_gamma 2.2
|
||||||
#define sat 1.0
|
|
||||||
#define lum 1.0
|
/*
|
||||||
#define contrast 1.0
|
We'll define our color weights in this pattern:
|
||||||
#define blr 0.0
|
r, rg, rb, 0.0, //red channel
|
||||||
#define blg 0.0
|
gr, g, gb, 0.0, //green channel
|
||||||
#define blb 0.0
|
br, bg, b, 0.0, //blue channel
|
||||||
#define r 0.88
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
#define g 0.69
|
*/
|
||||||
#define b 0.765
|
|
||||||
#define rg 0.06
|
const mat4 PSP_sRGB = mat4(
|
||||||
#define rb 0.085
|
0.525, 0.0525, 0.09, 0.0, //red channel
|
||||||
#define gr 0.24
|
0.13, 0.545, 0.15, 0.0, //green channel
|
||||||
#define gb 0.15
|
-0.07, 0.1975, 0.76, 0.0, //blue channel
|
||||||
#define br -0.12
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
#define bg 0.25
|
);
|
||||||
#define overscan_percent_x 0.0
|
|
||||||
#define overscan_percent_y 0.0
|
const mat4 PSP_sRGB_white = mat4(
|
||||||
|
0.90, 0.065, 0.09, 0.0, //red channel
|
||||||
|
0.225, 0.685, 0.15, 0.0, //green channel
|
||||||
|
-0.125, 0.25, 0.76, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.89 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_DCI = mat4(
|
||||||
|
0.73, 0.067, 0.03, 0.0, //red channel
|
||||||
|
0.30, 0.771, 0.0825, 0.0, //green channel
|
||||||
|
-0.105, 0.162, 0.855, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.97 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_DCI_white = mat4(
|
||||||
|
0.79, 0.067, 0.033, 0.0, //red channel
|
||||||
|
0.32, 0.771, 0.085, 0.0, //green channel
|
||||||
|
-0.11, 0.162, 0.882, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.9 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_Rec2020 = mat4(
|
||||||
|
0.57, 0.098, 0.03, 0.0, //red channel
|
||||||
|
0.38, 0.742, 0.0975, 0.0, //green channel
|
||||||
|
0.0, 0.16, 0.855, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_Rec2020_white = mat4(
|
||||||
|
0.60, 0.098, 0.03, 0.0, //red channel
|
||||||
|
0.40, 0.742, 0.099, 0.0, //green channel
|
||||||
|
0.0, 0.16, 0.871, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
#pragma stage vertex
|
#pragma stage vertex
|
||||||
layout(location = 0) in vec4 Position;
|
layout(location = 0) in vec4 Position;
|
||||||
layout(location = 1) in vec2 TexCoord;
|
layout(location = 1) in vec2 TexCoord;
|
||||||
layout(location = 0) out vec2 vTexCoord;
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = global.MVP * Position;
|
gl_Position = global.MVP * Position;
|
||||||
vTexCoord = TexCoord;
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = (!white) ? PSP_sRGB : PSP_sRGB_white;
|
||||||
|
else if (color_mode == 2) profile = (!white) ? PSP_DCI : PSP_DCI_white;
|
||||||
|
else if (color_mode == 3) profile = (!white) ? PSP_Rec2020 : PSP_Rec2020_white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma stage fragment
|
#pragma stage fragment
|
||||||
layout(location = 0) in vec2 vTexCoord;
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
layout(location = 0) out vec4 FragColor;
|
layout(location = 0) out vec4 FragColor;
|
||||||
layout(set = 0, binding = 2) uniform sampler2D Source;
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.palm_gamma * 0.4))).rgba;
|
// bring out our stored luminance value
|
||||||
vec4 avglum = vec4(0.5);
|
float lum = profile[3].w;
|
||||||
screen = mix(screen, avglum, (1.0 - contrast));
|
|
||||||
|
|
||||||
// r g b black
|
// our adjustments need to happen in linear gamma
|
||||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
||||||
gr, g, gb, 0.0, //green channel
|
|
||||||
br, bg, b, 0.0, //blue channel
|
|
||||||
blr, blg, blb, 0.0); //alpha channel; these numbers do nothing for our purposes.
|
|
||||||
|
|
||||||
mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0,
|
|
||||||
(1.0 - sat) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 1.0,
|
|
||||||
(1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 1.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0);
|
|
||||||
color *= adjust;
|
|
||||||
screen = clamp(screen * lum, 0.0, 1.0);
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
screen = color * screen;
|
screen = profile * screen;
|
||||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
}
|
}
|
|
@ -1,75 +1,112 @@
|
||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
layout(std140, set = 0, binding = 0) uniform UBO
|
|
||||||
{
|
|
||||||
mat4 MVP;
|
|
||||||
vec4 OutputSize;
|
|
||||||
vec4 OriginalSize;
|
|
||||||
vec4 SourceSize;
|
|
||||||
} global;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shader Modified: Pokefan531
|
Shader Modified: Pokefan531
|
||||||
Color Mangler
|
Color Mangler
|
||||||
Author: hunterk
|
Author: hunterk
|
||||||
License: Public domain
|
License: Public domain
|
||||||
*/
|
*/
|
||||||
|
// Shader that replicates the LCD Colorspace from a PSP 1000 Model --
|
||||||
|
|
||||||
// Shader that replicates the LCD dynamics from PSP 1000 and PSP 2000
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
#define target_gamma 2.21
|
{
|
||||||
#define display_gamma 2.2
|
mat4 MVP;
|
||||||
#define sat 1.0
|
vec4 OutputSize;
|
||||||
#define lum 1.0
|
vec4 OriginalSize;
|
||||||
#define contrast 1.0
|
vec4 SourceSize;
|
||||||
#define blr 0.0
|
float mode, white_toggle;
|
||||||
#define blg 0.0
|
} global;
|
||||||
#define blb 0.0
|
|
||||||
#define r 0.98
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
#define g 0.795
|
int color_mode = int(global.mode);
|
||||||
#define b 0.98
|
|
||||||
#define rg 0.04
|
#pragma parameter white_toggle "Toggle White Balance" 1.0 0.0 1.0 1.0
|
||||||
#define rb 0.01
|
bool white = bool(global.white_toggle);
|
||||||
#define gr 0.20
|
|
||||||
#define gb 0.01
|
#define target_gamma 2.0
|
||||||
#define br -0.18
|
#define display_gamma 2.0
|
||||||
#define bg 0.165
|
|
||||||
#define overscan_percent_x 0.0
|
/*
|
||||||
#define overscan_percent_y 0.0
|
We'll define our color weights in this pattern:
|
||||||
|
r, rg, rb, 0.0, //red channel
|
||||||
|
gr, g, gb, 0.0, //green channel
|
||||||
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mat4 PSP_sRGB = mat4(
|
||||||
|
0.835, 0.0425, 0.0225, 0.0, //red channel
|
||||||
|
0.16, 0.745, 0.015, 0.0, //green channel
|
||||||
|
-0.13, 0.155, 0.9625, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_sRGB_white = mat4(
|
||||||
|
0.965, 0.045, 0.0225, 0.0, //red channel
|
||||||
|
0.185, 0.79, 0.015, 0.0, //green channel
|
||||||
|
-0.15, 0.165, 0.9625, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.87 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_DCI = mat4(
|
||||||
|
0.725, 0.07, 0.0375, 0.0, //red channel
|
||||||
|
0.235, 0.73, 0.0775, 0.0, //green channel
|
||||||
|
-0.08, 0.1475, 0.885, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_DCI_white = mat4(
|
||||||
|
0.825, 0.075, 0.0375, 0.0, //red channel
|
||||||
|
0.27, 0.77, 0.0775, 0.0, //green channel
|
||||||
|
-0.095, 0.155, 0.885, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.91 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_Rec2020 = mat4(
|
||||||
|
0.56, 0.10, 0.0375, 0.0, //red channel
|
||||||
|
0.325, 0.70, 0.09, 0.0, //green channel
|
||||||
|
0.0125, 0.1475, 0.8725, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 PSP_Rec2020_white = mat4(
|
||||||
|
0.625, 0.105, 0.0375, 0.0, //red channel
|
||||||
|
0.36, 0.7375, 0.09, 0.0, //green channel
|
||||||
|
0.015, 0.1575, 0.8725, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
#pragma stage vertex
|
#pragma stage vertex
|
||||||
layout(location = 0) in vec4 Position;
|
layout(location = 0) in vec4 Position;
|
||||||
layout(location = 1) in vec2 TexCoord;
|
layout(location = 1) in vec2 TexCoord;
|
||||||
layout(location = 0) out vec2 vTexCoord;
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = global.MVP * Position;
|
gl_Position = global.MVP * Position;
|
||||||
vTexCoord = TexCoord;
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = (!white) ? PSP_sRGB : PSP_sRGB_white;
|
||||||
|
else if (color_mode == 2) profile = (!white) ? PSP_DCI : PSP_DCI_white;
|
||||||
|
else if (color_mode == 3) profile = (!white) ? PSP_Rec2020 : PSP_Rec2020_white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma stage fragment
|
#pragma stage fragment
|
||||||
layout(location = 0) in vec2 vTexCoord;
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
layout(location = 0) out vec4 FragColor;
|
layout(location = 0) out vec4 FragColor;
|
||||||
layout(set = 0, binding = 2) uniform sampler2D Source;
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
// bring out our stored luminance value
|
||||||
vec4 avglum = vec4(0.5);
|
float lum = profile[3].w;
|
||||||
screen = mix(screen, avglum, (1.0 - contrast));
|
|
||||||
|
|
||||||
// r g b black
|
// our adjustments need to happen in linear gamma
|
||||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
||||||
gr, g, gb, 0.0, //green channel
|
|
||||||
br, bg, b, 0.0, //blue channel
|
|
||||||
blr, blg, blb, 0.0); //alpha channel; these numbers do nothing for our purposes.
|
|
||||||
|
|
||||||
mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0,
|
|
||||||
(1.0 - sat) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 1.0,
|
|
||||||
(1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 1.0,
|
|
||||||
0.0, 0.0, 0.0, 1.0);
|
|
||||||
color *= adjust;
|
|
||||||
screen = clamp(screen * lum, 0.0, 1.0);
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
screen = color * screen;
|
screen = profile * screen;
|
||||||
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
}
|
}
|
113
handheld/shaders/color/sp101-color.slang
Normal file
113
handheld/shaders/color/sp101-color.slang
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
/*
|
||||||
|
Shader Modified: Pokefan531
|
||||||
|
Color Mangler
|
||||||
|
Author: hunterk
|
||||||
|
License: Public domain
|
||||||
|
*/
|
||||||
|
// Shader that replicates the LCD Colorspace from a Gameboy SP 101 (backlit version) --
|
||||||
|
// (Note: This is also very close to what DS-Lite and DSi line colorspace looks)
|
||||||
|
|
||||||
|
layout(std140, set = 0, binding = 0) uniform UBO
|
||||||
|
{
|
||||||
|
mat4 MVP;
|
||||||
|
vec4 OutputSize;
|
||||||
|
vec4 OriginalSize;
|
||||||
|
vec4 SourceSize;
|
||||||
|
float mode, white_toggle;
|
||||||
|
} global;
|
||||||
|
|
||||||
|
#pragma parameter mode "Color Profile (1=sRGB, 2=DCI, 3=Rec2020)" 1.0 1.0 3.0 1.0
|
||||||
|
int color_mode = int(global.mode);
|
||||||
|
|
||||||
|
#pragma parameter white_toggle "Toggle White Balance" 1.0 0.0 1.0 1.0
|
||||||
|
bool white = bool(global.white_toggle);
|
||||||
|
|
||||||
|
#define target_gamma 2.0
|
||||||
|
#define display_gamma 2.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
We'll define our color weights in this pattern:
|
||||||
|
r, rg, rb, 0.0, //red channel
|
||||||
|
gr, g, gb, 0.0, //green channel
|
||||||
|
br, bg, b, 0.0, //blue channel
|
||||||
|
blr, blg, blb, lum //alpha channel; we'll hide lum at the end, too
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mat4 NDS_sRGB = mat4(
|
||||||
|
0.86, 0.03, 0.0025, 0.0, //red channel
|
||||||
|
0.10, 0.745, -0.03, 0.0, //green channel
|
||||||
|
-0.06, 0.0675, 1.0275, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.97 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_sRGB_white = mat4(
|
||||||
|
0.955, 0.0375, 0.0025, 0.0, //red channel
|
||||||
|
0.11, 0.885, -0.03, 0.0, //green channel
|
||||||
|
-0.065, 0.0775, 1.0275, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.94 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_DCI = mat4(
|
||||||
|
0.725, 0.06, 0.02, 0.0, //red channel
|
||||||
|
0.215, 0.73, 0.0225, 0.0, //green channel
|
||||||
|
-0.04, 0.065, 0.9575, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_DCI_white = mat4(
|
||||||
|
0.805, 0.07, 0.02, 0.0, //red channel
|
||||||
|
0.235, 0.8575, 0.0225, 0.0, //green channel
|
||||||
|
-0.04, 0.0725, 0.9575, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 0.96 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_Rec2020 = mat4(
|
||||||
|
0.56, 0.091, 0.02, 0.0, //red channel
|
||||||
|
0.31, 0.695, 0.035, 0.0, //green channel
|
||||||
|
0.0275, 0.07, 0.945, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
const mat4 NDS_Rec2020_white = mat4(
|
||||||
|
0.625, 0.105, 0.02, 0.0, //red channel
|
||||||
|
0.345, 0.815, 0.035, 0.0, //green channel
|
||||||
|
0.03, 0.08, 0.945, 0.0, //blue channel
|
||||||
|
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||||
|
);
|
||||||
|
|
||||||
|
#pragma stage vertex
|
||||||
|
layout(location = 0) in vec4 Position;
|
||||||
|
layout(location = 1) in vec2 TexCoord;
|
||||||
|
layout(location = 0) out vec2 vTexCoord;
|
||||||
|
layout(location = 1) out mat4 profile;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = global.MVP * Position;
|
||||||
|
vTexCoord = TexCoord;
|
||||||
|
|
||||||
|
if (color_mode == 1) profile = (!white) ? NDS_sRGB : NDS_sRGB_white;
|
||||||
|
else if (color_mode == 2) profile = (!white) ? NDS_DCI : NDS_DCI_white;
|
||||||
|
else if (color_mode == 3) profile = (!white) ? NDS_Rec2020 : NDS_Rec2020_white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma stage fragment
|
||||||
|
layout(location = 0) in vec2 vTexCoord;
|
||||||
|
layout(location = 1) in mat4 profile;
|
||||||
|
layout(location = 0) out vec4 FragColor;
|
||||||
|
layout(set = 0, binding = 2) uniform sampler2D Source;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// bring out our stored luminance value
|
||||||
|
float lum = profile[3].w;
|
||||||
|
|
||||||
|
// our adjustments need to happen in linear gamma
|
||||||
|
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
||||||
|
|
||||||
|
screen = clamp(screen * lum, 0.0, 1.0);
|
||||||
|
screen = profile * screen;
|
||||||
|
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||||
|
}
|
Loading…
Reference in a new issue