Added support for OpenGL mode black listing to provide better support
for extension checking and invalidation of OpenGL modes associated with extensions.
This commit is contained in:
@@ -60,6 +60,10 @@ void GLObjectsVisitor::apply(osg::Geode& node)
|
||||
|
||||
void GLObjectsVisitor::apply(osg::Drawable& drawable)
|
||||
{
|
||||
if (_drawablesAppliedSet.count(&drawable)!=0) return;
|
||||
|
||||
_drawablesAppliedSet.insert(&drawable);
|
||||
|
||||
if (_mode&SWITCH_OFF_DISPLAY_LISTS)
|
||||
{
|
||||
drawable.setUseDisplayList(false);
|
||||
@@ -93,12 +97,22 @@ void GLObjectsVisitor::apply(osg::Drawable& drawable)
|
||||
|
||||
void GLObjectsVisitor::apply(osg::StateSet& stateset)
|
||||
{
|
||||
if (_mode&COMPILE_STATE_ATTRIBUTES && _state.valid())
|
||||
if (_stateSetAppliedSet.count(&stateset)!=0) return;
|
||||
|
||||
_stateSetAppliedSet.insert(&stateset);
|
||||
|
||||
if (_mode & COMPILE_STATE_ATTRIBUTES && _state.valid())
|
||||
{
|
||||
stateset.compileGLObjects(*_state);
|
||||
}
|
||||
if (_mode&RELEASE_STATE_ATTRIBUTES)
|
||||
|
||||
if (_mode & RELEASE_STATE_ATTRIBUTES)
|
||||
{
|
||||
stateset.releaseGLObjects(_state.get());
|
||||
}
|
||||
|
||||
if (_mode & CHECK_BLACK_LISTED_MODES)
|
||||
{
|
||||
stateset.checkValididityOfAssociatedModes(*_state.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +163,9 @@ void SceneView::setDefaults(unsigned int options)
|
||||
|
||||
if (options & COMPILE_GLOBJECTS_AT_INIT)
|
||||
{
|
||||
GLObjectsVisitor::Mode dlvMode = GLObjectsVisitor::COMPILE_DISPLAY_LISTS|GLObjectsVisitor::COMPILE_STATE_ATTRIBUTES;
|
||||
GLObjectsVisitor::Mode dlvMode = GLObjectsVisitor::COMPILE_DISPLAY_LISTS |
|
||||
GLObjectsVisitor::COMPILE_STATE_ATTRIBUTES |
|
||||
GLObjectsVisitor::CHECK_BLACK_LISTED_MODES;
|
||||
|
||||
#ifdef __sgi
|
||||
dlvMode = GLObjectsVisitor::COMPILE_STATE_ATTRIBUTES;
|
||||
|
||||
Reference in New Issue
Block a user