PDA

View Full Version : An odd shaped Clipped window inside a gl window



gearshifter47
06-24-2008, 02:34 PM
I need to create a small clipped window which is a combination of a Rectangle and a Circle and Display objects that fit inside of that window clipping.

GL_SCISSOR_TEST will not work because it is just rectangle.

The only other solution i can find is GL_STENCIL*.

Is there any suggestions on how to make this peculiarly shaped polygon inclusion window can be created?

Thank you!
Jason

tirsac
06-25-2008, 11:50 AM
So are you looking for a different method of creating this clip region, or do you want help using the stencil buffer?

gearshifter47
06-25-2008, 01:49 PM
Here is what I've got

glPushAttrib(GL_ALL_ATTRIB_BITS);

glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);

glEnable(GL_STENCIL_TEST);

glStencilFunc(GL_ALWAYS, 0x1, 0x1);
glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );

glBegin(GL_QUADS);
glVertex2f(x-20 , y+20);
glVertex2f(x+20, y+20);
glVertex2f(x+20, y-20);
glVertex2f(x-20 , y-20);
glEnd();

glStencilFunc(GL_EQUAL, 0x1, 0x1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_KEEP);


Am I to understand anything written beyond the last stencilFunc and StencilOp will be written if the StencilBuffer is not 1?

I am drawing that square, then Anything after drawing that square should not show up inside that square.

gearshifter47
06-25-2008, 04:49 PM
Sorry, I was in a Rush.

The goal of that code,disregard the glPushAttrib(GL_ALL_ATTRIB_BITS), is to make any sort of shape and make anything I draw appear only in that shape, and not outside of it.

The final product that I will be creating is an inclusion window that is in the shape of a circle/rectangle intersected, and I need a variety of different objects able to surf through that inclusion window without leaving it.

My code as I understand it creates a stencil_buffer setting all values to zero. I then create the square setting all the squares pixels to 1. I think change the stencil to draw if it is not equal to one. For some reason when I draw anything after the end of my code, It continues to draw right past the square and inside of it. This leads me to believe stencil_buffer isn't functioning properly.

Any help is appreciated,
Jason

tirsac
06-26-2008, 01:54 PM
Two things come to mind:

First, make sure you created your window with a stencil buffer. Call glGet with GL_STENCIL_BITS to check.

Second, you don't want to write to the stencil buffer after you draw your defining rectangle. Call glStencilMask(0), or use GL_KEEP for all parameters of glStencilOp. (In this case, the first parameter is the important one to get right since you're using GL_EQUAL.)