Hi, sorry for the silence, I'll have a detailed look tomorrow (as I did the patch that broke things). Was offline for a while, just back.
kind regards gerrit On Mon, 2013-08-26 at 11:38 +0200, Johannes wrote: > Hello Carsten and Gerrit, > > I have not solved this issue yet but I have a little peace of extra > information. > > The crash happens in > > void ShaderValueVariable::changed(ConstFieldMaskArg whichField, > UInt32 origin, > BitVector details) > { > MFParentFieldContainerPtr::const_iterator parentsIt = > this->_mfExeParents.begin(); > > MFParentFieldContainerPtr::const_iterator parentsEnd = > this->_mfExeParents.end(); > > MFUInt16::const_iterator idxIt = _mfExeVariableIdx.begin(); > > OSG_ASSERT(_mfExeParents.size() == _mfExeVariableIdx.size()); > > while(parentsIt != parentsEnd) > { > -> (*parentsIt)->changed( > TypeTraits<BitVector>::One << parentsIt.getParentFieldPos(), > ChangedOrigin::Child, > *idxIt); > > ++parentsIt; > ++idxIt; > } > > ... > > because the _mfExeParents does contain garbage. Now I have looked up the > place where this container is filled. This is done in > > void ShaderProgramVariables::merge(ShaderProgramVariables *pVars, > MFInt32 *pVarLoc, > MFInt32 *pProcVarLoc) > { > ... > for(; vIt != vEnd; ++vIt) > { > if(*vIt != NULL) > { > -> (*vIt)->addExeParent(this, > ShaderProgramVariables::VariablesFieldId, > uiPos); > ... > > However, I could not find any call to the corresponding subExeParent > function nor to any other appropriate cleanup method. > > void ShaderValueVariable::addExeParent(FieldContainer * const pParent, > UInt16 > uiParentFieldId, > UInt16 uiVarIdx > ) > { > editMField(ExeParentsFieldMask, _mfExeParents ); > editMField(ExeVariableIdxFieldMask, _mfExeVariableIdx); > > _mfExeParents .push_back(pParent, uiParentFieldId); > _mfExeVariableIdx.push_back(uiVarIdx ); > > } > > void ShaderValueVariable::subExeParent(FieldContainer * const pParent) > { > Int32 iParentIdx = _mfExeParents.findIndex(pParent); > > if(iParentIdx != -1) > { > editMField(ExeParentsFieldMask, _mfExeParents ); > editMField(ExeVariableIdxFieldMask, _mfExeVariableIdx); > > _mfExeParents .erase(iParentIdx); > _mfExeVariableIdx.erase(iParentIdx); > } > } > > Maybe this is of some help. Currently, I'm not in the position to solve > this issue. > > Best, > Johannes > > > > > ------------------------------------------------------------------------------ > Introducing Performance Central, a new site from SourceForge and > AppDynamics. Performance Central is your source for news, insights, > analysis and resources for efficient Application Performance Management. > Visit us today! > http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk > _______________________________________________ > Opensg-users mailing list > Opensg-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/opensg-users -- Gerrit Voß 盖瑞客 --------------------------------------------------- Fraunhofer IDM @ NTU 南洋理工大学, Nanyang Technological University, (NTU) 新加坡, Singapore -------------------------------------------------- If we communicate everything we ever think, speech just becomes static. And all of us become bores. J. Clarkson ------------------------------------------------------------------------------ Introducing Performance Central, a new site from SourceForge and AppDynamics. Performance Central is your source for news, insights, analysis and resources for efficient Application Performance Management. Visit us today! http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk _______________________________________________ Opensg-users mailing list Opensg-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensg-users