Update ega.slang (#426)

add CGA mode
This commit is contained in:
metallic77 2023-05-13 15:21:57 +03:00 committed by GitHub
parent 954467430c
commit a6305a1789
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -6,15 +6,21 @@ layout(push_constant) uniform Push
vec4 OriginalSize; vec4 OriginalSize;
vec4 OutputSize; vec4 OutputSize;
uint FrameCount; uint FrameCount;
float palette, color_enhance;
} params; } 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 _ 0.0
#define o (1./3.) #define o (1./3.)
#define b (2./3.) #define b (2./3.)
#define B 1.0 #define B 1.0
#define color_enhance 1.0
#define SourceSize params.SourceSize #define SourceSize params.SourceSize
layout(std140, set = 0, binding = 0) uniform UBO 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) // Color lookup table (RGBI palette with brown fix)
const vec3 rgbi_palette[19] = 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, _), vec3(_, b, _),
vec3(_, b, _), vec3(_, b, _),
@ -56,11 +65,24 @@ const vec3 rgbi_palette[19] =
vec3(o, o, o), vec3(o, o, o),
vec3(o, o, B), vec3(o, o, B),
vec3(o, B, o), vec3(o, B, o),
vec3(o, B, B),
vec3(B, o, o), vec3(B, o, o),
vec3(B, o, B),
vec3(B, B, o), 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 dst;
float min_dst = 2.0; float min_dst = 2.0;
int idx = 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]); dst = distance(original, rgbi_palette[i]);
if (dst < min_dst) if (dst < min_dst)
@ -89,7 +113,10 @@ vec3 nearest_rgbi (vec3 original)
idx = i; 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); return x - y * floor(x/y);
} }
//fragment
void main() void main()
{ {
vec3 color = texture(Source, vTexCoord.xy).rgb; vec3 color = texture(Source, vTexCoord.xy).rgb;
@ -128,5 +155,10 @@ void main()
color *= 255.0; color *= 255.0;
color += ohyes; color += ohyes;
color /= 255.0; color /= 255.0;
FragColor = vec4(nearest_rgbi(color*color_enhance), 1.0);
vec3 final = nearest_rgbi(color*color_enhance);
FragColor = vec4(final, 1.0);
} }