On Mon, 2012-08-20 at 10:44 -0600, Paul Martz wrote: > What you seem to be saying is that you want to set some OpenGL state once > that > applies to all contexts, and not have to set it every frame. AND, you don't > want > to have to add, then remove, a Camera draw callback just to make this > happen). > Is that a good synopsis of the issue?
It's close; I don't actually mind using a Camera draw callback for this purpose if it's appropriate. A real summarizing question is: under what conditions is it "safe" to query for support of a particular extension? And what is the preferred API for either fetching or being provided the contextID with which to do this? > You could keep a bool buffered_value that tells you whether or not you've set > the initial/global state for that particular context. Initially false, then > set > the global state for a context and flip it to true. Would something like that > help? > -Paul Certainly, but I'm still stuck on actually SETTING the state in the first place. :) > On 8/20/2012 10:27 AM, Jeremy Moles wrote: > > Hello everyone! I have a bit of a strange question here, so please bear > > with me. I'll try to be as descriptive as I possibly can, though I'm > > certain I will misuse some terminology. > > > > I am adding support for the NV_path_rendering extension to > > OpenSceneGraph. This extension adds a number of new functions to OpenGL > > when using an NVidia card which take on the form: > > > > glPath{_function_}NV > > > > http://osgnvpr.googlecode.com > > > > In order to create pointers to these new extension functions, I create > > an Extensions object in OSG using the contextID given to me during the > > compileGLObjects method of my overridden Drawable class. This works > > fine, and the code is running as I expect. > > > > https://code.google.com/p/osgnvpr/source/browse/trunk/src/PathCommands.cpp#45 > > > > HOWEVER, this paradigm really only works when I need to call extension > > functions associated with an instance (or instances) of my Drawable. > > There are other functions in the NV_path_rendering API that simply set > > global state, and it is with these functions that I'm having difficulty. > > > > The biggest problem here is that in order to get a pointer to the > > Extensions static object, I need a valid GraphicsContext contextID. > > However, I've tried a number of methods to obtain one of these, but > > every attempt I make actually breaks the entire codebase. I wish I could > > explain it better than that... > > > > For example, if I try to use some code like the following: > > > > ------------------------ > > > > Windows windows; > > > > viewer.getWindows(window); > > > > cID = windows[0]->getState()->getContextID(); > > > > osgNVPR::getNVPRExtensions(cID); > > > > ------------------------- > > > > ...then I seem to get an invalid contextID and all subsequent attempts > > to use that contextID (even by OSG itself) won't work. The entire > > rendering process seems to be broken in this manner. > > > > If instead I create a Camera::DrawCallback object and use the RenderInfo > > there instead, then everything works fine. However, I feel like I'm > > grossly misusing a Camera::DrawCallback just to set and unset state... > > > > My question is: if I need to set global state like this once, somewhere > > high in the scenegraph, what is the best way--keeping in mind that I > > also need a valid contextID in order to access my Extensions functions > > per-context? > > > > Thanks! > > > > _______________________________________________ > > 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 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org