What I'd like to achieve is a blend where I draw two quads over eachother, both transparent, and the quad drawn last will cancel the colour of the previous quad completely, as if it was never there. However, it may not affect anything behind it besides that single other quad. Because I'm horrible at explaining, I made the following image:
I'm using very basic openGL immediate mode functions. Currently I have something along the lines of:
glEnable(GL_BLEND)
glColor4f(0,0,1,0.3f);
glBegin(GL_QUADS);
{
glVertex2d(100, -100);
glVertex2d(-100, -100);
glVertex2d(-100, 100);
glVertex2d(100, 100);
}
glEnd();
glColor4f(0,1,0,0.3f);
glBegin(GL_QUADS);
{
glVertex2d(150, -50);
glVertex2d(-50, -50);
glVertex2d(-50, 150);
glVertex2d(150, 150);
}
glEnd();

This isn't really a blending problem per se. One way to solve this would be to change the depth buffer comparison function. Use
GL_LESSfor the green square, while drawing the blue square first. This way the pixels of the green square overlapping the blue square, simply wouldn't be drawn at all to begin with.If you want to have elements visible under both the blue and green square. You could draw the first and then clear the depth buffer and then it's the same.
Whether there's a simpler way to do it, depends on what the overall goal is.