stencil.c : eerie behavior ?

I took the stencil.c example and I made a little modification.

http://www.opengl.org/resources/code/basics/redbook/stencil.c

I made this change in the display function :

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

/* draw blue sphere where the stencil is 1 */
glStencilFunc (GL_EQUAL, 0x1, 0x1);
glStencilOp (GL_KEEP, GL_ZERO, GL_ZERO);
glCallList (BLUEMAT);
glutSolidSphere (0.5, 15, 15);

/* draw the tori where the stencil is not 1 */
glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc (GL_NOTEQUAL, 0x1, 0x1);
glPushMatrix();
glRotatef (45.0, 0.0, 0.0, 1.0);
glRotatef (45.0, 0.0, 1.0, 0.0);
glCallList (YELLOWMAT);
glutSolidTorus (0.275, 0.85, 15, 15);
glPushMatrix();
glRotatef (90.0, 1.0, 0.0, 0.0);
glutSolidTorus (0.275, 0.85, 15, 15);
glPopMatrix();
glPopMatrix();
}

Resize the window a few times and you will notice a very eerie behavior. Anyone can explain why ?

You don’t clear the stencil buffer between frames.

glClearStencil sets the clear value but doesn’t actually clear. You nead to bitwise OR in the stencil token in a glClear call.

You do clear stencil on a resize but make sure this is all you need and consider the full implications of this.