[osg-submissions] Reuse of context IDs and cleanup of OpenGL resources.
Mark Sciabica
msciabica at itracs.com
Tue Apr 15 10:31:20 PDT 2008
Hi Robert,
Running my test program against the 2.3.7 developer release exhibits the
same errors as 2.2.0. Textures and display lists are not being
regenerated when a new context reuses a contextID, unless those objects
are under one of the Context's cameras when the context is destroyed.
Mark
Robert Osfield wrote:
> Hi Mark,
>
> The SVN version of OSG has extra support for deleting and discarding
> GL object ID's. I believe this will probably address the problems
> you've seen.
>
> Could you move to OSG-2.3.7 or OSG-SVN to see if the problem is addressed.
>
> Robert.
>
> On Mon, Apr 14, 2008 at 9:55 PM, Mark Sciabica <msciabica at itracs.com
> <mailto:msciabica at itracs.com>> wrote:
>
> These changes are a fix for the bug reported here:
>
> http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/2008-January/006048.html
>
>
>
> Briefly, the bug is that objects that allocate OpenGL resources
> (e.g. textures or display lists) for a given contextID believe
> those objects are still valid even after the contextID becomes
> invalid and then reused by another context.
>
>
>
> A source file is attached that reproduces the bug for display
> lists, textures, and fonts. Other resource types have not been
> tested, although code has been added to clean up all types that
> currently clean up their deleted items caches in the
> GraphicsContext::close function.
>
>
>
> The modifications were made against the 2.2.0 branch.
>
>
>
> Summary of changes.
>
>
>
> 1. ContextData now has a list of objects using OpenGL resources
> for its contextID.
>
>
>
> 2. Objects using OpenGL resources now add themselves to the above
> list when they allocate such a resource, and remove themselves
> when they deallocate it.
>
>
>
> 3. GraphicsContext::close deallocates the registered resources if
> no other contexts are using its contextID. Calling
> releaseGLObjects on the camera now seems redundant so was removed.
> (Exception: if the _state member of the GraphicsContext is NULL
> (which it is when close() is called more than once(and it is))
> then the camera will have its GLObjects released in ALL contexts.
> This seems incorrect as it needlessly releases objects in
> unrelated contexts.)
>
>
>
> 4. ContextData was made an Observer of the objects in its list to
> avoid dereferencing invalid pointers if those objects are
> destroyed without deallocating their resources.
>
>
>
> 5. Static functions that allocate resources and manage a cache of
> deleted objects were made nonstatic so they could register the
> object with the context at the time the resource was allocated.
> They assume the object they're called against is the object owning
> the resource. These functions have also been made protected to
> help enforce this.
>
>
>
>
>
> Regards,
>
>
>
> Mark
>
>
> _______________________________________________
> osg-submissions mailing list
> osg-submissions at lists.openscenegraph.org
> <mailto:osg-submissions at lists.openscenegraph.org>
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> osg-submissions mailing list
> osg-submissions at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.openscenegraph.org/pipermail/osg-submissions-openscenegraph.org/attachments/20080415/2a2365da/attachment.htm
More information about the osg-submissions
mailing list