Hello,

I have a GUI application that recycles ContextIDs. After recently 
porting the app to use osgViewer in place of SceneView I have a puzzling 
issue that involves internal caching of texture objects. I have a 
Texture2D instance shared between two or more contexts in different 
windows. If one of the contexts is closed and a new one opened in it's 
place (using the same context ID), the texture is no longer valid in the 
new context (objects appear white and the OpenGL error 'invalid 
operation' appears in the console). Using an OpenGL debugger indicates 
that the error occurs in osg::Texture::applyTexImage2D_subload when 
glTexSubImage2D is called.

I can work around the problem by explicitly calling dirtyTextureObject() 
on every texture every time a context is being closed down, but I would 
imagine there is a better way since this is quite messy. I have tried a 
suggestion made in a previous thread which is to call this upon context 
closure:

viewer->getSceneData()->releaseGLObjects( graphicsContext->getState() );
graphicsContext->getState()->reset();
osg::flushAllDeletedGLObjects( 
graphicsContext->getState()->getContextID() );

Unfortunately this does not solve the problem. Any ideas?

---------------
Ross Anderson
[EMAIL PROTECTED]
Group 106 - Active Optical Systems
MIT Lincoln Laboratory
(781) 981-3344

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to