mirror of
https://github.com/italicsjenga/slang-shaders.git
synced 2024-11-22 07:41:31 +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"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/gba-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/gba-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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 = "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 = "1"
|
||||
darken_screen = "0"
|
||||
|
|
|
@ -1,27 +1,28 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/gba-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/gba-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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 = "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 = "1"
|
||||
darken_screen = "0"
|
||||
|
|
|
@ -5,28 +5,29 @@ filter_linear0 = "false"
|
|||
scale_type0 = "source"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/gbc-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/gbc-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "0.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;lighten_screen"
|
||||
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"
|
||||
lighten_screen = "0"
|
||||
|
|
|
@ -1,27 +1,28 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/gbc-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/gbc-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "0.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;lighten_screen"
|
||||
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"
|
||||
lighten_screen = "0"
|
||||
|
|
|
@ -5,28 +5,28 @@ filter_linear0 = "false"
|
|||
scale_type0 = "source"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/nds-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/nds-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/nds-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/nds-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/palm-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/palm-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/palm-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/palm-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/psp-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/psp-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/psp-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/psp-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
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"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/color/vba-color.slang"
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "source"
|
||||
scale_type1 = "viewport"
|
||||
scale1 = "1.0"
|
||||
|
||||
shader2 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader2 = "shaders/color/vba-color.slang"
|
||||
filter_linear2 = "false"
|
||||
scale_type2 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
shaders = "2"
|
||||
|
||||
shader0 = "shaders/color/vba-color.slang"
|
||||
shader0 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
filter_linear0 = "false"
|
||||
scale_type0 = "source"
|
||||
scale_type0 = "viewport"
|
||||
scale0 = "1.0"
|
||||
|
||||
shader1 = "shaders/lcd-cgwg/lcd-grid-v2.slang"
|
||||
shader1 = "shaders/color/vba-color.slang"
|
||||
filter_linear1 = "false"
|
||||
scale_type1 = "viewport"
|
||||
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 = "0.750000"
|
||||
RSUBPIX_G = "0.000000"
|
||||
RSUBPIX_B = "0.000000"
|
||||
GSUBPIX_R = "0.000000"
|
||||
GSUBPIX_G = "0.750000"
|
||||
GSUBPIX_B = "0.000000"
|
||||
BSUBPIX_R = "0.000000"
|
||||
BSUBPIX_G = "0.000000"
|
||||
BSUBPIX_B = "0.750000"
|
||||
gain = "1.500000"
|
||||
gamma = "2.200000"
|
||||
blacklevel = "0.000000"
|
||||
ambient = "0.000000"
|
||||
BGR = "1.000000"
|
||||
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"
|
||||
|
|
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
|
||||
|
||||
/*
|
||||
Shader Modified: Pokefan531
|
||||
Color Mangler
|
||||
Author: hunterk
|
||||
License: Public domain
|
||||
*/
|
||||
// Shader that replicates the LCD Colorspace from Gameboy Advance --
|
||||
|
||||
layout(push_constant) uniform Push
|
||||
{
|
||||
float darken_screen;
|
||||
|
@ -11,72 +19,77 @@ layout(std140, set = 0, binding = 0) uniform UBO
|
|||
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.5 0.0 1.0 0.05
|
||||
|
||||
#define target_gamma 2.0
|
||||
#define display_gamma 2.0
|
||||
|
||||
/*
|
||||
Shader Modified: Pokefan531
|
||||
Color Mangler
|
||||
Author: hunterk
|
||||
License: Public domain
|
||||
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
|
||||
*/
|
||||
// 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
|
||||
#define display_gamma 2.2
|
||||
#define sat 1.0
|
||||
#define lum 0.94
|
||||
#define contrast 1.0
|
||||
#define blr 0.0
|
||||
#define blg 0.0
|
||||
#define blb 0.0
|
||||
#define r 0.82
|
||||
#define g 0.665
|
||||
#define b 0.73
|
||||
#define rg 0.125
|
||||
#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
|
||||
const mat4 GBA_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 GBA_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
|
||||
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;
|
||||
vec4 avglum = vec4(0.5);
|
||||
screen = mix(screen, avglum, (1.0 - contrast));
|
||||
|
||||
// r g b black
|
||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
||||
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 = color * screen;
|
||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
||||
screen = profile * screen;
|
||||
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||
}
|
|
@ -1,5 +1,13 @@
|
|||
#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
|
||||
{
|
||||
float lighten_screen;
|
||||
|
@ -11,72 +19,77 @@ layout(std140, set = 0, binding = 0) uniform UBO
|
|||
vec4 OutputSize;
|
||||
vec4 OriginalSize;
|
||||
vec4 SourceSize;
|
||||
float mode;
|
||||
} global;
|
||||
|
||||
/*
|
||||
Shader Modified: Pokefan531
|
||||
Color Mangler
|
||||
Author: hunterk
|
||||
License: Public domain
|
||||
*/
|
||||
// Shader that replicates the LCD dynamics from a GameBoy Color
|
||||
#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 2.2
|
||||
#define display_gamma 2.2
|
||||
#define sat 1.0
|
||||
#define lum 0.94
|
||||
#define contrast 1.0
|
||||
#define blr 0.0
|
||||
#define blg 0.0
|
||||
#define blb 0.0
|
||||
#define r 0.82
|
||||
#define g 0.665
|
||||
#define b 0.73
|
||||
#define rg 0.125
|
||||
#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
|
||||
|
||||
/*
|
||||
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.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
|
||||
);
|
||||
|
||||
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
|
||||
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;
|
||||
vec4 avglum = vec4(0.5);
|
||||
screen = mix(screen, avglum, (1.0 - contrast));
|
||||
|
||||
// r g b black
|
||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
||||
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 = color * screen;
|
||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
||||
screen = profile * screen;
|
||||
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
|
||||
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
|
||||
{
|
||||
|
@ -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
|
||||
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);
|
||||
|
||||
#define target_gamma 2.2
|
||||
#define display_gamma 2.2
|
||||
#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 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(
|
||||
0.815, 0.07, 0.075, 0.0,
|
||||
0.215, 0.62, 0.155, 0.0,
|
||||
-0.12, 0.22, 0.77, 0.0,
|
||||
0.0, 0.0, 0.0, 0.89
|
||||
0.705, 0.09, 0.1075, 0.0, //red channel
|
||||
0.235, 0.585, 0.1725, 0.0, //green channel
|
||||
-0.075, 0.24, 0.72, 0.0, //blue channel
|
||||
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||
);
|
||||
|
||||
const mat4 NDS_sRGB_white = mat4(
|
||||
0.815, 0.07, 0.075, 0.0,
|
||||
0.215, 0.62, 0.155, 0.0,
|
||||
-0.12, 0.22, 0.77, 0.0,
|
||||
0.0, 0.0, 0.0, 0.97
|
||||
0.815, 0.10, 0.1075, 0.0, //red channel
|
||||
0.275, 0.64, 0.1725, 0.0, //green channel
|
||||
-0.09, 0.26, 0.72, 0.0, //blue channel
|
||||
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
|
||||
|
@ -87,9 +87,9 @@ void main()
|
|||
gl_Position = global.MVP * Position;
|
||||
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 == 1) profile = (!white) ? NDS_sRGB : NDS_sRGB_white;
|
||||
else if (color_mode == 3) profile = (!white) ? NDS_Rec2020 : NDS_Rec2020_white;
|
||||
}
|
||||
|
||||
#pragma stage fragment
|
||||
|
|
|
@ -1,82 +1,112 @@
|
|||
#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
|
||||
Color Mangler
|
||||
Author: hunterk
|
||||
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 display_gamma 2.2
|
||||
#define sat 1.0
|
||||
#define lum 1.0
|
||||
#define contrast 1.0
|
||||
#define blr 0.0
|
||||
#define blg 0.0
|
||||
#define blb 0.0
|
||||
#define r 0.88
|
||||
#define g 0.69
|
||||
#define b 0.765
|
||||
#define rg 0.06
|
||||
#define rb 0.085
|
||||
#define gr 0.24
|
||||
#define gb 0.15
|
||||
#define br -0.12
|
||||
#define bg 0.25
|
||||
#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.525, 0.0525, 0.09, 0.0, //red channel
|
||||
0.13, 0.545, 0.15, 0.0, //green channel
|
||||
-0.07, 0.1975, 0.76, 0.0, //blue channel
|
||||
0.0, 0.0, 0.0, 1.0 //alpha channel
|
||||
);
|
||||
|
||||
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
|
||||
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) ? 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
|
||||
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()
|
||||
{
|
||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.palm_gamma * 0.4))).rgba;
|
||||
vec4 avglum = vec4(0.5);
|
||||
screen = mix(screen, avglum, (1.0 - contrast));
|
||||
// bring out our stored luminance value
|
||||
float lum = profile[3].w;
|
||||
|
||||
// r g b black
|
||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
||||
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.
|
||||
// our adjustments need to happen in linear gamma
|
||||
vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba;
|
||||
|
||||
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 = color * screen;
|
||||
FragColor = pow(screen, vec4(1.0 / (display_gamma)));
|
||||
screen = profile * screen;
|
||||
FragColor = pow(screen, vec4(1.0 / display_gamma));
|
||||
}
|
|
@ -1,75 +1,112 @@
|
|||
#version 450
|
||||
|
||||
layout(std140, set = 0, binding = 0) uniform UBO
|
||||
{
|
||||
mat4 MVP;
|
||||
vec4 OutputSize;
|
||||
vec4 OriginalSize;
|
||||
vec4 SourceSize;
|
||||
} global;
|
||||
|
||||
/*
|
||||
Shader Modified: Pokefan531
|
||||
Color Mangler
|
||||
Author: hunterk
|
||||
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
|
||||
#define target_gamma 2.21
|
||||
#define display_gamma 2.2
|
||||
#define sat 1.0
|
||||
#define lum 1.0
|
||||
#define contrast 1.0
|
||||
#define blr 0.0
|
||||
#define blg 0.0
|
||||
#define blb 0.0
|
||||
#define r 0.98
|
||||
#define g 0.795
|
||||
#define b 0.98
|
||||
#define rg 0.04
|
||||
#define rb 0.01
|
||||
#define gr 0.20
|
||||
#define gb 0.01
|
||||
#define br -0.18
|
||||
#define bg 0.165
|
||||
#define overscan_percent_x 0.0
|
||||
#define overscan_percent_y 0.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.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 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
|
||||
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) ? 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
|
||||
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;
|
||||
vec4 avglum = vec4(0.5);
|
||||
screen = mix(screen, avglum, (1.0 - contrast));
|
||||
|
||||
// r g b black
|
||||
mat4 color = mat4(r, rg, rb, 0.0, //red channel
|
||||
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 = color * screen;
|
||||
screen = profile * screen;
|
||||
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