1 /*---------------------------------------------------------------------------*\
5 * Copyright (C) 2000-2002 by the OpenSG Forum *
9 * contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de *
11 \*---------------------------------------------------------------------------*/
12 /*---------------------------------------------------------------------------*\
15 * This library is free software; you can redistribute it and/or modify it *
16 * under the terms of the GNU Library General Public License as published *
17 * by the Free Software Foundation, version 2. *
19 * This library is distributed in the hope that it will be useful, but *
20 * WITHOUT ANY WARRANTY; without even the implied warranty of *
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
22 * Library General Public License for more details. *
24 * You should have received a copy of the GNU Library General Public *
25 * License along with this library; if not, write to the Free Software *
26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
28 \*---------------------------------------------------------------------------*/
29 /*---------------------------------------------------------------------------*\
37 \*---------------------------------------------------------------------------*/
39 //---------------------------------------------------------------------------
41 //---------------------------------------------------------------------------
46 #include "OSGConfig.h"
48 #include "OSGShaderValueVariable.h"
49 #include "OSGDrawEnv.h"
53 // Documentation for this class is emited in the
54 // OSGShaderValueVariableBase.cpp file.
55 // To modify it, please change the .fcd file (OSGShaderValueVariable.fcd) and
56 // regenerate the base file.
58 /***************************************************************************\
60 \***************************************************************************/
62 /***************************************************************************\
64 \***************************************************************************/
66 void ShaderValueVariable::initMethod(InitPhase ePhase
)
68 Inherited::initMethod(ePhase
);
72 /***************************************************************************\
74 \***************************************************************************/
76 /*-------------------------------------------------------------------------*\
78 \*-------------------------------------------------------------------------*/
80 /*----------------------- constructors & destructors ----------------------*/
82 ShaderValueVariable::ShaderValueVariable(void) :
87 ShaderValueVariable::ShaderValueVariable(const ShaderValueVariable
&source
) :
92 ShaderValueVariable::~ShaderValueVariable(void)
96 /*----------------------------- class specific ----------------------------*/
98 void ShaderValueVariable::changed(ConstFieldMaskArg whichField
,
102 MFParentFieldContainerPtr::const_iterator parentsIt
=
103 this->_mfExeParents
.begin();
105 MFParentFieldContainerPtr::const_iterator parentsEnd
=
106 this->_mfExeParents
.end();
108 MFUInt16::const_iterator idxIt
= _mfExeVariableIdx
.begin();
110 OSG_ASSERT(_mfExeParents
.size() == _mfExeVariableIdx
.size());
112 while(parentsIt
!= parentsEnd
)
114 (*parentsIt
)->changed(
115 TypeTraits
<BitVector
>::One
<< parentsIt
.getParentFieldPos(),
116 ChangedOrigin::Child
,
125 parentsIt
= this->_mfParents
.begin();
126 parentsEnd
= this->_mfParents
.end();
128 idxIt
= _mfVariableIdx
.begin();
130 OSG_ASSERT(_mfParents
.size() == _mfVariableIdx
.size());
132 while(parentsIt
!= parentsEnd
)
134 (*parentsIt
)->changed(
135 TypeTraits
<BitVector
>::One
<< parentsIt
.getParentFieldPos(),
136 ChangedOrigin::Child
,
144 Inherited::changed(whichField
, origin
, details
);
147 void ShaderValueVariable::dump( UInt32
,
148 const BitVector
) const
150 SLOG
<< "Dump ShaderValueVariable NI" << std::endl
;
153 bool ShaderValueVariable::linkParent(FieldContainer
* const pParent
,
154 UInt16
const childFieldId
,
155 UInt16
const parentFieldId
)
162 bool ShaderValueVariable::unlinkParent(FieldContainer
* const pParent
,
163 UInt16
const parentFieldId
)
170 void ShaderValueVariable::addParent(FieldContainer
* const pParent
,
171 UInt16 uiParentFieldId
,
174 editMField(ParentsFieldMask
, _mfParents
);
175 editMField(VariableIdxFieldMask
, _mfVariableIdx
);
177 _mfParents
.push_back(pParent
, uiParentFieldId
);
178 _mfVariableIdx
.push_back(uiVarIdx
);
182 void ShaderValueVariable::subParent(FieldContainer
* const pParent
)
184 Int32 iParentIdx
= _mfParents
.findIndex(pParent
);
188 editMField(ParentsFieldMask
, _mfParents
);
189 editMField(VariableIdxFieldMask
, _mfVariableIdx
);
191 _mfParents
.erase(iParentIdx
);
192 _mfVariableIdx
.erase(iParentIdx
);
196 void ShaderValueVariable::addExeParent(FieldContainer
* const pParent
,
197 UInt16 uiParentFieldId
,
200 editMField(ExeParentsFieldMask
, _mfExeParents
);
201 editMField(ExeVariableIdxFieldMask
, _mfExeVariableIdx
);
203 _mfExeParents
.push_back(pParent
, uiParentFieldId
);
204 _mfExeVariableIdx
.push_back(uiVarIdx
);
208 void ShaderValueVariable::subExeParent(FieldContainer
* const pParent
)
210 Int32 iParentIdx
= _mfExeParents
.findIndex(pParent
);
214 editMField(ExeParentsFieldMask
, _mfExeParents
);
215 editMField(ExeVariableIdxFieldMask
, _mfExeVariableIdx
);
217 _mfExeParents
.erase(iParentIdx
);
218 _mfExeVariableIdx
.erase(iParentIdx
);