The grey lines are probably due to not using pre-multiplied alpha. Using un-multiplied alpha with
in combination with linear filtering will produce that effect. The solution to that is to pre-multiply alpha, i.e. convert each texel from (r,g,b,a) to (a*r,a*g,a*b,a) and use
Using pre-multiplied alpha gives the correct result when interpolating between opaque and transparent pixels.
As for the vertical green line: Is the entire image a single texture, or is it two copies of the texture, one mirrored? I.e. is the line in the middle of the texture or at the edge? If it’s the edge, try
GL_CLAMP_TO_EDGE rather than