Hi Robert,

I cleaned all my singleton before quitting the application. Now i have
the following crash but sometimes it's random. It seems the
TextureObjectManager is deleted before the cache is cleared by Registry
destructor and produce a crash somewhere. I am a bit confuse now, i
continue to track it.
Just for info i use the cache of the registry...


#0  0x081290a8 in ScopedLock (this=0xbf8132b4, m...@0x82d2004)
at 
/home/mornifle/dev/osg-trunk-svn/debug/lib/../include/OpenThreads/ScopedLock:31
#1  0xb7f87645 in osg::Texture::TextureObjectSet::orphan
(this=0x82d1ff8, to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:558
#2  0xb7f87723 in
osg::Texture::TextureObjectManager::releaseTextureObject
(this=0xa594ed90, to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:736
#3  0xb7f87796 in osg::Texture::releaseTextureObject (contextID=0,
to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:819
#4  0xb7f8780a in osg::Texture::dirtyTextureObject (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:1298
#5  0xb7f87b73 in ~Texture (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:1186
#6  0xb7f7cc2f in ~Texture2D (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture2D.cpp:52
#7  0x0810f6a2 in osg::Referenced::unref (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#8  0x0813434c in ~ref_ptr (this=0xb3af0994)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/ref_ptr:33
#9  0x0813436c in ~pair (this=0xb3af0990)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#10 0x0813437f in __gnu_cxx::new_allocator<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >::destroy (this=0xbf81343f,
__p=0xb3af0990) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/ext/new_allocator.h:118
#11 0x081343b4 in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_destroy_node (this=0xb4a0a078, __p=0xb3af0980)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:390
#12 0x0813443e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0980)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:943
#13 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a40)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#14 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a20)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#15 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a60)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#16 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a09ea0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#17 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a09e80)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#18 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a006b8)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#19 0x0813446e in ~_Rb_tree (this=0xb4a0a078)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:585
#20 0x081344c1 in ~map (this=0xb4a0a078)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_map.h:92
#21 0x08134cff in ~DeckNode (this=0xb4a09ff8)
at /home/mornifle/dev/pokme-modelview/src/Deck.cpp:45
#22 0x0810f6a2 in osg::Referenced::unref (this=0xb4a09ff8)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#23 0x0810f6c0 in ~ref_ptr (this=0xb4a0eed4)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/ref_ptr:33
#24 0xb75615b7 in ~pair (this=0xb4a0eed4)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#25 0xb75615e0 in ~pair (this=0xb4a0eed0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#26 0xb756164b in __gnu_cxx::new_allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >::destroy
(this=0xbf81364b, __p=0xb4a0eed0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/ext/new_allocator.h:118
#27 0xb7561690 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_destroy_node
(this=0x8239650, __p=0xb4a0eec0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:390
#28 0xb7561726 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_erase
(this=0x8239650, __x=0xb4a0eec0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:943
#29 0xb7561765 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear
(this=0x8239650) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:697
#30 0xb75617d9 in std::map<std::string,
std::pair<osg::ref_ptr<osg::Object>, double>, std::less<std::string>,
std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear
(this=0x8239650) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_map.h:582
#31 0xb754252f in osgDB::Registry::clearObjectCache (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:2170
#32 0xb754281b in osgDB::Registry::destruct (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:393
#33 0xb754c678 in ~Registry (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:372
#34 0x0810f6a2 in osg::Referenced::unref (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#35 0xb7562e86 in ~ref_ptr (this=0xb7599730)
at /home/mornifle/dev/osg-trunk-svn/include/osg/ref_ptr:33
#36 0xb6e57ed1 in exit () from /lib/libc.so.6
(gdb) bt
#0  0x081290a8 in ScopedLock (this=0xbf8132b4, m...@0x82d2004)
at 
/home/mornifle/dev/osg-trunk-svn/debug/lib/../include/OpenThreads/ScopedLock:31
#1  0xb7f87645 in osg::Texture::TextureObjectSet::orphan
(this=0x82d1ff8, to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:558
#2  0xb7f87723 in
osg::Texture::TextureObjectManager::releaseTextureObject
(this=0xa594ed90, to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:736
#3  0xb7f87796 in osg::Texture::releaseTextureObject (contextID=0,
to=0x892a078)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:819
#4  0xb7f8780a in osg::Texture::dirtyTextureObject (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:1298
#5  0xb7f87b73 in ~Texture (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture.cpp:1186
#6  0xb7f7cc2f in ~Texture2D (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/src/osg/Texture2D.cpp:52
#7  0x0810f6a2 in osg::Referenced::unref (this=0xb3af02d8)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#8  0x0813434c in ~ref_ptr (this=0xb3af0994)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/ref_ptr:33
#9  0x0813436c in ~pair (this=0xb3af0990)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#10 0x0813437f in __gnu_cxx::new_allocator<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >::destroy (this=0xbf81343f,
__p=0xb3af0990) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/ext/new_allocator.h:118
#11 0x081343b4 in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_destroy_node (this=0xb4a0a078, __p=0xb3af0980)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:390
#12 0x0813443e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0980)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:943
#13 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a40)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#14 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a20)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#15 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb3af0a60)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#16 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a09ea0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#17 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a09e80)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#18 0x0813441e in std::_Rb_tree<int, std::pair<int const,
osg::ref_ptr<osg::Texture2D> >, std::_Select1st<std::pair<int const,
osg::ref_ptr<osg::Texture2D> > >, std::less<int>,
std::allocator<std::pair<int const, osg::ref_ptr<osg::Texture2D> > >
>::_M_erase (this=0xb4a0a078, __x=0xb4a006b8)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:941
#19 0x0813446e in ~_Rb_tree (this=0xb4a0a078)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:585
#20 0x081344c1 in ~map (this=0xb4a0a078)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_map.h:92
#21 0x08134cff in ~DeckNode (this=0xb4a09ff8)
at /home/mornifle/dev/pokme-modelview/src/Deck.cpp:45
#22 0x0810f6a2 in osg::Referenced::unref (this=0xb4a09ff8)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#23 0x0810f6c0 in ~ref_ptr (this=0xb4a0eed4)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/ref_ptr:33
#24 0xb75615b7 in ~pair (this=0xb4a0eed4)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#25 0xb75615e0 in ~pair (this=0xb4a0eed0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_pair.h:73
#26 0xb756164b in __gnu_cxx::new_allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >::destroy
(this=0xbf81364b, __p=0xb4a0eed0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/ext/new_allocator.h:118
#27 0xb7561690 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_destroy_node
(this=0x8239650, __p=0xb4a0eec0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:390
#28 0xb7561726 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_erase
(this=0x8239650, __x=0xb4a0eec0)
at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:943
#29 0xb7561765 in std::_Rb_tree<std::string, std::pair<std::string
const, std::pair<osg::ref_ptr<osg::Object>, double> >,
std::_Select1st<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > >,
std::less<std::string>, std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear
(this=0x8239650) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_tree.h:697
#30 0xb75617d9 in std::map<std::string,
std::pair<osg::ref_ptr<osg::Object>, double>, std::less<std::string>,
std::allocator<std::pair<std::string const,
std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear
(this=0x8239650) at /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g
++-v4/bits/stl_map.h:582
#31 0xb754252f in osgDB::Registry::clearObjectCache (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:2170
#32 0xb754281b in osgDB::Registry::destruct (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:393
#33 0xb754c678 in ~Registry (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/src/osgDB/Registry.cpp:372
#34 0x0810f6a2 in osg::Referenced::unref (this=0x8239488)
at /home/mornifle/dev/osg-trunk-svn/debug/lib/../include/osg/Referenced:183
#35 0xb7562e86 in ~ref_ptr (this=0xb7599730)
at /home/mornifle/dev/osg-trunk-svn/include/osg/ref_ptr:33
#36 0xb6e57ed1 in exit () from /lib/libc.so.6



Cheers,
Cedric

-- 
+33 659 598 614  Cedric Pinson mailto:[email protected]
http://www.plopbyte.net


On Thu, 2009-10-08 at 15:22 +0200, Cedric Pinson wrote:
> Hi Robert,
> 
> I updated to the svn trunk today, and i can notice a crash when quitting
> my application. To be sure it was with the new texture manager i defined
> USE_NEW_TEXTURE_POOL to 0 and then to 1.
> 
> I dont have yet found the problem, but i guess it's linked with my
> texture manager, i own some static that reference texture.
> 
> The segfault appear when quitting
> Program received signal SIGSEGV, Segmentation fault.
> #0  0xb6ef7ddf in ?? () from /lib/libc.so.6
> #1  0xb5dddc40 in ?? () from //usr//lib/opengl/nvidia/lib/libGLcore.so.1
> #2  0xb5dddc40 in ?? () from //usr//lib/opengl/nvidia/lib/libGLcore.so.1
> #3  0xb54f2008 in ?? ()
> #4  0xb54f2008 in ?? ()
> #5  0xb6193d60 in ?? () from //usr//lib/opengl/nvidia/lib/libGLcore.so.1
> #6  0xb6fd0bcb in ?? () from /lib/libc.so.6
> #7  0xb6fd26e8 in ?? () from /lib/libc.so.6
> #8  0xb6fcf469 in ?? () from /lib/libc.so.6
> #9  0xb6fcf442 in ?? () from /lib/libc.so.6
> #10 0xbfc68254 in ?? ()
> #11 0xa7200010 in ?? ()
> #12 0x0000001d in ?? ()
> #13 0x00000000 in ?? ()
> 
> I guess there is something wrong with my texture management and the new
> texture pool.
> 
> I continue to dig
> 
> Cheers,
> Cedric
> 
> -- 
> +33 659 598 614  Cedric Pinson mailto:[email protected]
> http://www.plopbyte.net
> 
> 
> On Fri, 2009-10-02 at 22:21 +0100, Robert Osfield wrote:
> > Hi All,
> > 
> > I've been pretty quiet and the public list/forum through September,
> > keeping my head down developing new functionality for the OSG...  and
> > the new functionality I'm pleased to announce today is that we now
> > have a loverly new back-end implementation for texture objects and
> > buffer objects (VertexBufferObject, ElementBufferObjects and
> > PixelBufferObjects's) that provides a set of GL objects pools that
> > enable recycling of both orphaned GL objects and reuse of GL objects
> > that are still attached to the scene graph, but are stale - i.e.
> > haven't been rendered in the last frame.
> > 
> > The benefit the GL object pools provide is that we can scale up the
> > scene graph in main memory without blowing OpenGL driver and GPU
> > memory as we would do without the new pools.  This feature also
> > reduces the likely-hood of thrashing of OpenGL driver and GPU memory
> > so that where we might have previously seen frame drops due to memory
> > management we avoid them completely or reduce there impact.  The
> > memory pools will come in there own once we scale down the GPU memory
> > size, such as embedded systems, or on desktop/workstation applications
> > where GPU memory can be overflowed due to massive databases being kept
> > in main memory.  In the later case this issue is more compounded on
> > some OS's, such as Vista, that limits the amount of memory that OpenGL
> > drivers can allocate, so here it should help make the app more stable
> > (avoid the crashes due to out of memory errors) and faster.
> > 
> > So... how to try out the new texture and buffer object pools?   First
> > up you'll need to update to the latest OpenScenGraph svn/trunk.  Next
> > you'll need to enable the pools by setting the env vars: (example
> > below for bash)
> > 
> >   export OSG_TEXTURE_POOL_SIZE=100000000 // size in bytes (100Mb)
> >   export OSG_BUFFER_OBJECT_POOL_SIZE=200000000 // size in bytes (200Mb)
> > 
> > Then run your app with some big data, such a large paged database, you
> > can push the amount of main memory used by enabling the MaxPagedLOD
> > feature in the DatabasePager via:
> > 
> >   export OSG_MAX_PAGEDLOD=100000 // keep in memory a maximum of
> > 100,000 PagedLOD nodes
> > 
> > You can also set these values programmatically via osg::DisplaySettings.
> > 
> > A word of warning though, I have almost completely rewritten the way
> > that the backend that drives texture objects and buffer objects, even
> > when you don't enable the texture/buffer object pools, the code
> > managing the GL objects is still completely different. With major
> > changes like this comes the likelihood of regressions.  I've been
> > doing a range of tests at my end, but it's still far more limited in
> > scope to what the community will expose the OSG to, so... there you
> > may way see problems that I haven't.  The best I can do is endeavor to
> > get them fixed as quickly as possible, just let me know if you see
> > something odd and I we can work together to spot what the underlying
> > problem and squish it.  The more testing we can get the quicker we can
> > shape the code up to being release quality.
> > 
> > Have fun with it :-)
> > Robert.
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > 
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Attachment: signature.asc
Description: This is a digitally signed message part

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

Reply via email to