read stencil buffer

Hi

I try to read the values of the stencil buffer for all pixels of the viewport, so I do:


unsigned char * data = new unsigned char[w*h];
glReadPixels(0,0,w,h,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE,data);

Where w and h are the width and heigth of the viewport.

However, I have a segmentation fault when calling glReadPixels. Why?

unsigned char * data = new unsigned char[screenw*screenh];
glReadPixels(0,0,screenw,screenh,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE,data);
delete data;

this doesn’t crash in my case. so check your allocation and deallocation, check “w” and “h” values twice, if it’s ok - something is wrong with surrounding code(and you, probably, should submit some to get help).

It’s very weird, it seems that when I call glReadPixels, it flushes all variables.

So before calling the function, sizeof(data)>0 but after, sizeof(data) is 0…

You might need some padding for the width, or adjust the packing with glPixelStorei. Data returned by glReadPixels isn’t byte-packed by default.

Read item 7, “Watch Your Pixel Store Alignment” here.

And as usual when a question about stencil not working is asked, we should always ask: did you ensure you created a Window which has stencil capabilities ?