Changeset 7074
- Timestamp:
- 07/06/07 15:08:51 (6 years ago)
- Location:
- OpenSceneGraph/trunk
- Files:
-
- 2 added
- 11 modified
-
applications/osgviewer/osgviewer.cpp (modified) (2 diffs)
-
examples/osgteapot/osgteapot.cpp (modified) (3 diffs)
-
include/osg/GLObjects (added)
-
include/osgDB/DatabasePager (modified) (3 diffs)
-
src/osg/CMakeLists.txt (modified) (2 diffs)
-
src/osg/GLObjects.cpp (added)
-
src/osg/GraphicsContext.cpp (modified) (1 diff)
-
src/osgDB/DatabasePager.cpp (modified) (5 diffs)
-
src/osgUtil/SceneView.cpp (modified) (3 diffs)
-
src/osgViewer/GraphicsWindowCarbon.cpp (modified) (2 diffs)
-
src/osgViewer/GraphicsWindowWin32.cpp (modified) (2 diffs)
-
src/osgViewer/GraphicsWindowX11.cpp (modified) (3 diffs)
-
src/osgWrappers/osgDB/DatabasePager.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/applications/osgviewer/osgviewer.cpp
r7071 r7074 158 158 int processNum = 0; 159 159 160 osgDB::DatabasePager* dp = viewer.getScene()->getDatabasePager();161 162 160 for(unsigned int i=0; i<osg::GraphicsContext::getMaxContextID(); ++i) 163 161 { … … 172 170 ++processNum; 173 171 } 174 175 dp->addCompileGraphicsContext(gc);176 172 } 177 173 } -
OpenSceneGraph/trunk/examples/osgteapot/osgteapot.cpp
r7053 r7074 333 333 int main(int , char **) 334 334 { 335 #if 1 335 #if 1 336 336 337 337 // create viewer on heap as a test, this looks to be causing problems … … 345 345 viewer->setSceneData( createTeapot() ); 346 346 347 // create the windows and run the threads.348 347 return viewer->run(); 349 348 … … 358 357 // create the windows and run the threads. 359 358 return viewer.run(); 360 361 359 #endif 362 360 -
OpenSceneGraph/trunk/include/osgDB/DatabasePager
r7017 r7074 219 219 } 220 220 221 222 /** Add a graphics context that should be used to compile/delete OpenGL objects.*/223 void addCompileGraphicsContext(osg::GraphicsContext* gc);224 225 /** Removed a graphics context that should be used to compile/delete OpenGL objects.*/226 void removeCompileGraphicsContext(osg::GraphicsContext* gc);227 228 229 221 /** Turn the compilation of rendering objects for specfied graphics context on (true) or off(false). */ 230 222 void setCompileGLObjectsForContextID(unsigned int contextID, bool on); … … 232 224 /** Get whether the compilation of rendering objects for specfied graphics context on (true) or off(false). */ 233 225 bool getCompileGLObjectsForContextID(unsigned int contextID); 234 235 226 236 227 /** Rerturn true if an external draw thread should call compileGLObjects(..) or not.*/ … … 376 367 377 368 ActiveGraphicsContexts _activeGraphicsContexts; 378 CompileGraphicsContexts _compileGraphicsContexts;369 // CompileGraphicsContexts _compileGraphicsContexts; 379 370 380 371 bool _doPreCompile; -
OpenSceneGraph/trunk/src/osg/CMakeLists.txt
r7047 r7074 60 60 ${HEADER_PATH}/GL2Extensions 61 61 ${HEADER_PATH}/GLExtensions 62 ${HEADER_PATH}/GLObjects 62 63 ${HEADER_PATH}/GLU 63 64 ${HEADER_PATH}/Geode … … 213 214 FrontFace.cpp 214 215 GLExtensions.cpp 216 GLObjects.cpp 215 217 Geode.cpp 216 218 Geometry.cpp -
OpenSceneGraph/trunk/src/osg/GraphicsContext.cpp
r7073 r7074 281 281 GraphicsContext* GraphicsContext::getCompileContext(unsigned int contextID) 282 282 { 283 osg::notify(osg::NOTICE)<<"GraphicsContext::getCompileContext "<<contextID<<std::endl;283 //osg::notify(osg::NOTICE)<<"GraphicsContext::getCompileContext "<<contextID<<std::endl; 284 284 OpenThreads::ScopedLock<OpenThreads::Mutex> lock(s_contextIDMapMutex); 285 285 return s_contextIDMap[contextID]._compileContext.get(); -
OpenSceneGraph/trunk/src/osgDB/DatabasePager.cpp
r7038 r7074 293 293 startThread(); 294 294 } 295 296 295 } 297 296 } … … 595 594 } 596 595 597 if (loadedObjectsNeedToBeCompiled && !_compileGraphicsContexts.empty())598 { 599 for( CompileGraphicsContexts::iterator citr = _compileGraphicsContexts.begin();600 citr != _compileGraphicsContexts.end();601 ++ citr)596 if (loadedObjectsNeedToBeCompiled) 597 { 598 for(ActiveGraphicsContexts::iterator itr = _activeGraphicsContexts.begin(); 599 itr != _activeGraphicsContexts.end(); 600 ++itr) 602 601 { 603 osg::GraphicsContext* gc = citr->get();602 osg::GraphicsContext* gc = osg::GraphicsContext::getCompileContext(*itr); 604 603 if (gc) 605 604 { 606 osg::OperationsThread* gt = gc->getGraphicsThread(); 607 if (gt) gt->add(new DatabasePager::CompileOperation(this)); 605 osg::OperationsThread* gt = gc->getGraphicsThread(); 606 if (gt) 607 { 608 gt->add(new DatabasePager::CompileOperation(this)); 609 } 608 610 else 609 611 { 610 612 gc->makeCurrent(); 611 612 // osg::notify(osg::NOTICE)<<"Database pager thread compiling"<<std::endl;613 613 614 614 compileAllGLObjects(*(gc->getState())); … … 618 618 } 619 619 } 620 620 621 // osg::notify(osg::NOTICE)<<"Done compiling in paging thread"<<std::endl; 621 622 } … … 884 885 } 885 886 886 void DatabasePager::addCompileGraphicsContext(osg::GraphicsContext* gc)887 {888 for(CompileGraphicsContexts::iterator itr = _compileGraphicsContexts.begin();889 itr != _compileGraphicsContexts.end();890 ++itr)891 {892 if (*itr == gc)893 {894 return;895 }896 }897 898 _compileGraphicsContexts.push_back(gc);899 900 setCompileGLObjectsForContextID(gc->getState()->getContextID(),true);901 }902 903 void DatabasePager::removeCompileGraphicsContext(osg::GraphicsContext* gc)904 {905 for(CompileGraphicsContexts::iterator itr = _compileGraphicsContexts.begin();906 itr != _compileGraphicsContexts.end();907 ++itr)908 {909 if (*itr == gc)910 {911 _compileGraphicsContexts.erase(itr);912 return;913 }914 }915 }916 917 887 void DatabasePager::setCompileGLObjectsForContextID(unsigned int contextID, bool on) 918 888 { … … 952 922 { 953 923 if (_activeGraphicsContexts.count(contextID)==0) return false; 954 955 for(CompileGraphicsContexts::const_iterator citr = _compileGraphicsContexts.begin(); 956 citr != _compileGraphicsContexts.end(); 957 ++citr) 958 { 959 const osg::GraphicsContext* gc = citr->get(); 960 if (gc && gc->getState()->getContextID()==contextID) return false; 961 } 962 963 return true; 924 925 return osg::GraphicsContext::getCompileContext(contextID)==0; 964 926 } 965 927 -
OpenSceneGraph/trunk/src/osgUtil/SceneView.cpp
r7062 r7074 17 17 #include <osg/Timer> 18 18 #include <osg/GLExtensions> 19 #include <osg/GLObjects> 19 20 #include <osg/Notify> 20 21 #include <osg/Texture> 21 #include <osg/VertexProgram>22 #include <osg/FragmentProgram>23 22 #include <osg/AlphaFunc> 24 23 #include <osg/TexEnv> … … 26 25 #include <osg/LightModel> 27 26 #include <osg/CollectOccludersVisitor> 28 #include <osg/Shader>29 #include <osg/BufferObject>30 27 31 28 #include <osg/GLU> … … 836 833 _requiresFlush = false; 837 834 838 double availableTime = 100.0f; 835 osg::flushAllDeletedGLObjects(getState()->getContextID()); 836 } 837 838 void SceneView::flushDeletedGLObjects(double& availableTime) 839 { 840 osg::State* state = _renderInfo.getState(); 841 842 _requiresFlush = false; 843 839 844 double currentTime = state->getFrameStamp()?state->getFrameStamp()->getReferenceTime():0.0; 840 841 osg::FrameBufferObject::flushDeletedFrameBufferObjects(state->getContextID(),currentTime,availableTime); 842 osg::RenderBuffer::flushDeletedRenderBuffers(state->getContextID(),currentTime,availableTime); 843 osg::Texture::flushAllDeletedTextureObjects(state->getContextID()); 844 osg::Drawable::flushAllDeletedDisplayLists(state->getContextID()); 845 osg::Drawable::flushDeletedVertexBufferObjects(state->getContextID(),currentTime,availableTime); 846 osg::VertexProgram::flushDeletedVertexProgramObjects(state->getContextID(),currentTime,availableTime); 847 osg::FragmentProgram::flushDeletedFragmentProgramObjects(state->getContextID(),currentTime,availableTime); 848 osg::Program::flushDeletedGlPrograms(state->getContextID(),currentTime,availableTime); 849 osg::Shader::flushDeletedGlShaders(state->getContextID(),currentTime,availableTime); 850 osg::BufferObject::flushDeletedBufferObjects(state->getContextID(),currentTime,availableTime); 851 } 852 853 void SceneView::flushDeletedGLObjects(double& availableTime) 854 { 855 osg::State* state = _renderInfo.getState(); 856 857 _requiresFlush = false; 858 859 double currentTime = state->getFrameStamp()?state->getFrameStamp()->getReferenceTime():0.0; 860 861 osg::FrameBufferObject::flushDeletedFrameBufferObjects(state->getContextID(),currentTime,availableTime); 862 osg::RenderBuffer::flushDeletedRenderBuffers(state->getContextID(),currentTime,availableTime); 863 osg::Texture::flushDeletedTextureObjects(state->getContextID(),currentTime,availableTime); 864 osg::Drawable::flushDeletedDisplayLists(state->getContextID(),availableTime); 865 osg::Drawable::flushDeletedVertexBufferObjects(state->getContextID(),currentTime,availableTime); 866 osg::VertexProgram::flushDeletedVertexProgramObjects(state->getContextID(),currentTime,availableTime); 867 osg::FragmentProgram::flushDeletedFragmentProgramObjects(state->getContextID(),currentTime,availableTime); 868 osg::Program::flushDeletedGlPrograms(state->getContextID(),currentTime,availableTime); 869 osg::Shader::flushDeletedGlShaders(state->getContextID(),currentTime,availableTime); 870 osg::BufferObject::flushDeletedBufferObjects(state->getContextID(),currentTime,availableTime); 845 846 osg::flushDeletedGLObjects(getState()->getContextID(), currentTime, availableTime); 871 847 } 872 848 -
OpenSceneGraph/trunk/src/osgViewer/GraphicsWindowCarbon.cpp
r7066 r7074 344 344 345 345 /** dtor */ 346 ~OSXCarbonWindowingSystemInterface() { 347 if (_displayIds) 348 delete[] _displayIds; 346 ~OSXCarbonWindowingSystemInterface() 347 { 348 if (osg::Referenced::getDeleteHandler()) 349 { 350 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 351 osg::Referenced::getDeleteHandler()->flushAll(); 352 } 353 354 if (_displayIds) delete[] _displayIds; 349 355 _displayIds = NULL; 350 356 } … … 1135 1141 ~RegisterWindowingSystemInterfaceProxy() 1136 1142 { 1143 if (osg::Referenced::getDeleteHandler()) 1144 { 1145 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 1146 osg::Referenced::getDeleteHandler()->flushAll(); 1147 } 1148 1137 1149 osg::GraphicsContext::setWindowingSystemInterface(0); 1138 1150 } -
OpenSceneGraph/trunk/src/osgViewer/GraphicsWindowWin32.cpp
r7067 r7074 568 568 Win32WindowingSystem::~Win32WindowingSystem() 569 569 { 570 if (osg::Referenced::getDeleteHandler()) 571 { 572 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 573 osg::Referenced::getDeleteHandler()->flushAll(); 574 } 575 570 576 unregisterWindowClasses(); 571 577 } … … 2185 2191 ~RegisterWindowingSystemInterfaceProxy() 2186 2192 { 2193 if (osg::Referenced::getDeleteHandler()) 2194 { 2195 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 2196 osg::Referenced::getDeleteHandler()->flushAll(); 2197 } 2198 2187 2199 osg::GraphicsContext::setWindowingSystemInterface(0); 2188 2200 } -
OpenSceneGraph/trunk/src/osgViewer/GraphicsWindowX11.cpp
r7071 r7074 19 19 #include <osgViewer/api/X11/GraphicsWindowX11> 20 20 #include <osgViewer/api/X11/PixelBufferX11> 21 22 #include <osg/DeleteHandler> 21 23 22 24 #include <X11/Xlib.h> … … 1179 1181 ~X11WindowingSystemInterface() 1180 1182 { 1183 if (osg::Referenced::getDeleteHandler()) 1184 { 1185 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 1186 osg::Referenced::getDeleteHandler()->flushAll(); 1187 } 1188 1181 1189 //osg::notify(osg::NOTICE)<<"~X11WindowingSystemInterface()"<<std::endl; 1182 1190 XSetErrorHandler(0); … … 1252 1260 { 1253 1261 osg::notify(osg::INFO)<<"~RegisterWindowingSystemInterfaceProxy()"<<std::endl; 1262 1263 if (osg::Referenced::getDeleteHandler()) 1264 { 1265 osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0); 1266 osg::Referenced::getDeleteHandler()->flushAll(); 1267 } 1268 1254 1269 osg::GraphicsContext::setWindowingSystemInterface(0); 1270 1255 1271 } 1256 1272 }; -
OpenSceneGraph/trunk/src/osgWrappers/osgDB/DatabasePager.cpp
r7024 r7074 260 260 "Merge the changes to the scene graph by calling calling removeExpiredSubgraphs then addLoadedDataToSceneGraph. ", 261 261 "Note, must only be called from single thread update phase. "); 262 I_Method1(void, addCompileGraphicsContext, IN, osg::GraphicsContext *, gc,263 Properties::NON_VIRTUAL,264 __void__addCompileGraphicsContext__osg_GraphicsContext_P1,265 "Add a graphics context that should be used to compile/delete OpenGL objects. ",266 "");267 I_Method1(void, removeCompileGraphicsContext, IN, osg::GraphicsContext *, gc,268 Properties::NON_VIRTUAL,269 __void__removeCompileGraphicsContext__osg_GraphicsContext_P1,270 "Removed a graphics context that should be used to compile/delete OpenGL objects. ",271 "");272 262 I_Method2(void, setCompileGLObjectsForContextID, IN, unsigned int, contextID, IN, bool, on, 273 263 Properties::NON_VIRTUAL,
