Witam, w moim shaderze rysującym obraz z tablicy, pisanym na stronie shadertoy.com występuje niezrozumiały dla mnie błąd.
Kod:
//0-A ; 1-B ; 2-C ; 3-D ; 4-E ; 5-F ; 6-G ; 7-H ; 8-I ; 9-J
const int CHARS[1*25] = int[]( //Tablica jest poprawna.
/*A*/
1,1,1,1,1 ,
1,0,0,0,1 ,
1,1,1,1,1 ,
1,0,0,0,1 ,
1,0,0,0,1
/*B*/
);
vec4 char(vec4 color, vec4 background, int char, vec2 position, float size, vec2 uv)
{
ivec2 pixel = ivec2(ceil((uv.x-position.x)/size*5.0)-1.0, ceil((1.0-(uv.y-position.y))/size*5.0)-1.0);
int index = char*25 + pixel.y*5 + pixel.x; //Indeks jest obliczany poprawnie.
if(CHARS[index] == 1) //Zachodzi niewyjaśnialny błąd w działaniu.
return color;
else
return background;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord/iResolution.xy;
vec4 color = vec4(vec3(0.0), 1.0);
color = char(vec4(1.0), color, 0, vec2(0.0), 1.0, uv);
fragColor = color;
}
Mimo, iż sprawdziłem, czy tablica i kalkulowanie indeksu jest poprawne (i jest), to niestety przy próbie rysowania obrazu z tablicy, kolor całego ekranu zależy tylko od indeksu 0 tej tablicy.
Prosiłbym o wyjaśnienie mi, co tutaj jest napisane źle i dlaczego mimo poprawnie obliczonego indeksu, tablica i tak ukazuje jedynie ten zerowy. Pozdrawiam.