From 4eb5210fb667ac5bd747c9e21f302f8c1806b8ae Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Sat, 29 Jul 2017 23:18:29 -0500 Subject: [PATCH] Update handheld color shaders to version 9.0 --- handheld/gba-color.slangp | 1 + .../lcd-grid-v2-gba-color-motionblur.slangp | 20 ++--- handheld/lcd-grid-v2-gba-color.slangp | 20 ++--- .../lcd-grid-v2-nds-color-motionblur.slangp | 20 ++--- handheld/lcd-grid-v2-nds-color.slangp | 20 ++--- .../lcd-grid-v2-palm-color-motionblur.slangp | 32 +++++++ handheld/lcd-grid-v2-palm-color.slangp | 27 ++++++ .../lcd-grid-v2-psp-color-motionblur.slangp | 20 ++--- handheld/lcd-grid-v2-psp-color.slangp | 20 ++--- .../lcd-grid-v2-vba-color-motionblur.slangp | 20 ++--- handheld/lcd-grid-v2-vba-color.slangp | 20 ++--- handheld/nds-color.slangp | 1 + handheld/palm-color.slangp | 6 ++ handheld/psp-color.slangp | 1 + handheld/shaders/color/gba-color.slang | 20 ++--- handheld/shaders/color/nds-color.slang | 26 +++--- handheld/shaders/color/palm-color.slang | 82 ++++++++++++++++++ handheld/shaders/color/psp-color.slang | 24 ++--- handheld/shaders/color/vba-color.slang | 11 +-- handheld/vba-color.slangp | 1 + reshade/gba.slangp | 16 ++++ reshade/nds.slangp | 16 ++++ reshade/shaders/LUT/GBA.png | Bin 0 -> 34175 bytes reshade/shaders/LUT/NDS.png | Bin 0 -> 33476 bytes reshade/shaders/LUT/VBA.png | Bin 0 -> 30030 bytes reshade/vba.slangp | 16 ++++ 26 files changed, 314 insertions(+), 126 deletions(-) create mode 100644 handheld/lcd-grid-v2-palm-color-motionblur.slangp create mode 100644 handheld/lcd-grid-v2-palm-color.slangp create mode 100644 handheld/palm-color.slangp create mode 100644 handheld/shaders/color/palm-color.slang create mode 100644 reshade/gba.slangp create mode 100644 reshade/nds.slangp create mode 100644 reshade/shaders/LUT/GBA.png create mode 100644 reshade/shaders/LUT/NDS.png create mode 100644 reshade/shaders/LUT/VBA.png create mode 100644 reshade/vba.slangp diff --git a/handheld/gba-color.slangp b/handheld/gba-color.slangp index 58c2fc4..9c2f9b9 100644 --- a/handheld/gba-color.slangp +++ b/handheld/gba-color.slangp @@ -3,3 +3,4 @@ shaders = 1 shader0 = shaders/color/gba-color.slang filter_linear0 = false scale_type_0 = source +scale0 = 1.0 diff --git a/handheld/lcd-grid-v2-gba-color-motionblur.slangp b/handheld/lcd-grid-v2-gba-color-motionblur.slangp index d3567ef..cc1733b 100644 --- a/handheld/lcd-grid-v2-gba-color-motionblur.slangp +++ b/handheld/lcd-grid-v2-gba-color-motionblur.slangp @@ -5,28 +5,28 @@ 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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-gba-color.slangp b/handheld/lcd-grid-v2-gba-color.slangp index 0713c7b..dd2cd8a 100644 --- a/handheld/lcd-grid-v2-gba-color.slangp +++ b/handheld/lcd-grid-v2-gba-color.slangp @@ -1,27 +1,27 @@ 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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-nds-color-motionblur.slangp b/handheld/lcd-grid-v2-nds-color-motionblur.slangp index aa9f076..998d8c2 100644 --- a/handheld/lcd-grid-v2-nds-color-motionblur.slangp +++ b/handheld/lcd-grid-v2-nds-color-motionblur.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-nds-color.slangp b/handheld/lcd-grid-v2-nds-color.slangp index 96c659d..403b2bb 100644 --- a/handheld/lcd-grid-v2-nds-color.slangp +++ b/handheld/lcd-grid-v2-nds-color.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-palm-color-motionblur.slangp b/handheld/lcd-grid-v2-palm-color-motionblur.slangp new file mode 100644 index 0000000..8c01bee --- /dev/null +++ b/handheld/lcd-grid-v2-palm-color-motionblur.slangp @@ -0,0 +1,32 @@ +shaders = "3" + +shader0 = "../motionblur/shaders/motionblur-simple.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/palm-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 = "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" diff --git a/handheld/lcd-grid-v2-palm-color.slangp b/handheld/lcd-grid-v2-palm-color.slangp new file mode 100644 index 0000000..901d9e9 --- /dev/null +++ b/handheld/lcd-grid-v2-palm-color.slangp @@ -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/palm-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 = "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" diff --git a/handheld/lcd-grid-v2-psp-color-motionblur.slangp b/handheld/lcd-grid-v2-psp-color-motionblur.slangp index 3c286d0..dfedaea 100644 --- a/handheld/lcd-grid-v2-psp-color-motionblur.slangp +++ b/handheld/lcd-grid-v2-psp-color-motionblur.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-psp-color.slangp b/handheld/lcd-grid-v2-psp-color.slangp index 815bb56..0495cc1 100644 --- a/handheld/lcd-grid-v2-psp-color.slangp +++ b/handheld/lcd-grid-v2-psp-color.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-vba-color-motionblur.slangp b/handheld/lcd-grid-v2-vba-color-motionblur.slangp index 12c9a5f..a0a42b9 100644 --- a/handheld/lcd-grid-v2-vba-color-motionblur.slangp +++ b/handheld/lcd-grid-v2-vba-color-motionblur.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/lcd-grid-v2-vba-color.slangp b/handheld/lcd-grid-v2-vba-color.slangp index 3aa4354..357b642 100644 --- a/handheld/lcd-grid-v2-vba-color.slangp +++ b/handheld/lcd-grid-v2-vba-color.slangp @@ -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 = "1.000000" +RSUBPIX_R = "0.750000" RSUBPIX_G = "0.000000" RSUBPIX_B = "0.000000" GSUBPIX_R = "0.000000" -GSUBPIX_G = "1.000000" +GSUBPIX_G = "0.750000" GSUBPIX_B = "0.000000" BSUBPIX_R = "0.000000" BSUBPIX_G = "0.000000" -BSUBPIX_B = "1.000000" -gain = "1.250000" -gamma = "3.000000" -blacklevel = "0.050000" +BSUBPIX_B = "0.750000" +gain = "1.500000" +gamma = "2.200000" +blacklevel = "0.000000" ambient = "0.000000" BGR = "1.000000" diff --git a/handheld/nds-color.slangp b/handheld/nds-color.slangp index dc19fc9..d912615 100644 --- a/handheld/nds-color.slangp +++ b/handheld/nds-color.slangp @@ -3,3 +3,4 @@ shaders = 1 shader0 = shaders/color/nds-color.slang filter_linear0 = false scale_type_0 = source +scale0 = 1.0 diff --git a/handheld/palm-color.slangp b/handheld/palm-color.slangp new file mode 100644 index 0000000..e1190ad --- /dev/null +++ b/handheld/palm-color.slangp @@ -0,0 +1,6 @@ +shaders = 1 + +shader0 = shaders/color/palm-color.slang +filter_linear0 = false +scale_type_0 = source +scale0 = 1.0 diff --git a/handheld/psp-color.slangp b/handheld/psp-color.slangp index 855873e..5e2996f 100644 --- a/handheld/psp-color.slangp +++ b/handheld/psp-color.slangp @@ -3,3 +3,4 @@ shaders = 1 shader0 = shaders/color/psp-color.slang filter_linear0 = false scale_type_0 = source +scale0 = 1.0 diff --git a/handheld/shaders/color/gba-color.slang b/handheld/shaders/color/gba-color.slang index 45094f6..06b1a05 100644 --- a/handheld/shaders/color/gba-color.slang +++ b/handheld/shaders/color/gba-color.slang @@ -21,25 +21,25 @@ layout(std140, set = 0, binding = 0) uniform UBO */ // Shader that replicates the LCD dynamics from a GameBoy Advance -#pragma parameter darken_screen "Darken Screen" 0.5 0.0 1.0 0.05 +#pragma parameter darken_screen "Darken Screen" 0.5 0.0 2.0 0.05 #define target_gamma 2.2 -#define display_gamma 2.5 +#define display_gamma 2.2 #define sat 1.0 -#define lum 0.99 +#define lum 1.0 #define contrast 1.0 #define blr 0.0 #define blg 0.0 #define blb 0.0 -#define r 0.84 +#define r 0.82 #define g 0.67 #define b 0.73 #define rg 0.09 -#define rb 0.15 -#define gr 0.18 -#define gb 0.10 -#define br 0.0 -#define bg 0.26 +#define rb 0.16 +#define gr 0.24 +#define gb 0.11 +#define br -0.06 +#define bg 0.24 #define overscan_percent_x 0.0 #define overscan_percent_y 0.0 @@ -78,5 +78,5 @@ mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) color *= adjust; screen = clamp(screen * lum, 0.0, 1.0); screen = color * screen; - FragColor = pow(screen, vec4(1.0 / display_gamma + (params.darken_screen / 8))); + FragColor = pow(screen, vec4(1.0 / (display_gamma))); } \ No newline at end of file diff --git a/handheld/shaders/color/nds-color.slang b/handheld/shaders/color/nds-color.slang index 03529a0..f8b851a 100644 --- a/handheld/shaders/color/nds-color.slang +++ b/handheld/shaders/color/nds-color.slang @@ -1,10 +1,5 @@ #version 450 -layout(push_constant) uniform Push -{ - float target_gamma; -} params; - layout(std140, set = 0, binding = 0) uniform UBO { mat4 MVP; @@ -21,24 +16,23 @@ layout(std140, set = 0, binding = 0) uniform UBO */ // Shader that replicates the LCD dynamics from a Nintendo DS Phat -#pragma parameter target_gamma "Gamma Mode" 2.0 2.0 2.4 0.2 - -#define display_gamma 2.20 -#define sat 1.01 +#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.74 -#define g 0.63 -#define b 0.74 -#define rg 0.10 +#define r 0.81 +#define g 0.665 +#define b 0.80 +#define rg 0.09 #define rb 0.09 #define gr 0.26 #define gb 0.11 -#define br 0.0 -#define bg 0.27 +#define br -0.07 +#define bg 0.245 #define overscan_percent_x 0.0 #define overscan_percent_y 0.0 @@ -60,7 +54,7 @@ layout(set = 0, binding = 2) uniform sampler2D Source; void main() { - vec4 screen = pow(texture(Source, vTexCoord), vec4(params.target_gamma)).rgba; + vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba; vec4 avglum = vec4(0.5); screen = mix(screen, avglum, (1.0 - contrast)); diff --git a/handheld/shaders/color/palm-color.slang b/handheld/shaders/color/palm-color.slang new file mode 100644 index 0000000..f9cf416 --- /dev/null +++ b/handheld/shaders/color/palm-color.slang @@ -0,0 +1,82 @@ +#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 + +#pragma parameter palm_gamma "Use Palm's Gamma" 0.0 0.0 1.0 1.0 + +#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.745 +#define g 0.69 +#define b 0.775 +#define rg 0.06 +#define rb 0.085 +#define gr 0.315 +#define gb 0.14 +#define br -0.06 +#define bg 0.25 +#define overscan_percent_x 0.0 +#define overscan_percent_y 0.0 + +#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 = 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)); + + // 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))); +} \ No newline at end of file diff --git a/handheld/shaders/color/psp-color.slang b/handheld/shaders/color/psp-color.slang index 967fca3..86fb567 100644 --- a/handheld/shaders/color/psp-color.slang +++ b/handheld/shaders/color/psp-color.slang @@ -1,10 +1,5 @@ #version 450 -layout(push_constant) uniform Push -{ - float target_gamma; -} params; - layout(std140, set = 0, binding = 0) uniform UBO { mat4 MVP; @@ -21,8 +16,7 @@ layout(std140, set = 0, binding = 0) uniform UBO */ // Shader that replicates the LCD dynamics from PSP 1000 and PSP 2000 -#pragma parameter target_gamma "Gamma Mode" 2.2 2.2 2.4 0.2 - +#define target_gamma 2.21 #define display_gamma 2.2 #define sat 1.0 #define lum 1.0 @@ -30,14 +24,14 @@ layout(std140, set = 0, binding = 0) uniform UBO #define blr 0.0 #define blg 0.0 #define blb 0.0 -#define r 0.95 -#define g 0.80 -#define b 0.98 -#define rg 0.03 +#define r 0.92 +#define g 0.795 +#define b 0.975 +#define rg 0.035 #define rb 0.01 -#define gr 0.02 -#define gb 0.01 -#define br 0.0 +#define gr 0.24 +#define gb 0.015 +#define br -0.16 #define bg 0.17 #define overscan_percent_x 0.0 #define overscan_percent_y 0.0 @@ -60,7 +54,7 @@ layout(set = 0, binding = 2) uniform sampler2D Source; void main() { - vec4 screen = pow(texture(Source, vTexCoord), vec4(params.target_gamma)).rgba; + vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma)).rgba; vec4 avglum = vec4(0.5); screen = mix(screen, avglum, (1.0 - contrast)); diff --git a/handheld/shaders/color/vba-color.slang b/handheld/shaders/color/vba-color.slang index 9c508b5..d6834b1 100644 --- a/handheld/shaders/color/vba-color.slang +++ b/handheld/shaders/color/vba-color.slang @@ -2,7 +2,7 @@ layout(push_constant) uniform Push { - float target_gamma; + float darken_screen; } params; layout(std140, set = 0, binding = 0) uniform UBO @@ -19,10 +19,11 @@ layout(std140, set = 0, binding = 0) uniform UBO Author: hunterk License: Public domain */ -// Shader that replicates the LCD dynamics from a GameBoy Advance +// Shader that replicates the LCD dynamics from a GameBoy Advance based from VBA-M and No$GBA -#pragma parameter target_gamma "Darken Intensity" 2.9 1.0 2.9 0.05 +#pragma parameter darken_screen "Darken Screen" 1.0 0.0 1.0 0.05 +#define target_gamma 1.45 #define display_gamma 1.45 #define sat 1.0 #define lum 1.0 @@ -60,7 +61,7 @@ layout(set = 0, binding = 2) uniform sampler2D Source; void main() { - vec4 screen = pow(texture(Source, vTexCoord), vec4(params.target_gamma)).rgba; + vec4 screen = pow(texture(Source, vTexCoord), vec4(target_gamma + (params.darken_screen * 1.7))).rgba; vec4 avglum = vec4(0.5); screen = mix(screen, avglum, (1.0 - contrast)); @@ -77,5 +78,5 @@ mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) color *= adjust; screen = clamp(screen * lum, 0.0, 1.0); screen = color * screen; - FragColor = pow(screen, vec4(1.0 / display_gamma)); + FragColor = pow(screen, vec4(1.0 / (display_gamma))); } \ No newline at end of file diff --git a/handheld/vba-color.slangp b/handheld/vba-color.slangp index 93a05f5..e07626d 100644 --- a/handheld/vba-color.slangp +++ b/handheld/vba-color.slangp @@ -3,3 +3,4 @@ shaders = 1 shader0 = shaders/color/vba-color.slang filter_linear0 = false scale_type_0 = source +scale0 = 1.0 diff --git a/reshade/gba.slangp b/reshade/gba.slangp new file mode 100644 index 0000000..e320dff --- /dev/null +++ b/reshade/gba.slangp @@ -0,0 +1,16 @@ +shaders = 1 + +shader0 = shaders/LUT/LUT.slang +filter_linear0 = "false" +scale_type_x0 = "source" +scale_x0 = "1.000000" +scale_type_y0 = "source" +scale_y0 = "1.000000" + +textures = SamplerLUT + +SamplerLUT = shaders/LUT/GBA.png +SamplerLUT_linear = true + +parameters = "LUT_Size" +LUT_Size = "32.000000" \ No newline at end of file diff --git a/reshade/nds.slangp b/reshade/nds.slangp new file mode 100644 index 0000000..fc3db02 --- /dev/null +++ b/reshade/nds.slangp @@ -0,0 +1,16 @@ +shaders = 1 + +shader0 = shaders/LUT/LUT.slang +filter_linear0 = "false" +scale_type_x0 = "source" +scale_x0 = "1.000000" +scale_type_y0 = "source" +scale_y0 = "1.000000" + +textures = SamplerLUT + +SamplerLUT = shaders/LUT/NDS.png +SamplerLUT_linear = true + +parameters = "LUT_Size" +LUT_Size = "32.000000" \ No newline at end of file diff --git a/reshade/shaders/LUT/GBA.png b/reshade/shaders/LUT/GBA.png new file mode 100644 index 0000000000000000000000000000000000000000..f159bc8e2c0a194b1d7ff2a08126ab6e7b23b2cb GIT binary patch literal 34175 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 Y05ZvOquy_;NB{r;07*qoM6N<$f+-fGS^xk5 literal 0 HcmV?d00001 diff --git a/reshade/shaders/LUT/NDS.png b/reshade/shaders/LUT/NDS.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fbf0800a643614322c7824a91f55c552a18123 GIT binary patch literal 33476 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 LNkvXXu0mjfuZT&- literal 0 HcmV?d00001 diff --git a/reshade/shaders/LUT/VBA.png b/reshade/shaders/LUT/VBA.png new file mode 100644 index 0000000000000000000000000000000000000000..75fdeaf5c00bfb4873bbe683b26342460ab969ec GIT binary patch literal 30030 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