Improvements to the #pragma(tic) shader composition support

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14694 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield
2015-02-13 12:50:43 +00:00
parent 77b8962bcc
commit 6bddbdf074
4 changed files with 50 additions and 12 deletions

View File

@@ -517,9 +517,20 @@ void State::apply(const StateSet* dstate)
const Program::PerContextProgram* previousLastAppliedProgramObject = _lastAppliedProgramObject;
applyModeList(_modeMap,dstate->getModeList());
#if 1
pushDefineList(_defineMap, dstate->getDefineList());
#else
applyDefineList(_defineMap, dstate->getDefineList());
#endif
applyAttributeList(_attributeMap,dstate->getAttributeList());
if ((_lastAppliedProgramObject!=0) && (previousLastAppliedProgramObject==_lastAppliedProgramObject) && _defineMap.changed)
{
// OSG_NOTICE<<"State::apply(StateSet*) Program already applied ("<<(previousLastAppliedProgramObject==_lastAppliedProgramObject)<<") and _defineMap.changed= "<<_defineMap.changed<<std::endl;
_lastAppliedProgramObject->getProgram()->apply(*this);
}
if (_shaderCompositionEnabled)
{
if (previousLastAppliedProgramObject == _lastAppliedProgramObject || _lastAppliedProgramObject==0)
@@ -545,6 +556,10 @@ void State::apply(const StateSet* dstate)
}
}
#if 1
popDefineList(_defineMap, dstate->getDefineList());
#endif
// pop the stateset from the stack
_stateStateStack.pop_back();
}
@@ -576,10 +591,19 @@ void State::apply()
// appropriate.
applyModeMap(_modeMap);
const Program::PerContextProgram* previousLastAppliedProgramObject = _lastAppliedProgramObject;
// go through all active StateAttribute's, applying where appropriate.
applyAttributeMap(_attributeMap);
if ((_lastAppliedProgramObject!=0) && (previousLastAppliedProgramObject==_lastAppliedProgramObject) && _defineMap.changed)
{
//OSG_NOTICE<<"State::apply() Program already applied ("<<(previousLastAppliedProgramObject==_lastAppliedProgramObject)<<") and _defineMap.changed= "<<_defineMap.changed<<std::endl;
if (_lastAppliedProgramObject) _lastAppliedProgramObject->getProgram()->apply(*this);
}
if (_shaderCompositionEnabled)
{
applyShaderComposition();