What's the difference between two code in shader?
I don't have enough rep to comment :(

Hi,

It looks like with (2), fs_in.TexCoords is == vec2(0.0,0.0). Do you keep both in VS_OUT {}/ out VS_OUT {} and out vec2/in vec2 ? If so, it's possible that as both have the same name (TexCoords) the compiler is confused. Try using only one of the two options.