Hello Gerrit and/or Carsten, On 26.10.2015 13:57, Johannes Brunen wrote: > > Is it possible to a allow a subtractive > MaterialChunkOverrideGroup core. > > Is that possible and can I get some support in realizing that? > I have made a first implementation of what I have in mind. Attached you can find my solution. Could you take a look at it and give me some feedback. I would like to see something like this in OpenSG 2 :-)
Best, JohannesP.S.: Files.azip is just a simple zip file. I uses this extension because the mail server filters *.zip files :-(
Files.azip
Description: Binary data
diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.h d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.h --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.h 2015-10-09 14:25:58.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.h 2015-10-27 10:49:50.750921100 +0100 @@ -157,6 +157,8 @@ class OSG_SYSTEM_DLLMAPPING RenderAction void addOverride (UInt32 uiSlot, StateChunk *pChunk); + void removeOverride (UInt32 uiSlot, + StateChunk *pChunk); const StateOverride *getCurrentOverrides(void ) const; diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.inl d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.inl --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.inl 2015-10-09 14:25:58.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderAction.inl 2015-10-27 10:50:17.646459500 +0100 @@ -114,6 +114,12 @@ void RenderAction::addOverride(UInt32 ui } inline +void RenderAction::removeOverride(UInt32 uiSlot, StateChunk *pChunk) +{ + _pActivePartition->removeOverride(uiSlot, pChunk); +} + +inline const StateOverride *RenderAction::getCurrentOverrides(void) const { return _pActivePartition->getCurrentOverrides(); diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.h d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.h --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.h 2015-10-09 14:25:58.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.h 2015-10-27 10:10:17.008150800 +0100 @@ -307,6 +307,9 @@ class OSG_SYSTEM_DLLMAPPING RenderPartit void addOverride (UInt32 uiSlot, StateChunk *pChunk); + void removeOverride (UInt32 uiSlot, + StateChunk *pChunk); + const StateOverride *getCurrentOverrides(void ) const; /*-------------------------- comparison ---------------------------------*/ diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.inl d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.inl --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.inl 2015-10-09 14:25:58.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/Action/RenderAction/OSGRenderPartition.inl 2015-10-27 10:10:45.370773000 +0100 @@ -386,6 +386,12 @@ void RenderPartition::addOverride(UInt32 } inline +void RenderPartition::removeOverride(UInt32 uiSlot, StateChunk *pChunk) +{ + _sStateOverrides.top()->removeOverride(uiSlot, pChunk); +} + +inline const StateOverride *RenderPartition::getCurrentOverrides(void) const { return _sStateOverrides.top(); diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.cpp d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.cpp --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.cpp 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.cpp 2015-10-27 10:50:54.831586300 +0100 @@ -224,7 +224,10 @@ Action::ResultE ChunkOverrideGroup::rend while(chIt != chEnd) { if(*chIt != NULL && (*chIt)->getIgnore() == false) - pAction->addOverride(uiSlot, *chIt); + if (getRemoveOverride()) + pAction->removeOverride(uiSlot, *chIt); + else + pAction->addOverride(uiSlot, *chIt); ++uiSlot; ++chIt; diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.fcd d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.fcd --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.fcd 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroup.fcd 2015-10-27 10:29:37.398521300 +0100 @@ -25,5 +25,16 @@ access="public" > </Field> + +<Field + name="removeOverride" + type="bool" + cardinality="single" + visibility="external" + defaultValue="false" + access="public" + > +</Field> + </FieldContainer> diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.cpp d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.cpp --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.cpp 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.cpp 2015-10-27 10:42:17.396990800 +0100 @@ -75,9 +75,9 @@ OSG_BEGIN_NAMESPACE \***************************************************************************/ /*! \class OSG::ChunkOverrideGroup - ChunkOverrideGroup is a simple group node that allows for material chunks - to be set that will override all chunks stored in materials in the entire - subtree. Currently the last chunk override wins (note the difference to + ChunkOverrideGroup is a simple group node that allows for material chunks + to be set that will override all chunks stored in materials in the entire + subtree. Currently the last chunk override wins (note the difference to the material group). This might change in future */ @@ -89,6 +89,10 @@ OSG_BEGIN_NAMESPACE */ +/*! \var bool ChunkOverrideGroupBase::_sfRemoveOverride + +*/ + /***************************************************************************\ * FieldType/FieldTrait Instantiation * @@ -132,6 +136,18 @@ void ChunkOverrideGroupBase::classDescIn static_cast<FieldGetMethodSig >(&ChunkOverrideGroup::getHandleFallbackChunkBlock)); oType.addInitialDesc(pDesc); + + pDesc = new SFBool::Description( + SFBool::getClassType(), + "removeOverride", + "", + RemoveOverrideFieldId, RemoveOverrideFieldMask, + false, + (Field::SFDefaultFlags | Field::FStdAccess), + static_cast<FieldEditMethodSig>(&ChunkOverrideGroup::editHandleRemoveOverride), + static_cast<FieldGetMethodSig >(&ChunkOverrideGroup::getHandleRemoveOverride)); + + oType.addInitialDesc(pDesc); } @@ -146,38 +162,49 @@ ChunkOverrideGroupBase::TypeObject Chunk reinterpret_cast<InitalInsertDescFunc>(&ChunkOverrideGroup::classDescInserter), false, 0, - "<?xml version=\"1.0\"?>\n" - "\n" - "<FieldContainer\n" - " name=\"ChunkOverrideGroup\"\n" - " parent=\"Group\"\n" - " library=\"System\"\n" - " pointerfieldtypes=\"both\"\n" - " structure=\"concrete\"\n" - " systemcomponent=\"true\"\n" - " parentsystemcomponent=\"true\"\n" - " isNodeCore=\"true\"\n" - " docGroupBase=\"GrpSystemNodeCoreGroups\"\n" - " >\n" - "\n" - " ChunkOverrideGroup is a simple group node that allows for material chunks\n" - " to be set that will override all chunks stored in materials in the entire \n" - " subtree. Currently the last chunk override wins (note the difference to\n" - " the material group). This might change in future\n" - "\n" - " <Field\n" - "\t name=\"fallbackChunkBlock\"\n" - "\t type=\"ChunkBlockPtr\"\n" - "\t cardinality=\"single\"\n" - "\t visibility=\"external\"\n" - "\t access=\"public\"\n" - "\t >\n" - " </Field>\n" - "</FieldContainer>\n" + "<?xml version=\"1.0\"?>\n" + "\n" + "<FieldContainer\n" + " name=\"ChunkOverrideGroup\"\n" + " parent=\"Group\"\n" + " library=\"System\"\n" + " pointerfieldtypes=\"both\"\n" + " structure=\"concrete\"\n" + " systemcomponent=\"true\"\n" + " parentsystemcomponent=\"true\"\n" + " isNodeCore=\"true\"\n" + " docGroupBase=\"GrpSystemNodeCoreGroups\"\n" + " >\n" + "\n" + " ChunkOverrideGroup is a simple group node that allows for material chunks\n" + " to be set that will override all chunks stored in materials in the entire \n" + " subtree. Currently the last chunk override wins (note the difference to\n" + " the material group). This might change in future\n" + "\n" + " <Field\n" + "\t name=\"fallbackChunkBlock\"\n" + "\t type=\"ChunkBlockPtr\"\n" + "\t cardinality=\"single\"\n" + "\t visibility=\"external\"\n" + "\t access=\"public\"\n" + "\t >\n" + " </Field>\n" + "\n" + "<Field\n" + " name=\"removeOverride\"\n" + " type=\"bool\"\n" + " cardinality=\"single\"\n" + " visibility=\"external\"\n" + " defaultValue=\"false\"\n" + " access=\"public\"\n" + "\t >\n" + "</Field>\n" + "\n" + "</FieldContainer>\n" "\n", - "ChunkOverrideGroup is a simple group node that allows for material chunks\n" - "to be set that will override all chunks stored in materials in the entire \n" - "subtree. Currently the last chunk override wins (note the difference to\n" + "ChunkOverrideGroup is a simple group node that allows for material chunks\n" + "to be set that will override all chunks stored in materials in the entire \n" + "subtree. Currently the last chunk override wins (note the difference to\n" "the material group). This might change in future\n" ); @@ -229,6 +256,19 @@ void ChunkOverrideGroupBase::setFallback } +SFBool *ChunkOverrideGroupBase::editSFRemoveOverride(void) +{ + editSField(RemoveOverrideFieldMask); + + return &_sfRemoveOverride; +} + +const SFBool *ChunkOverrideGroupBase::getSFRemoveOverride(void) const +{ + return &_sfRemoveOverride; +} + + @@ -243,6 +283,10 @@ SizeT ChunkOverrideGroupBase::getBinSize { returnValue += _sfFallbackChunkBlock.getBinSize(); } + if(FieldBits::NoField != (RemoveOverrideFieldMask & whichField)) + { + returnValue += _sfRemoveOverride.getBinSize(); + } return returnValue; } @@ -256,6 +300,10 @@ void ChunkOverrideGroupBase::copyToBin(B { _sfFallbackChunkBlock.copyToBin(pMem); } + if(FieldBits::NoField != (RemoveOverrideFieldMask & whichField)) + { + _sfRemoveOverride.copyToBin(pMem); + } } void ChunkOverrideGroupBase::copyFromBin(BinaryDataHandler &pMem, @@ -268,6 +316,11 @@ void ChunkOverrideGroupBase::copyFromBin editSField(FallbackChunkBlockFieldMask); _sfFallbackChunkBlock.copyFromBin(pMem); } + if(FieldBits::NoField != (RemoveOverrideFieldMask & whichField)) + { + editSField(RemoveOverrideFieldMask); + _sfRemoveOverride.copyFromBin(pMem); + } } //! create a new instance of the class @@ -393,13 +446,15 @@ FieldContainerTransitPtr ChunkOverrideGr ChunkOverrideGroupBase::ChunkOverrideGroupBase(void) : Inherited(), - _sfFallbackChunkBlock (NULL) + _sfFallbackChunkBlock (NULL), + _sfRemoveOverride (bool(false)) { } ChunkOverrideGroupBase::ChunkOverrideGroupBase(const ChunkOverrideGroupBase &source) : Inherited(source), - _sfFallbackChunkBlock (NULL) + _sfFallbackChunkBlock (NULL), + _sfRemoveOverride (source._sfRemoveOverride ) { } @@ -449,6 +504,31 @@ EditFieldHandlePtr ChunkOverrideGroupBas return returnValue; } + +GetFieldHandlePtr ChunkOverrideGroupBase::getHandleRemoveOverride (void) const +{ + SFBool::GetHandlePtr returnValue( + new SFBool::GetHandle( + &_sfRemoveOverride, + this->getType().getFieldDesc(RemoveOverrideFieldId), + const_cast<ChunkOverrideGroupBase *>(this))); + + return returnValue; +} + +EditFieldHandlePtr ChunkOverrideGroupBase::editHandleRemoveOverride (void) +{ + SFBool::EditHandlePtr returnValue( + new SFBool::EditHandle( + &_sfRemoveOverride, + this->getType().getFieldDesc(RemoveOverrideFieldId), + this)); + + + editSField(RemoveOverrideFieldMask); + + return returnValue; +} #ifdef OSG_MT_CPTR_ASPECT diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.h d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.h --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.h 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.h 2015-10-27 10:42:17.402991100 +0100 @@ -66,6 +66,7 @@ #include "OSGGroup.h" // Parent #include "OSGChunkBlockFields.h" // FallbackChunkBlock type +#include "OSGSysFields.h" // RemoveOverride type #include "OSGChunkOverrideGroupFields.h" @@ -95,15 +96,19 @@ class OSG_SYSTEM_DLLMAPPING ChunkOverrid enum { FallbackChunkBlockFieldId = Inherited::NextFieldId, - NextFieldId = FallbackChunkBlockFieldId + 1 + RemoveOverrideFieldId = FallbackChunkBlockFieldId + 1, + NextFieldId = RemoveOverrideFieldId + 1 }; static const OSG::BitVector FallbackChunkBlockFieldMask = (TypeTraits<BitVector>::One << FallbackChunkBlockFieldId); + static const OSG::BitVector RemoveOverrideFieldMask = + (TypeTraits<BitVector>::One << RemoveOverrideFieldId); static const OSG::BitVector NextFieldMask = (TypeTraits<BitVector>::One << NextFieldId); typedef SFUnrecChunkBlockPtr SFFallbackChunkBlockType; + typedef SFBool SFRemoveOverrideType; /*---------------------------------------------------------------------*/ /*! \name Class Get */ @@ -131,15 +136,22 @@ class OSG_SYSTEM_DLLMAPPING ChunkOverrid const SFUnrecChunkBlockPtr *getSFFallbackChunkBlock(void) const; SFUnrecChunkBlockPtr *editSFFallbackChunkBlock(void); + SFBool *editSFRemoveOverride (void); + const SFBool *getSFRemoveOverride (void) const; + ChunkBlock * getFallbackChunkBlock(void) const; + bool &editRemoveOverride (void); + bool getRemoveOverride (void) const; + /*! \} */ /*---------------------------------------------------------------------*/ /*! \name Field Set */ /*! \{ */ void setFallbackChunkBlock(ChunkBlock * const value); + void setRemoveOverride (const bool value); /*! \} */ /*---------------------------------------------------------------------*/ @@ -205,6 +217,7 @@ class OSG_SYSTEM_DLLMAPPING ChunkOverrid /*! \{ */ SFUnrecChunkBlockPtr _sfFallbackChunkBlock; + SFBool _sfRemoveOverride; /*! \} */ /*---------------------------------------------------------------------*/ @@ -235,6 +248,8 @@ class OSG_SYSTEM_DLLMAPPING ChunkOverrid GetFieldHandlePtr getHandleFallbackChunkBlock (void) const; EditFieldHandlePtr editHandleFallbackChunkBlock(void); + GetFieldHandlePtr getHandleRemoveOverride (void) const; + EditFieldHandlePtr editHandleRemoveOverride (void); /*! \} */ /*---------------------------------------------------------------------*/ diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.inl d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.inl --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.inl 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/NodeCores/Groups/Base/OSGChunkOverrideGroupBase.inl 2015-10-27 10:42:17.398990900 +0100 @@ -74,6 +74,31 @@ OSG::UInt16 ChunkOverrideGroupBase::getC /*------------------------------ get -----------------------------------*/ +//! Get the value of the ChunkOverrideGroup::_sfRemoveOverride field. + +inline +bool &ChunkOverrideGroupBase::editRemoveOverride(void) +{ + editSField(RemoveOverrideFieldMask); + + return _sfRemoveOverride.getValue(); +} + +//! Get the value of the ChunkOverrideGroup::_sfRemoveOverride field. +inline + bool ChunkOverrideGroupBase::getRemoveOverride(void) const +{ + return _sfRemoveOverride.getValue(); +} + +//! Set the value of the ChunkOverrideGroup::_sfRemoveOverride field. +inline +void ChunkOverrideGroupBase::setRemoveOverride(const bool value) +{ + editSField(RemoveOverrideFieldMask); + + _sfRemoveOverride.setValue(value); +} #ifdef OSG_MT_CPTR_ASPECT @@ -88,6 +113,9 @@ void ChunkOverrideGroupBase::execSync ( if(FieldBits::NoField != (FallbackChunkBlockFieldMask & whichField)) _sfFallbackChunkBlock.syncWith(pFrom->_sfFallbackChunkBlock); + + if(FieldBits::NoField != (RemoveOverrideFieldMask & whichField)) + _sfRemoveOverride.syncWith(pFrom->_sfRemoveOverride); } #endif diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.cpp d:/_xxx/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.cpp --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.cpp 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.cpp 2015-10-27 11:55:05.029443100 +0100 @@ -295,3 +295,154 @@ void StateOverride::addOverride(UInt32 u this->addOverride(uiSlot, pSPChunk); } } + + +// +// remove... +// +void StateOverride::removeOverride(UInt32 uiSlot, ShaderProgramChunk *pChunk) +{ + if(pChunk == NULL) + { + return; + } + + ShaderProgramChunk::MFVertexShaderType::const_iterator sIt = + pChunk->getMFVertexShader()->begin(); + + ShaderProgramChunk::MFVertexShaderType::const_iterator sEnd = + pChunk->getMFVertexShader()->end(); + + + for(; sIt != sEnd; ++sIt) + { + UInt16 uiProgId = (*sIt)->getProgramId(); + + std::pair<IdStoreIt, IdStoreIt> pairIt + = std::equal_range(_vProgIds.begin(), + _vProgIds.end (), + uiProgId ); + + if(pairIt.first != pairIt.second) + { + _vProgIds.erase(pairIt.first); + } + } + + sIt = pChunk->getMFGeometryShader()->begin(); + sEnd = pChunk->getMFGeometryShader()->end (); + + for(; sIt != sEnd; ++sIt) + { + UInt16 uiProgId = (*sIt)->getProgramId(); + + std::pair<IdStoreIt, IdStoreIt> pairIt + = std::equal_range(_vProgIds.begin(), + _vProgIds.end (), + uiProgId ); + + if(pairIt.first != pairIt.second) + { + _vProgIds.erase(pairIt.first); + } + } + + sIt = pChunk->getMFFragmentShader()->begin(); + sEnd = pChunk->getMFFragmentShader()->end (); + + for(; sIt != sEnd; ++sIt) + { + UInt16 uiProgId = (*sIt)->getProgramId(); + + std::pair<IdStoreIt, IdStoreIt> pairIt + = std::equal_range(_vProgIds.begin(), + _vProgIds.end (), + uiProgId ); + + if(pairIt.first != pairIt.second) + { + _vProgIds.erase(pairIt.first); + } + } + + ProgramChunkStore::const_iterator sIt2 = std::find(_vProgChunks.begin(), _vProgChunks.end(), pChunk); + if (sIt2 != _vProgChunks.end()) + _vProgChunks.erase(sIt2); +} + +void StateOverride::removeOverride(UInt32 uiSlot, + ShaderProgramVariableChunk *pChunk) +{ + if(pChunk == NULL) + { + return; + } + + UInt16 uiVarId = pChunk->getVariableId(); + + + std::pair<IdStoreIt, IdStoreIt> pairIt + = std::equal_range(_vProgVarIds.begin(), + _vProgVarIds.end (), + uiVarId ); + + + if(pairIt.first != pairIt.second) + { + _vProgVarIds.erase(pairIt.first); + } + + ProgramVarChunkStore::const_iterator sIt2 = std::find(_vProgVarChunks.begin(), _vProgVarChunks.end(), pChunk); + if (sIt2 != _vProgVarChunks.end()) + _vProgVarChunks.erase(sIt2); +} + +void StateOverride::removeOverride(UInt32 uiSlot, + SimpleSHLChunk *pChunk) +{ + eraseOverride(uiSlot, pChunk); +} + +void StateOverride::eraseOverride(UInt32 uiSlot, + StateChunk *pChunk) +{ + ChunkElement newElem(uiSlot, pChunk); + + + std::pair<ChunkStoreIt, ChunkStoreIt> pairIt + = std::equal_range(_vChunks.begin(), + _vChunks.end (), + newElem ); + + for (; pairIt.first != pairIt.second; ++pairIt.first) + { + if (pairIt.first->first == uiSlot) { + _vChunks.erase(pairIt.first); + break; + } + } +} + +void StateOverride::removeOverride(UInt32 uiSlot, StateChunk *pChunk) +{ + ShaderProgramChunk *pSPChunk = dynamic_cast<ShaderProgramChunk *>(pChunk); + + if(pSPChunk == NULL) + { + ShaderProgramVariableChunk *pSPVChunk = + dynamic_cast<ShaderProgramVariableChunk *>(pChunk); + + if(pSPVChunk == NULL) + { + eraseOverride(uiSlot, pChunk); + } + else + { + this->removeOverride(uiSlot, pSPVChunk); + } + } + else + { + this->removeOverride(uiSlot, pSPChunk); + } +} diff -rupN d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.h d:/_xxx/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.h --- d:/cpp_xxx_/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.h 2015-10-09 14:26:00.000000000 +0200 +++ d:/_xxx/Comp/builder/support/opensg/Source/System/State/Base/OSGStateOverride.h 2015-10-27 09:36:23.820912100 +0100 @@ -148,6 +148,17 @@ class OSG_SYSTEM_DLLMAPPING StateOverrid void addOverride (UInt32 uiSlot, ShaderProgramVariableChunk *pChunk); + + void removeOverride (UInt32 uiSlot, + StateChunk *pChunk); + void removeOverride (UInt32 uiSlot, + SimpleSHLChunk *pChunk); + void removeOverride (UInt32 uiSlot, + ShaderProgramChunk *pChunk); + void removeOverride (UInt32 uiSlot, + ShaderProgramVariableChunk *pChunk); + + bool empty (void ); bool isTransparent(void ); @@ -214,6 +225,9 @@ class OSG_SYSTEM_DLLMAPPING StateOverrid void insertOverride(UInt32 uiSlot, StateChunk *pChunk); + void eraseOverride (UInt32 uiSlot, + StateChunk *pChunk); + /*! \} */ /*========================== PRIVATE ================================*/
------------------------------------------------------------------------------
_______________________________________________ Opensg-users mailing list Opensg-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensg-users