Multiple colour attachments are used for writing to more than one colour target from the same invocation of the fragment shader. That is, they are for fragment shader outputs.
A common use of multiple attachments is when you do deferred shading, where you may have one attachment for output position, one for output normal, one for output diffuse colour.
If you want to use multiple textures as inputs when drawing, you bind your textures to separate texture units and store the index of the units in your sampler uniforms. This is the same thing you do with a single texture, but as you use other texture units than 0, you may not have explicitly done so.
OpenGL has a set of texture units, named from GL_TEXTURE0 up to some maximum. In the old days, each texture unit was sampled and the results combined in some manner by the fixed function pipeline. You select the active texture unit that
glBindTexture shall affect with a call to
glActiveTexture(GL_TEXTURE0 + unitNumber).
Once you've got your texture ids bound to texture units, you can relate your sampler uniform variables in your shader with the texture units. If you have
uniform sampler2D mapTexture in your shader, you would
glGetUniformLocation(prog, "mapTexture") in your code to find the uniform, and
glUniform1i(that, N) to indicate it should read from texture unit N.
For more details, consider reading a proper article like the arcsynthesis section on texturing.
The task you present, drawing a base image and something on top of it can be done in two ways:
- draw a quad textured with your base image, enable alpha blending, and draw a quad with your modification on top;
- draw a quad with a shader that combines the source texture with some modification, either from texture or programmatically.