i should see some screenshots but… let’s try.
ok the algorithm is a two-pass one, no multitexturing.
the algorithm you described is:
glColor3f( 1,0,0 ); // hot red
glBlendFunc( GL_DST_COLOR, GL_ZERO ); // modulating blend
glBind( GL_TEXTURE_2D, mask );
draw_quad();
glBlendFunc( GL_ONE, GL_ONE ); // additive blend
glBind( GL_TEXTURE_2D, normal );
draw_quad();
GL_DST_COLOR, GL_ZERO translates to d = s*d + 0
wich is like modulation, and it means that if you start with a black background, like with glClearColor( 0,0,0,0 ), after any rendering all you get is black: what color is in the framebuffer before this stage ?
it is uncommon to start modulate-blending without a well defined framebuffer contents… maybe the bug is this.
to go on, i suppose fb is now white.
after the first stage, you should end up with a black image surrounded by a white background (your mask)
if you’ve choosen the hot red base color, you’ll get black over hot red.
second stage:
GL_ONE, GL_ONE -> d = s + d
all you render is summed up in the framebuffer.
drawing anything black won’t show up, it will keep the previous frambuffer pixel’s color.
the outcome of the second stage will be a colored non-mask-texture superimposed to the colored mask.
if you’re still with the hot red, your final effect will be red image with red bg.
but, in case your fb has black background, the first stage won’t participate in the final outcome.
black before, black after.
you’ll only see the second pass, thus red image in black background.
in the end, by controlling the base color, you control the background color AND the texture-modulating color.
but all depends on the previous fb contents due to the GL_DST_COLOR, GL_ZERO
maybe is not the reply you asked for, but i hope it helps