Everything works fine, but I get a strange result when I set X_START = 400.00 (the half of the width):
As you can see the values I get are an interpolated value between the color of the two squares.
I get the same result when I set GL_TEXTURE_WRAP_S to GL_REPEAT and I try to access to 0.0 or 800.0 texels, I know this is normal and that I can sort this out using GL_CLAMP, but I really don’t understand why I get the same result trying to access to the texels in the middle of the image (I have this problem with every setting of GL_TEXTURE_WRAP_S).
Because those wrap modes don’t differ with nearest filtering.
But with linear filter you probably want GL_CLAMP_TO_EDGE.
Otherwise sample locations on the texture where the filter fetches from the border will access the texture border color which defaults to black and then your textured objects get a dimmed edge around the textures.