blob: e24a6ee36f28f5ffaaeb5df4142a4bae1de8789f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
shader_type canvas_item;
uniform vec4 palette_0 : source_color;
uniform vec4 palette_1 : source_color;
uniform vec4 palette_2 : source_color;
uniform vec4 palette_3 : source_color;
uniform vec4 palette_4 : source_color;
uniform vec4 palette_5 : source_color;
uniform vec4 palette_6 : source_color;
uniform vec4 palette_7 : source_color;
uniform vec4 palette_8 : source_color;
uniform vec4 palette_9 : source_color;
uniform vec4 palette_10 : source_color;
uniform vec4 palette_11 : source_color;
const int N_COLORS = 12;
uniform sampler2D screen_texture : hint_screen_texture;
void fragment() {
vec4 palette[N_COLORS] = { palette_0, palette_1, palette_2, palette_3, palette_4, palette_5, palette_6, palette_7, palette_8, palette_9, palette_10, palette_11 };
vec4 screen_color = texture(screen_texture, SCREEN_UV);
// Compute source color value
float sv = 0.f;
for (int i = 0; i < 3; i++) {
if (screen_color[i] > sv) { sv = screen_color[i]; }
}
int pal_i = int(floor((sv * 0.99f) * float(N_COLORS)));
vec4 result = palette[pal_i];
/*
float min_dist = 999.f; // always bigger than 1.0
vec4 result;
for (int i = 0; i < N_COLORS; i++) {
vec4 pc = palette[i];
// Compute palette color value
float pv = 0.f;
for (int j = 0; j < 3; j++) {
if (pc[j] > pv) { pv = pc[j]; }
}
float dist = abs(pv - sv);
if (dist < min_dist) {
min_dist = dist;
result = pc;
}
}
*/
COLOR = vec4(result.rgb, COLOR.a);
}
//void light() {
// // Called for every pixel for every light affecting the CanvasItem.
// // Uncomment to replace the default light processing function with this one.
//}
|