Hi Miguel,
2011/5/28 Miguel Angel Exposito <rad...@gmail.com> > Hi, > > I'm pretty new to osgPPU and I'm working on a port of Jimenez's MLAA full > scene antialiasing algorithm. > > It's a 3-pass post processing effect and I got it working on osgPPU. > > - The first step detects the edges of the RTT'd scene and makes an 'edge > texture'. > - The second step uses the previous texture and a precomputed one to > calculate the area which pixels belonging to an edge would cover from an > ideal trapeze. > - The final step blends each pixel in its 4-neighborhood according to the > weights calculated in the previous step. > > I got it fully working in osgPPU, however, an important optimization can be > done by using the stencil buffer. The idea behind this is: > > - Initially the stencil is cleared out to 0 > > - The first step of the post effect (edges detection) creates a stencil > mask writing 1's to the stencil wherever there's an edge pixel. The pixels > not belonging to an edge are discarded in the shader, so no writting to the > stencil will occur in that case. > > - In the subsequent steps the stencil test discards every pixel not covered > by the mask, hence only the edge pixels are processed (weights calculation > and final blend). > > And this is how I tried to achieve it: > > - I created two osg::Stencils, one for creating the mask and other for > using the mask and discarding everything else. > - I attached the stencils to their corresponding osgPPU::Unit's. > > (now, I need to clear the stencil at the beginning of the postFX chain, but > not between each pass) > - I'm not sure about where glClear (with the clear mask of the camera the > osgPPU::Processor is using) is called, but my guess is when rendering the > scene to texture, not between units so I think that setting the clearMask in > the camera is pointless. > - I tried to call glClear(GL_STENCIL_BUFFER_BIT) in a notify callback set > in the first unit of my chain. > > > This has been driving me nuts for a couple of days now. It seems that the > stencil buffer is not being written, or cleared prematurely between passes. > And the stencil test only seems to be done if I enable it in the last unit's > stateset. > > What am I missing? > > - Have you create an opengl context with a stencil buffer ? - Have you try to use osg:ClearNode to clear the stencil buffer ? - Have you check opengl call order in a debugger like gDEBugger ? no more ideas ... for now. > I can post the code if you want! > > yes please, could be more simple to find the bug. Cheers David Callu ... > > > Thank a lot in advance! > > Cheers, > Miguel > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=39894#39894 > > > > > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org