On 16.07.2008 17:44, Ian Romanick wrote: > Maciej Cencora wrote: > > | I tried implementing GL_ATI_separate_stencil in r300 driver, but I > | faced a problem. With my simple patch http://pastebin.com/m524d1ae7 > | r300 driver supports 2 stencil extensions (GL_ATI_separate_stencil and > | GL_EXT_stencil_two_side). Supporting both extensions causes problem in > > Are you sure r300 can do the full set of functionality of the EXT > version? I thought r300 couldn't handle having a different front and > back "ref" value. This is allowed by the EXT extension and OpenGL 2.0, > but it is not allowed by the ATI extension. > > Also, if you intend to support the EXT version, you also need to define > need_GL_EXT_stencil_two_side. > > | _mesa_update_stencil function (main/stencil.c). First condition in > | that function checks if EXT extension is supported, if so sets up > | ctx->Stencil._TestTwoSide properly. If both extensions are available > | and ATI extension is used then ctx->Stencil._TestTwoSide will always > | be false, and that's not what we want. Possibly other functions are > | also affected. Any suggestions how to properly fix this? > > Both extensions (and the OpenGL 2.0 functionality) can be supported > together, but I don't think Mesa implements it correctly. Basically, we > have to maintain two different sets of "back" stencil state. One is set > via the 2.0 or ATI functions and is used when STENCIL_TEST_TWO_SIDE_EXT > is disabled and is disabled. The other is set by StencilFunc and > StencilOp when the active stencil face is set to BACK. The > EXT_stencil_two_side spec has more details. > > http://opengl.org/registry/specs/EXT/stencil_two_side.txt Ahh you're right this defines what happens when both are supported so I was wrong that behaviour is not predictable. IMHO, it's a horrible kludge however (for something that doesn't offer any added functionality).
> > I believe the Mesa currently only tracks one set of back stencil state. Yes. > > I think that it is worth supporting the EXT version, when possible, > because there is GLX protocol for it. There is currently no GLX > protocol for the OpenGL 2.0 version or the ATI version. This means that > the EXT version is the only way to get two-sided stencil with indirect > rendering contexts. True, though I wonder why there's no GLX protocol for at least the OpenGL 2.0 version? Roland ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Mesa3d-dev mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
