Stencil буфер

Всем привет.

Сталкнулся с такой траблой: не хочет работать stencil. Вроде все правильно делаю.

Инициализация

private void InitGL()

{

float[] pos = { 3, 3, 3, 1 };

float[] dir = { -1, -1, -1 };

float[] mat_specular = { 1, 1, 1, 1 };

Gl.glEnable(Gl.GL_DEPTH_TEST);

Gl.glEnable(Gl.GL_COLOR_MATERIAL);

Gl.glEnable(Gl.GL_LIGHTING);

Gl.glEnable(Gl.GL_LIGHT0);

Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, pos);

Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_SPOT_DIRECTION, dir);

Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, mat_specular);

Gl.glMaterialf(Gl.GL_FRONT, Gl.GL_SHININESS, 128.0f);

Glut.glutInit();

ResizeGL();

}

private void ResizeGL()

{

Gl.glViewport(0, 0, OGLC.Width, OGLC.Height);

Gl.glMatrixMode(Gl.GL_PROJECTION);

Gl.glLoadIdentity();

Gl.glOrtho(-5, 5, -5, 5, 2, 12);

Gl.glMatrixMode(Gl.GL_MODELVIEW);

}

private void Display()

{

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT | Gl.GL_STENCIL_BUFFER_BIT);

Gl.glLoadIdentity();

Glu.gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);

// вращаем сцену

Gl.glRotated(45, 1, 0, 0);

Gl.glRotated(45, 0, 1, 0);

Gl.glRotated(45, 0, 0, 1);

// разрешаем тест трафарета

Gl.glEnable(Gl.GL_STENCIL_TEST);

// рисуем куб и заполняем буффер трафарета единицами

// в том месте, где рисуется куб

Gl.glStencilFunc(Gl.GL_ALWAYS, 1, 0);

Gl.glStencilOp(Gl.GL_KEEP, Gl.GL_KEEP, Gl.GL_REPLACE);

Glut.glutSolidCube(2.5);

// заполняем буффер трафарета двойками

// в том месте, где сфера закрывает куб

Gl.glStencilFunc(Gl.GL_ALWAYS, 2, 0);

Gl.glStencilOp(Gl.GL_KEEP, Gl.GL_KEEP, Gl.GL_REPLACE);

Glut.glutSolidSphere(1.5, 20, 20);

// очищаем буфферы цвета и глубины

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

Gl.glStencilFunc(Gl.GL_EQUAL, 2, 255);

Gl.glColor3d(1, 1, 1);

Glut.glutSolidCube(2.5);

OGLC.Invalidate();

}

OGLC - сам элемент