refactor(default): glsl cleaning (1/2)
This commit is contained in:
+41
-79
@@ -1,7 +1,9 @@
|
||||
#include inc_sentences.glsl
|
||||
|
||||
#ifndef INC_CP437
|
||||
#define INC_CP437
|
||||
|
||||
const int cp437[] = {
|
||||
const int cp437[] = int[1024](
|
||||
0x0000, 0x0000, 0x0000, 0x0000, // 0x00, NUL
|
||||
0x151E, 0x8A87, 0xE19D, 0x789B, // 0x01, SOH, SMILEY BLACK
|
||||
0xFBFE, 0xFDF7, 0xEF73, 0x7FEC, // 0x02, STX, SMILEY LIGHT
|
||||
@@ -257,10 +259,10 @@ const int cp437[] = {
|
||||
0x666E, 0x3331, 0x0006, 0x0003, // 0xFC, ⁿ
|
||||
0x6C8E, 0x0010, 0x000E, 0x0001, // 0xFD, ²
|
||||
0xCC00, 0x3300, 0x00CC, 0x0033, // 0xFE, ■
|
||||
0x0000, 0x0000, 0x0000, 0x0000, // 0xFF, NBSP
|
||||
};
|
||||
0x0000, 0x0000, 0x0000, 0x0000 // 0xFF, NBSP
|
||||
);
|
||||
|
||||
const int charsets[] = {
|
||||
const int charsets[] = int[18](
|
||||
0x30, 10, // NUMBERS
|
||||
0x41, 26, // UPPERCASE LETTERS
|
||||
0x61, 26, // LOWERCASE LETTERS
|
||||
@@ -269,12 +271,12 @@ const int charsets[] = {
|
||||
0xB3, 40, // BARS
|
||||
0xE0, 16, // GREEK
|
||||
0x80, 28, // ACCENTS
|
||||
0xB0, 3, // SHADES
|
||||
};
|
||||
0xB0, 3 // SHADES
|
||||
);
|
||||
|
||||
#define CHARSETS 8
|
||||
|
||||
const int hex_chars[] = {
|
||||
const int hex_chars[] = int[16](
|
||||
0x30,
|
||||
0x31,
|
||||
0x32,
|
||||
@@ -290,29 +292,29 @@ const int hex_chars[] = {
|
||||
0x43,
|
||||
0x44,
|
||||
0x45,
|
||||
0x46,
|
||||
};
|
||||
0x46
|
||||
);
|
||||
|
||||
bool char(vec2 pos, int code)
|
||||
{
|
||||
if (pos.x < 0.0 || pos.y < 0.0 || pos.x >= 1.0 || pos.y >= 1.0) {
|
||||
if (pos.x < .0 || pos.y < .0 || pos.x >= 1. || pos.y >= 1.) {
|
||||
return false;
|
||||
}
|
||||
ivec2 pos2 = ivec2(pos.x * 8.0, (1 - pos.y) * 8.0);
|
||||
ivec2 pos2 = ivec2(pos.x * 8., (1 - pos.y) * 8.);
|
||||
ivec2 subpos = pos2 % 4;
|
||||
int v = int(pow(2, subpos.y * 4 + subpos.x));
|
||||
int d = int(pos2.y * 0.25) * 2 + int(pos2.x * 0.25);
|
||||
int v = int(pow(2., subpos.y * 4. + subpos.x));
|
||||
int d = int(pos2.y * .25) * 2 + int(pos2.x * .25);
|
||||
return (cp437[code * 4 + d] & v) > 0;
|
||||
}
|
||||
|
||||
float char_at(vec2 uv, vec2 pos, int code)
|
||||
{
|
||||
return char(uv - pos, code) ? 1 : 0;
|
||||
return char(uv - pos, code) ? 1. : 0.;
|
||||
}
|
||||
|
||||
float write_5(vec2 uv, vec2 pos, int str[5])
|
||||
{
|
||||
float d = 0;
|
||||
float d = 0.;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
@@ -320,7 +322,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
|
||||
return d;
|
||||
}
|
||||
|
||||
d += char_at(uv, pos + vec2(i, 0), str[i]);
|
||||
d += char_at(uv, pos + vec2(i, 0.), str[i]);
|
||||
}
|
||||
|
||||
return d;
|
||||
@@ -328,7 +330,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
|
||||
|
||||
float write_10(vec2 uv, vec2 pos, int str[10])
|
||||
{
|
||||
float d = 0;
|
||||
float d = 0.;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
@@ -336,7 +338,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;
|
||||
@@ -344,7 +346,7 @@ float write_10(vec2 uv, vec2 pos, int str[10])
|
||||
|
||||
float write_20(vec2 uv, vec2 pos, int str[20])
|
||||
{
|
||||
float d = 0;
|
||||
float d = 0.;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
@@ -352,96 +354,56 @@ float write_20(vec2 uv, vec2 pos, int str[20])
|
||||
return d;
|
||||
}
|
||||
|
||||
d += char_at(uv, pos + vec2(i, 0), str[i]);
|
||||
d += char_at(uv, pos + vec2(i, 0.), str[i]);
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
float write_int(vec2 uv, vec2 pos, uint value, uint magnitude)
|
||||
float write_int(vec2 uv, vec2 pos, int value, int magnitude)
|
||||
{
|
||||
value = max(0, value);
|
||||
int i;
|
||||
uint m = 1;
|
||||
float d = 0;
|
||||
float d = 0.;
|
||||
for (i = 0; i < magnitude; i++) {
|
||||
if (i == 0 || value >= m) {
|
||||
d += char_at(uv, pos + vec2(magnitude - i - 1, 0), int(0x30 + (value % (m * 10u)) / m));
|
||||
m *= 10u;
|
||||
d += char_at(uv, pos + vec2(magnitude - i - 1, 0.), int(0x30 + (value % (m * 10)) / m));
|
||||
m *= 10;
|
||||
}
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
float write_int_left(vec2 uv, vec2 pos, uint value, uint magnitude)
|
||||
float write_int_left(vec2 uv, vec2 pos, int value, int magnitude)
|
||||
{
|
||||
value = max(0, value);
|
||||
int i;
|
||||
uint m = 1;
|
||||
float d = 0;
|
||||
int m = 1;
|
||||
float d = 0.;
|
||||
for (i = 0; i < magnitude; i++) {
|
||||
if (i == 0 || value >= m) {
|
||||
pos.x += 1;
|
||||
m *= 10u;
|
||||
pos.x += 1.;
|
||||
m *= 10;
|
||||
}
|
||||
}
|
||||
return write_int(uv, pos, value, magnitude);
|
||||
}
|
||||
|
||||
int read(sampler2D tex, vec2 uv, float k, int d, float t)
|
||||
float write_sentence(vec2 uv, vec2 pos, int n)
|
||||
{
|
||||
float inv_k = 1 / k;
|
||||
vec2 tex_uv = floor(uv * k) * inv_k;
|
||||
tex_uv += vec2(d % 2, floor(d * 0.5)) * 0.5 * inv_k;
|
||||
return
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * 0.125)) > t) ? 1 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * 0.125)) > t) ? 2 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * 0.125)) > t) ? 4 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * 0.125)) > t) ? 8 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * 0.125)) > t) ? 16 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * 0.125)) > t) ? 32 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * 0.125)) > t) ? 64 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * 0.125)) > t) ? 128 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * 0.125)) > t) ? 256 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * 0.125)) > t) ? 512 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * 0.125)) > t) ? 1024 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * 0.125)) > t) ? 2048 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * 0.125)) > t) ? 4096 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * 0.125)) > t) ? 8192 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * 0.125)) > t) ? 16384 : 0) +
|
||||
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * 0.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;
|
||||
float d = 0.;
|
||||
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;
|
||||
for (i = 0; i < SENTENCE_MAX_LENGTH; i++) {
|
||||
if (sentences[n * SENTENCE_MAX_LENGTH + i] == 0) {
|
||||
return d;
|
||||
}
|
||||
|
||||
d += char_at(uv, pos + vec2(i, 0.), sentences[n * SENTENCE_MAX_LENGTH + i]);
|
||||
}
|
||||
|
||||
return mc;
|
||||
return d;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user