mirror of
https://github.com/italicsjenga/slang-shaders.git
synced 2024-11-22 07:41:31 +11:00
parent
954467430c
commit
a6305a1789
|
@ -6,15 +6,21 @@ layout(push_constant) uniform Push
|
|||
vec4 OriginalSize;
|
||||
vec4 OutputSize;
|
||||
uint FrameCount;
|
||||
|
||||
float palette, color_enhance;
|
||||
} params;
|
||||
|
||||
#pragma parameter palette "Choose palette Hercules/CGA/EGA" 2.0 0.0 2.0 1.0
|
||||
#define palette params.palette
|
||||
|
||||
#pragma parameter color_enhance "Color Enchance" 1.4 1.0 4.0 0.05
|
||||
#define color_enhance params.color_enhance
|
||||
|
||||
#define _ 0.0
|
||||
#define o (1./3.)
|
||||
#define b (2./3.)
|
||||
#define B 1.0
|
||||
|
||||
#define color_enhance 1.0
|
||||
|
||||
#define SourceSize params.SourceSize
|
||||
|
||||
layout(std140, set = 0, binding = 0) uniform UBO
|
||||
|
@ -42,7 +48,10 @@ layout(set = 0, binding = 2) uniform sampler2D Source;
|
|||
// Color lookup table (RGBI palette with brown fix)
|
||||
const vec3 rgbi_palette[19] =
|
||||
{
|
||||
vec3(_, _, _),
|
||||
vec3(_, _, _), // cga
|
||||
vec3(B, B, B), // cga white
|
||||
vec3(o, B, B), // cga cyan
|
||||
vec3(B, o, B), // cga pink
|
||||
vec3(_, _, b),
|
||||
vec3(_, b, _),
|
||||
vec3(_, b, _),
|
||||
|
@ -56,11 +65,24 @@ const vec3 rgbi_palette[19] =
|
|||
vec3(o, o, o),
|
||||
vec3(o, o, B),
|
||||
vec3(o, B, o),
|
||||
vec3(o, B, B),
|
||||
vec3(B, o, o),
|
||||
vec3(B, o, B),
|
||||
vec3(B, B, o),
|
||||
vec3(B, B, B),
|
||||
|
||||
};
|
||||
|
||||
const vec3 cga_palette[4] =
|
||||
{
|
||||
vec3(_, _, _), // cga
|
||||
vec3(o, B, B), // cga cyan
|
||||
vec3(B, o, B), // cga pink
|
||||
vec3(B, B, B), // cga white
|
||||
};
|
||||
|
||||
const vec3 simcga_palette[2] =
|
||||
{
|
||||
vec3(_, _, _), // black
|
||||
vec3(o, b, o), // green
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -80,7 +102,9 @@ vec3 nearest_rgbi (vec3 original)
|
|||
float dst;
|
||||
float min_dst = 2.0;
|
||||
int idx = 0;
|
||||
for (int i=0; i<19; i++)
|
||||
|
||||
int set; if (palette == 2.0)set = 19; else if (palette == 1.0) set = 4;else if (palette == 1.0) set = 2;
|
||||
for (int i=0; i<set; i++)
|
||||
{
|
||||
dst = distance(original, rgbi_palette[i]);
|
||||
if (dst < min_dst)
|
||||
|
@ -89,7 +113,10 @@ vec3 nearest_rgbi (vec3 original)
|
|||
idx = i;
|
||||
}
|
||||
}
|
||||
return rgbi_palette[idx];
|
||||
if (palette == 2.0) return rgbi_palette[idx];
|
||||
else if (palette == 1.0) return cga_palette[idx];
|
||||
else if (palette == 0.0) return simcga_palette[idx];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -98,7 +125,7 @@ float modu(float x, float y)
|
|||
return x - y * floor(x/y);
|
||||
}
|
||||
|
||||
//fragment
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color = texture(Source, vTexCoord.xy).rgb;
|
||||
|
@ -128,5 +155,10 @@ void main()
|
|||
color *= 255.0;
|
||||
color += ohyes;
|
||||
color /= 255.0;
|
||||
FragColor = vec4(nearest_rgbi(color*color_enhance), 1.0);
|
||||
|
||||
|
||||
vec3 final = nearest_rgbi(color*color_enhance);
|
||||
|
||||
|
||||
FragColor = vec4(final, 1.0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue