struct appin : application2vertex { float packed threemer[3]; float packed target[3]; }; struct vertout : vertex2fragment { float packed threemer[3]; float score; }; vertout main(appin IN, uniform float blosum[191]) { vertout OUT; float s; float pos; s = 0; pos = 191 - ((20 - IN.threemer[0]) * (21 - IN.threemer[0]))/2 + IN.target[0] - IN.threemer[0]; s = s + blosum[pos]; pos = 191 - ((20 - IN.threemer[1]) * (21 - IN.threemer[1]))/2 + IN.target[1] - IN.threemer[1]; s = s + blosum[pos]; pos = 191 - ((20 - IN.threemer[2]) * (21 - IN.threemer[2]))/2 + IN.target[2] - IN.threemer[2]; s = s + blosum[pos]; OUT.threemer[0] = IN.threemer[0]; OUT.threemer[1] = IN.threemer[1]; OUT.threemer[2] = IN.threemer[2]; OUT.score = s; return OUT; }