00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #define OSG_COMPILEPROGRAMCHUNKINST
00055
00056 #include <stdlib.h>
00057 #include <stdio.h>
00058
00059 #include <OSGConfig.h>
00060
00061 #include "OSGProgramChunkBase.h"
00062 #include "OSGProgramChunk.h"
00063
00064
00065 OSG_USING_NAMESPACE
00066
00067 const OSG::BitVector ProgramChunkBase::ProgramFieldMask =
00068 (TypeTraits<BitVector>::One << ProgramChunkBase::ProgramFieldId);
00069
00070 const OSG::BitVector ProgramChunkBase::ParamValuesFieldMask =
00071 (TypeTraits<BitVector>::One << ProgramChunkBase::ParamValuesFieldId);
00072
00073 const OSG::BitVector ProgramChunkBase::ParamNamesFieldMask =
00074 (TypeTraits<BitVector>::One << ProgramChunkBase::ParamNamesFieldId);
00075
00076 const OSG::BitVector ProgramChunkBase::GLIdFieldMask =
00077 (TypeTraits<BitVector>::One << ProgramChunkBase::GLIdFieldId);
00078
00079 const OSG::BitVector ProgramChunkBase::MTInfluenceMask =
00080 (Inherited::MTInfluenceMask) |
00081 (static_cast<BitVector>(0x0) << Inherited::NextFieldId);
00082
00083
00084
00085
00099
00100
00101 FieldDescription *ProgramChunkBase::_desc[] =
00102 {
00103 new FieldDescription(SFString::getClassType(),
00104 "program",
00105 ProgramFieldId, ProgramFieldMask,
00106 false,
00107 (FieldAccessMethod) &ProgramChunkBase::getSFProgram),
00108 new FieldDescription(MFVec4f::getClassType(),
00109 "paramValues",
00110 ParamValuesFieldId, ParamValuesFieldMask,
00111 false,
00112 (FieldAccessMethod) &ProgramChunkBase::getMFParamValues),
00113 new FieldDescription(MFString::getClassType(),
00114 "paramNames",
00115 ParamNamesFieldId, ParamNamesFieldMask,
00116 false,
00117 (FieldAccessMethod) &ProgramChunkBase::getMFParamNames),
00118 new FieldDescription(SFUInt32::getClassType(),
00119 "GLId",
00120 GLIdFieldId, GLIdFieldMask,
00121 true,
00122 (FieldAccessMethod) &ProgramChunkBase::getSFGLId)
00123 };
00124
00125
00126 FieldContainerType ProgramChunkBase::_type(
00127 "ProgramChunk",
00128 "StateChunk",
00129 NULL,
00130 NULL,
00131 ProgramChunk::initMethod,
00132 _desc,
00133 sizeof(_desc));
00134
00135
00136
00137
00138
00139 FieldContainerType &ProgramChunkBase::getType(void)
00140 {
00141 return _type;
00142 }
00143
00144 const FieldContainerType &ProgramChunkBase::getType(void) const
00145 {
00146 return _type;
00147 }
00148
00149
00150 UInt32 ProgramChunkBase::getContainerSize(void) const
00151 {
00152 return sizeof(ProgramChunk);
00153 }
00154
00155
00156 #if !defined(OSG_FIXED_MFIELDSYNC)
00157 void ProgramChunkBase::executeSync( FieldContainer &other,
00158 const BitVector &whichField)
00159 {
00160 this->executeSyncImpl((ProgramChunkBase *) &other, whichField);
00161 }
00162 #else
00163 void ProgramChunkBase::executeSync( FieldContainer &other,
00164 const BitVector &whichField, const SyncInfo &sInfo )
00165 {
00166 this->executeSyncImpl((ProgramChunkBase *) &other, whichField, sInfo);
00167 }
00168 void ProgramChunkBase::execBeginEdit(const BitVector &whichField,
00169 UInt32 uiAspect,
00170 UInt32 uiContainerSize)
00171 {
00172 this->execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00173 }
00174
00175 void ProgramChunkBase::onDestroyAspect(UInt32 uiId, UInt32 uiAspect)
00176 {
00177 Inherited::onDestroyAspect(uiId, uiAspect);
00178
00179 _mfParamValues.terminateShare(uiAspect, this->getContainerSize());
00180 _mfParamNames.terminateShare(uiAspect, this->getContainerSize());
00181 }
00182 #endif
00183
00184
00185
00186 #ifdef OSG_WIN32_ICL
00187 #pragma warning (disable : 383)
00188 #endif
00189
00190 ProgramChunkBase::ProgramChunkBase(void) :
00191 _sfProgram (),
00192 _mfParamValues (),
00193 _mfParamNames (),
00194 _sfGLId (UInt32(0)),
00195 Inherited()
00196 {
00197 }
00198
00199 #ifdef OSG_WIN32_ICL
00200 #pragma warning (default : 383)
00201 #endif
00202
00203 ProgramChunkBase::ProgramChunkBase(const ProgramChunkBase &source) :
00204 _sfProgram (source._sfProgram ),
00205 _mfParamValues (source._mfParamValues ),
00206 _mfParamNames (source._mfParamNames ),
00207 _sfGLId (source._sfGLId ),
00208 Inherited (source)
00209 {
00210 }
00211
00212
00213
00214 ProgramChunkBase::~ProgramChunkBase(void)
00215 {
00216 }
00217
00218
00219
00220 UInt32 ProgramChunkBase::getBinSize(const BitVector &whichField)
00221 {
00222 UInt32 returnValue = Inherited::getBinSize(whichField);
00223
00224 if(FieldBits::NoField != (ProgramFieldMask & whichField))
00225 {
00226 returnValue += _sfProgram.getBinSize();
00227 }
00228
00229 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00230 {
00231 returnValue += _mfParamValues.getBinSize();
00232 }
00233
00234 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00235 {
00236 returnValue += _mfParamNames.getBinSize();
00237 }
00238
00239 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00240 {
00241 returnValue += _sfGLId.getBinSize();
00242 }
00243
00244
00245 return returnValue;
00246 }
00247
00248 void ProgramChunkBase::copyToBin( BinaryDataHandler &pMem,
00249 const BitVector &whichField)
00250 {
00251 Inherited::copyToBin(pMem, whichField);
00252
00253 if(FieldBits::NoField != (ProgramFieldMask & whichField))
00254 {
00255 _sfProgram.copyToBin(pMem);
00256 }
00257
00258 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00259 {
00260 _mfParamValues.copyToBin(pMem);
00261 }
00262
00263 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00264 {
00265 _mfParamNames.copyToBin(pMem);
00266 }
00267
00268 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00269 {
00270 _sfGLId.copyToBin(pMem);
00271 }
00272
00273
00274 }
00275
00276 void ProgramChunkBase::copyFromBin( BinaryDataHandler &pMem,
00277 const BitVector &whichField)
00278 {
00279 Inherited::copyFromBin(pMem, whichField);
00280
00281 if(FieldBits::NoField != (ProgramFieldMask & whichField))
00282 {
00283 _sfProgram.copyFromBin(pMem);
00284 }
00285
00286 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00287 {
00288 _mfParamValues.copyFromBin(pMem);
00289 }
00290
00291 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00292 {
00293 _mfParamNames.copyFromBin(pMem);
00294 }
00295
00296 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00297 {
00298 _sfGLId.copyFromBin(pMem);
00299 }
00300
00301
00302 }
00303
00304 #if !defined(OSG_FIXED_MFIELDSYNC)
00305 void ProgramChunkBase::executeSyncImpl( ProgramChunkBase *pOther,
00306 const BitVector &whichField)
00307 {
00308
00309 Inherited::executeSyncImpl(pOther, whichField);
00310
00311 if(FieldBits::NoField != (ProgramFieldMask & whichField))
00312 _sfProgram.syncWith(pOther->_sfProgram);
00313
00314 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00315 _mfParamValues.syncWith(pOther->_mfParamValues);
00316
00317 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00318 _mfParamNames.syncWith(pOther->_mfParamNames);
00319
00320 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00321 _sfGLId.syncWith(pOther->_sfGLId);
00322
00323
00324 }
00325 #else
00326 void ProgramChunkBase::executeSyncImpl( ProgramChunkBase *pOther,
00327 const BitVector &whichField,
00328 const SyncInfo &sInfo )
00329 {
00330
00331 Inherited::executeSyncImpl(pOther, whichField, sInfo);
00332
00333 if(FieldBits::NoField != (ProgramFieldMask & whichField))
00334 _sfProgram.syncWith(pOther->_sfProgram);
00335
00336 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00337 _sfGLId.syncWith(pOther->_sfGLId);
00338
00339
00340 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00341 _mfParamValues.syncWith(pOther->_mfParamValues, sInfo);
00342
00343 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00344 _mfParamNames.syncWith(pOther->_mfParamNames, sInfo);
00345
00346
00347 }
00348
00349 void ProgramChunkBase::execBeginEditImpl (const BitVector &whichField,
00350 UInt32 uiAspect,
00351 UInt32 uiContainerSize)
00352 {
00353 Inherited::execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00354
00355 if(FieldBits::NoField != (ParamValuesFieldMask & whichField))
00356 _mfParamValues.beginEdit(uiAspect, uiContainerSize);
00357
00358 if(FieldBits::NoField != (ParamNamesFieldMask & whichField))
00359 _mfParamNames.beginEdit(uiAspect, uiContainerSize);
00360
00361 }
00362 #endif
00363
00364
00365
00366 #include <OSGSFieldTypeDef.inl>
00367 #include <OSGMFieldTypeDef.inl>
00368
00369 OSG_BEGIN_NAMESPACE
00370
00371 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
00372 DataType FieldDataTraits<ProgramChunkPtr>::_type("ProgramChunkPtr", "StateChunkPtr");
00373 #endif
00374
00375 OSG_DLLEXPORT_SFIELD_DEF1(ProgramChunkPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
00376 OSG_DLLEXPORT_MFIELD_DEF1(ProgramChunkPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
00377
00378 OSG_END_NAMESPACE
00379
00380
00381
00382
00383
00384 #ifdef OSG_SGI_CC
00385 #pragma set woff 1174
00386 #endif
00387
00388 #ifdef OSG_LINUX_ICC
00389 #pragma warning( disable : 177 )
00390 #endif
00391
00392 namespace
00393 {
00394 static Char8 cvsid_cpp [] = "@(#)$Id: FCBaseTemplate_cpp.h,v 1.45 2005/07/20 00:10:14 vossg Exp $";
00395 static Char8 cvsid_hpp [] = OSGPROGRAMCHUNKBASE_HEADER_CVSID;
00396 static Char8 cvsid_inl [] = OSGPROGRAMCHUNKBASE_INLINE_CVSID;
00397
00398 static Char8 cvsid_fields_hpp[] = OSGPROGRAMCHUNKFIELDS_HEADER_CVSID;
00399 }
00400