View Full Version : How to setup Stencil buffer with MFC

01-04-2011, 10:06 PM
How to setup Stencil buffer with MFC

These day, I'm studying Stencil buffer to implement Shadow.
I made planar projected shadow. And I also made it with Shadow volume using Stencil buffer. NeHe tutorial was helpful for me.

Then, I applied that for my application. It runs on MFC Dialog.

To use stencil buffer with MFC, PFD should be set as None zero.
I allocated 8 bit for the stencil buffer.

sizeof(PIXELFORMATDESCRIPTOR), //size of this pfd
1, //version number
PFD_DRAW_TO_WINDOW| //support window
PFD_DOUBLEBUFFER, //double buffered
24, //24-bit color depth
0,0,0,0,0,0, //color bits ignored
8, //alpha buffer
0, //shift bit ignored
0,0,0,0, //accumulation bits ignored
16, //16bit z-buffer
8, //stencil buffer
0, //auxilar buffer
PFD_MAIN_PLANE, //main layer
0, //reserved
0,0,0 //layer masks ignored

And, some initialization for Stencil buffer were included.

glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glClearStencil(0); // Stencil Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glCullFace(GL_BACK); // Set Culling Face To Back Face
glEnable(GL_CULL_FACE); // Enable Culling

But, I couldn't get the expected result.

The shadow volume was created well.(I had checked it to display that through framebuffer with disabled stencil buffer.)
And The final transparent rect. was also rendered well.

I'm worrying about my missing something about Stencil set-up.

I had attached my VC2008 project.

Alfonse Reinheart
01-04-2011, 10:18 PM
16, //16bit z-buffer
8, //stencil buffer

In general, if you want a stencil buffer, you should also get a 24-bit depth buffer.


So, what is your stencil test?