From e2a466c82e0eee82176c7f466babdd7e0ff3f55c Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Thu, 25 Jan 2018 23:06:30 -0600 Subject: [PATCH] Add Game Boy palette shader --- handheld/gb-palette-dmg.slangp | 9 ++++ handheld/gb-palette-light.slangp | 9 ++++ handheld/gb-palette-pocket.slangp | 9 ++++ handheld/shaders/gb-palette/gb-palette.slang | 47 ++++++++++++++++++ .../gb-palette/resources/palette-dmg.png | Bin 0 -> 3216 bytes .../gb-palette/resources/palette-light.png | Bin 0 -> 3219 bytes .../gb-palette/resources/palette-pocket.png | Bin 0 -> 3223 bytes 7 files changed, 74 insertions(+) create mode 100644 handheld/gb-palette-dmg.slangp create mode 100644 handheld/gb-palette-light.slangp create mode 100644 handheld/gb-palette-pocket.slangp create mode 100644 handheld/shaders/gb-palette/gb-palette.slang create mode 100644 handheld/shaders/gb-palette/resources/palette-dmg.png create mode 100644 handheld/shaders/gb-palette/resources/palette-light.png create mode 100644 handheld/shaders/gb-palette/resources/palette-pocket.png diff --git a/handheld/gb-palette-dmg.slangp b/handheld/gb-palette-dmg.slangp new file mode 100644 index 0000000..a81115b --- /dev/null +++ b/handheld/gb-palette-dmg.slangp @@ -0,0 +1,9 @@ +shaders = 1 +shader0 = shaders/gb-palette/gb-palette.slang //colorize image + +scale_type0 = source +filter_linear0 = false + +textures = COLOR_PALETTE +COLOR_PALETTE = shaders/gb-palette/resources/palette-dmg.png +COLOR_PALETTE_linear = false diff --git a/handheld/gb-palette-light.slangp b/handheld/gb-palette-light.slangp new file mode 100644 index 0000000..d6ef14c --- /dev/null +++ b/handheld/gb-palette-light.slangp @@ -0,0 +1,9 @@ +shaders = 1 +shader0 = shaders/gb-palette/gb-palette.slang //colorize image + +scale_type0 = source +filter_linear0 = false + +textures = COLOR_PALETTE +COLOR_PALETTE = shaders/gb-palette/resources/palette-light.png +COLOR_PALETTE_linear = false diff --git a/handheld/gb-palette-pocket.slangp b/handheld/gb-palette-pocket.slangp new file mode 100644 index 0000000..4652378 --- /dev/null +++ b/handheld/gb-palette-pocket.slangp @@ -0,0 +1,9 @@ +shaders = 1 +shader0 = shaders/gb-palette/gb-palette.slang //colorize image + +scale_type0 = source +filter_linear0 = false + +textures = COLOR_PALETTE +COLOR_PALETTE = shaders/gb-palette/resources/palette-pocket.png +COLOR_PALETTE_linear = false diff --git a/handheld/shaders/gb-palette/gb-palette.slang b/handheld/shaders/gb-palette/gb-palette.slang new file mode 100644 index 0000000..2d266cb --- /dev/null +++ b/handheld/shaders/gb-palette/gb-palette.slang @@ -0,0 +1,47 @@ +#version 450 + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OriginalSize; + vec4 OutputSize; + uint FrameCount; +} params; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; +} 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 * 1.0001; +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 2) uniform sampler2D Source; +layout(set = 0, binding = 3) uniform sampler2D COLOR_PALETTE; + +void main() +{ + //sample the input textures + + vec4 out_color = texture(Source, vTexCoord.xy); + + //input grayscale values: + //0.000 black - 0.333 medium gray - 0.667 light gray - 1.000 white + //multiply grayscale value by 3 to obtain int value in range [0, 3], acts as index for arrays storing custom palette UV coordinates and alpha value + + vec2 palette_coordinate = vec2(0.5, (abs(1 - out_color.r) * 0.75) + 0.125); //directly map input grayscale value to color palette y coordinate + out_color = vec4(texture(COLOR_PALETTE, palette_coordinate).rgb, ceil(abs(1.0 - out_color.r))); //sample color from palette, alpha = 1 if color is not transparent + + FragColor = out_color; +} diff --git a/handheld/shaders/gb-palette/resources/palette-dmg.png b/handheld/shaders/gb-palette/resources/palette-dmg.png new file mode 100644 index 0000000000000000000000000000000000000000..217cdfd50c25959109f712a17351bbfe30cf59d9 GIT binary patch literal 3216 zcmcImX*iS(7k=zpn6d9$_B|s@NyJzp#u~DPj4fmtJA-5iSz_#B$k>-cgCSd!$WBDr zdres;BpS=-{jTrN`~UrZoa;X4I@f*9eVzNyNrsu|Gt%?W0|3BiXrOC;fm#4S2GCMp zWE6V-e*-04`;ImMG^aTHZlE;IRb>|Xu@0QdC4=1bN&t%jj$+n>L=BqW@k_OeQURlh$?6CiAGZxk#NNP-C zfMAPc!AmU7dMS!IGOMbqbCygH3V_YfhtuCCSwsbVC0USVU1W6wST>+@dbD^~cG-<# z02N?pG`14R%0d;ypDX`m`g4Ky?{&9Ie@gOxKwKt&2tMU7X+D+T#RqWgp4cj_ex8Iv z+mu_|UMnj@lum14=fV4aw-*;o>2~AEBoE*`lI-jgu zGNlF}D=>cipL#l&?`S9_lWTXRH9xYp&IP0Tl~_0rm`_a;d&(NS;i8&5&-TV0)PEY^ zPeIBz@XE-E-FaUHuYlO{b*z*o9tqN%1q)DX7lksF_On7CC%;S`HUhO4;=j?q@zl76 z`dwOZ#N2;YF^J_zo;(7>TvL(L!O~jM+cc8&V4(@ppu;)Zulq<*C^~FKI{Rth`L60I zyti^yEWVJaJ}M^pc$8%i!ufk(jO7IxnE|!4c?*yF|*tX8+XTWNypceg=4t?2wbBpPHfPM zA9wJ$RPZD^@oO)waa?s1OC1$&|D}t4u{z6E{^VWMqX`Vl{QhE#fMCM)<$dDSBNYw$ zoAG~vkRUKmc?y@vr2(p+`sEp+kDt})r)1Dqkaqn_2i32Fd-`J zNkae;_z3a@v3%oMk?UFL_vCv_0gz+zWAJerCA80=&nQl=S-V`XT*t*=6)Wm!ZZT;X z(CXIUmatAY^dk#m9x5d##VPf2I=q^vI@|oRdEg|Qr-f$>!IHp2xIB5cqROpF$xg{v z$tRyYKVFH`?VS`Yw0QN_eKQpco(m$YQZLLdq1>gh&r0g9dhOnGd83f>s&N?t?!eXxYGrCw=7sx? z{2o`(W{0uswk!Os6C8I<=Y}KB9;Y8=tpn{hy=;nxu9b*8W|!q-uy)>*D;@h&L`Gq&UsU*R%+%fHIaForGd1-Br zY0NnA(D~t8h=(HA6;bYM-0nPWTDiiDugBUCC>3vWq3S1QM`wBKOl^Bwn_q+H_}Y&@&W@|hA0};22W)Q?ZKMt3 zx2L!A5Wf)U!yu9kiQ*8=RKsMPNS%mJ|DNuH7sne)I8=#Np-sk$?-U)6ZjbKEtH}Sb zAH|9^2sA(&D14QC%Y0{ipDoTTvM%0Rgx`?Wm<=!5*NylSy0gdk(|pe*>}tfv@Oxp6 z`#Zmck10u(B#pzF{S6X=)EoUZy7N?^Zrr~2-UNa91a}fbx_N1w$%d8aDkQEb)Fe(c z%7YU$4Z=Z#7xc%eXWIcX?kYr{dYx4Q2Z0TKyuXB0bE7# zuhp(quQhjD`8r%3+(#dw9#Pf@+cL>B2{NcNC|c?8uf-~4X=H!T z`j&l~%`6sko6gkJXt46#%aZjWVpbT=^MmKSXFTB#A%TGQ_L<$Xg$(~*QGKArU8~eV zX*n@w*#pym169lQEVa!(7MGFzq1zUuqR@F$UjZI5>edjk)9!8NZR;JeXSuJkkyamQ zceh8tPO!Zj9{=Y_93w054Hbc}x^vIF2vw2UCoLy;3;R_=I3?MAWVx1Bn=30}b!`+N=dIB7L=lH(0@PAN+H&t}@Lea{cCt3LI9=vHy|QG1uKLnm(a zaM^#8Se&_;IdOgKxKPt2jwJB3{d`jU)NOXC`271R7X#RZ7c?w>&$Q^|0`7>7H3OwL*BA$D|MFgoz0 zK1Rg_u}XD5ShZy2_@PJRz-zv?1dGJ#H(EF;jBw&IV*-!l)*dc(5<{{XYLl zBNc&x@iq}qEDJ(FlNd|3*vG;-Q^4w}U)V8fweldnt^zY&K+Ozb zSxfe>HM|`|&dI#~fAjw*6JwQ`N#bKdXU4jMw50%J1|Q? R|GID(Foc@uHr#TK`wzfm+*kkr literal 0 HcmV?d00001 diff --git a/handheld/shaders/gb-palette/resources/palette-light.png b/handheld/shaders/gb-palette/resources/palette-light.png new file mode 100644 index 0000000000000000000000000000000000000000..476c6741c486bd0603debb8bc7eb23e7f3b7466a GIT binary patch literal 3219 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 literal 0 HcmV?d00001 diff --git a/handheld/shaders/gb-palette/resources/palette-pocket.png b/handheld/shaders/gb-palette/resources/palette-pocket.png new file mode 100644 index 0000000000000000000000000000000000000000..85761b7d4ec0d3895dc6d07fa3223ce0436e77ec GIT binary patch literal 3223 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