upgrade glsl code
This commit is contained in:
+1
-59
@@ -336,7 +336,7 @@ float write_10(vec2 uv, vec2 pos, int str[10])
|
||||
return d;
|
||||
}
|
||||
|
||||
d += char_at(uv, pos + vec2(i, 0), str[i]);
|
||||
d += char_at(uv, pos + vec2(i, 0.), str[i]);
|
||||
}
|
||||
|
||||
return d;
|
||||
@@ -386,62 +386,4 @@ float write_int_left(vec2 uv, vec2 pos, int value, int magnitude)
|
||||
return write_int(uv, pos, value, magnitude);
|
||||
}
|
||||
|
||||
int read(sampler2D tex, vec2 uv, float k, int d, float t)
|
||||
{
|
||||
float inv_k = 1 / k;
|
||||
vec2 tex_uv = floor(uv * k) * inv_k;
|
||||
tex_uv += vec2(d % 2, floor(d * .5)) * .5 * inv_k;
|
||||
return
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * .125)) > t) ? 1 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * .125)) > t) ? 2 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * .125)) > t) ? 4 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * .125)) > t) ? 8 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * .125)) > t) ? 16 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * .125)) > t) ? 32 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * .125)) > t) ? 64 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * .125)) > t) ? 128 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * .125)) > t) ? 256 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * .125)) > t) ? 512 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * .125)) > t) ? 1024 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * .125)) > t) ? 2048 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * .125)) > t) ? 4096 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * .125)) > t) ? 8192 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * .125)) > t) ? 16384 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * .125)) > t) ? 32768 : 0);
|
||||
}
|
||||
|
||||
// https://web.archive.org/web/20151229003112/http://blogs.msdn.com/b/jeuge/archive/2005/06/08/hakmem-bit-count.aspx
|
||||
int bit_count(int u)
|
||||
{
|
||||
int c;
|
||||
c = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111);
|
||||
return ((c + (c >> 3)) & 030707070707) % 63;
|
||||
}
|
||||
|
||||
int guess_char(sampler2D tex, vec2 uv, float k, float t)
|
||||
{
|
||||
int b0 = read(tex, uv, k, 0, t);
|
||||
int b1 = read(tex, uv, k, 1, t);
|
||||
int b2 = read(tex, uv, k, 2, t);
|
||||
int b3 = read(tex, uv, k, 3, t);
|
||||
|
||||
int mc = 0;
|
||||
int mb = 100;
|
||||
int i;
|
||||
int b;
|
||||
|
||||
for (i = 0x01; i <= 0xFF; i++) {
|
||||
if (i == 0x20 || i == 0xff || i == 0xDB) {
|
||||
continue;
|
||||
}
|
||||
b = bit_count(cp437[i * 4] ^ b0) + bit_count(cp437[i * 4 + 1] ^ b1) + bit_count(cp437[i * 4 + 2] ^ b2) + + bit_count(cp437[i * 4 + 3] ^ b3);
|
||||
if (b < mb) {
|
||||
mb = b;
|
||||
mc = i;
|
||||
}
|
||||
}
|
||||
|
||||
return mc;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user