Alpha Masks with OpenGL

I want to use an alpha mask in OpenGL so that white (1) = visible and black (0) = hidden.

So what I do, I write something in the alpha component of the framebuffer using glColorMask(False, False, False, True)(I use python, you see) and then draw some geometry over it using blending.

But it does not work: I tried to completely fill the alpha buffer 0, and then drew some geometry, which, therefore, would not be visible. But it always appears, the alpha buffer is completely ignored.

# Clear alpha buffer to 0, and clear color buffer.
# After this, the alpha buffer should probaby be filled with 0.
glClearColor(0, 0, 0, 0)
glClear(GL_COLOR_BUFFER_BIT)

# Disable blending.
glDisable(GL_BLEND)

# Disable color writing.
glColorMask(False, False, False, True)

# Set color to a white with alpha 0.
glColor4f(1, 1, 1, 0)

# Now draw a fullscreen quad.
# After this, the alpha buffer should really be filled with 0.
# Shouldn't it?
glBegin(GL_QUADS)
glVertex2f(0, 0)
glVertex2f(320, 0)
glVertex2f(320, 480)
glVertex2f(0, 480)
glEnd()

# Enable color writing.
glColorMask(True, True, True, True)

# Enable blending so that incoming fragments are multiplied
# by alpha values already in the buffer.
glEnable(GL_BLEND)
glBlendFunc(GL_DST_ALPHA, GL_ONE)

# Set color to a white with alpha 1.
glColor4f(1, 1, 1, 1)    

# Now draw a triangle.
# It should not be visible because alpha in framebuffer is 0
# and 0 * 1 = 0.
glBegin(GL_TRIANGLES)
glVertex2f(20, 50)
glVertex2f(300, 50)
glVertex2f(160, 210)
glEnd()

(Yes, the projection matrices are right, so my screen ranges from 0/0 to 320/240.)

The triangle should not be visible, what did I do wrong?

+5
source share
2
+3

glAlphaFunc (GL_GREATER, 0.5);

0

All Articles