Fixed flickering bug of ramp (all animations where sprites touch edge of their field)

This commit is contained in:
=
2017-10-21 14:51:03 +02:00
parent 313bfe4a41
commit 33275f9046
6 changed files with 16 additions and 148 deletions

View File

@ -9,24 +9,26 @@ const float clampBorder = 0.005;
varying vec2 pass_TexCoords;
vec2 getTexCoordsInAtlas(in float atlasIndex);
vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex);
void main() {
vec2 texAtlasCoords = getTexCoordsInAtlas(texAtlasIndex);
vec2 clampedTexCoords = pass_TexCoords;
if(texAtlasSize.x > 1.0 || texAtlasSize.y > 1.0)
texAtlasCoords = clamp(texAtlasCoords, clampBorder, 1.0 - clampBorder);
clampedTexCoords = clamp(pass_TexCoords, clampBorder, 1.0 - clampBorder);
vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex);
gl_FragColor = texture2D(texture, texAtlasCoords);
gl_FragColor.a = min(gl_FragColor.a, alpha);
}
vec2 getTexCoordsInAtlas(in float atlasIndex){
vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex){
vec2 texAtlasCoords = vec2(0.0, 0.0);
texAtlasCoords.x = mod(pass_TexCoords.x, 1.0) / texAtlasSize.x;
texAtlasCoords.x = mod(clampedTexCoords.x, 1.0) / texAtlasSize.x;
texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x;
texAtlasCoords.y = mod(pass_TexCoords.y, 1.0) / texAtlasSize.y;
texAtlasCoords.y = mod(clampedTexCoords.y, 1.0) / texAtlasSize.y;
texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y;
return texAtlasCoords;