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_COMPILEPARTICLESINST
00055
00056 #include <stdlib.h>
00057 #include <stdio.h>
00058
00059 #include <OSGConfig.h>
00060
00061 #include "OSGParticlesBase.h"
00062 #include "OSGParticles.h"
00063
00064
00065 OSG_USING_NAMESPACE
00066
00067 const OSG::BitVector ParticlesBase::ModeFieldMask =
00068 (TypeTraits<BitVector>::One << ParticlesBase::ModeFieldId);
00069
00070 const OSG::BitVector ParticlesBase::PositionsFieldMask =
00071 (TypeTraits<BitVector>::One << ParticlesBase::PositionsFieldId);
00072
00073 const OSG::BitVector ParticlesBase::SizesFieldMask =
00074 (TypeTraits<BitVector>::One << ParticlesBase::SizesFieldId);
00075
00076 const OSG::BitVector ParticlesBase::SecPositionsFieldMask =
00077 (TypeTraits<BitVector>::One << ParticlesBase::SecPositionsFieldId);
00078
00079 const OSG::BitVector ParticlesBase::ColorsFieldMask =
00080 (TypeTraits<BitVector>::One << ParticlesBase::ColorsFieldId);
00081
00082 const OSG::BitVector ParticlesBase::NormalsFieldMask =
00083 (TypeTraits<BitVector>::One << ParticlesBase::NormalsFieldId);
00084
00085 const OSG::BitVector ParticlesBase::IndicesFieldMask =
00086 (TypeTraits<BitVector>::One << ParticlesBase::IndicesFieldId);
00087
00088 const OSG::BitVector ParticlesBase::TextureZsFieldMask =
00089 (TypeTraits<BitVector>::One << ParticlesBase::TextureZsFieldId);
00090
00091 const OSG::BitVector ParticlesBase::DrawOrderFieldMask =
00092 (TypeTraits<BitVector>::One << ParticlesBase::DrawOrderFieldId);
00093
00094 const OSG::BitVector ParticlesBase::DynamicFieldMask =
00095 (TypeTraits<BitVector>::One << ParticlesBase::DynamicFieldId);
00096
00097 const OSG::BitVector ParticlesBase::PumpFieldMask =
00098 (TypeTraits<BitVector>::One << ParticlesBase::PumpFieldId);
00099
00100 const OSG::BitVector ParticlesBase::BspFieldMask =
00101 (TypeTraits<BitVector>::One << ParticlesBase::BspFieldId);
00102
00103 const OSG::BitVector ParticlesBase::MTInfluenceMask =
00104 (Inherited::MTInfluenceMask) |
00105 (static_cast<BitVector>(0x0) << Inherited::NextFieldId);
00106
00107
00108
00109
00147
00148
00149 FieldDescription *ParticlesBase::_desc[] =
00150 {
00151 new FieldDescription(SFUInt32::getClassType(),
00152 "mode",
00153 ModeFieldId, ModeFieldMask,
00154 false,
00155 (FieldAccessMethod) &ParticlesBase::getSFMode),
00156 new FieldDescription(SFGeoPositionsPtr::getClassType(),
00157 "positions",
00158 PositionsFieldId, PositionsFieldMask,
00159 false,
00160 (FieldAccessMethod) &ParticlesBase::getSFPositions),
00161 new FieldDescription(MFVec3f::getClassType(),
00162 "sizes",
00163 SizesFieldId, SizesFieldMask,
00164 false,
00165 (FieldAccessMethod) &ParticlesBase::getMFSizes),
00166 new FieldDescription(SFGeoPositionsPtr::getClassType(),
00167 "secPositions",
00168 SecPositionsFieldId, SecPositionsFieldMask,
00169 false,
00170 (FieldAccessMethod) &ParticlesBase::getSFSecPositions),
00171 new FieldDescription(SFGeoColorsPtr::getClassType(),
00172 "colors",
00173 ColorsFieldId, ColorsFieldMask,
00174 false,
00175 (FieldAccessMethod) &ParticlesBase::getSFColors),
00176 new FieldDescription(SFGeoNormalsPtr::getClassType(),
00177 "normals",
00178 NormalsFieldId, NormalsFieldMask,
00179 false,
00180 (FieldAccessMethod) &ParticlesBase::getSFNormals),
00181 new FieldDescription(MFInt32::getClassType(),
00182 "indices",
00183 IndicesFieldId, IndicesFieldMask,
00184 false,
00185 (FieldAccessMethod) &ParticlesBase::getMFIndices),
00186 new FieldDescription(MFReal32::getClassType(),
00187 "textureZs",
00188 TextureZsFieldId, TextureZsFieldMask,
00189 false,
00190 (FieldAccessMethod) &ParticlesBase::getMFTextureZs),
00191 new FieldDescription(SFUInt32::getClassType(),
00192 "drawOrder",
00193 DrawOrderFieldId, DrawOrderFieldMask,
00194 false,
00195 (FieldAccessMethod) &ParticlesBase::getSFDrawOrder),
00196 new FieldDescription(SFBool::getClassType(),
00197 "dynamic",
00198 DynamicFieldId, DynamicFieldMask,
00199 false,
00200 (FieldAccessMethod) &ParticlesBase::getSFDynamic),
00201 new FieldDescription(SFUInt32::getClassType(),
00202 "pump",
00203 PumpFieldId, PumpFieldMask,
00204 true,
00205 (FieldAccessMethod) &ParticlesBase::getSFPump),
00206 new FieldDescription(SFParticleBSPTree::getClassType(),
00207 "bsp",
00208 BspFieldId, BspFieldMask,
00209 false,
00210 (FieldAccessMethod) &ParticlesBase::getSFBsp)
00211 };
00212
00213
00214 FieldContainerType ParticlesBase::_type(
00215 "Particles",
00216 "MaterialDrawable",
00217 NULL,
00218 (PrototypeCreateF) &ParticlesBase::createEmpty,
00219 Particles::initMethod,
00220 _desc,
00221 sizeof(_desc));
00222
00223
00224
00225
00226
00227 FieldContainerType &ParticlesBase::getType(void)
00228 {
00229 return _type;
00230 }
00231
00232 const FieldContainerType &ParticlesBase::getType(void) const
00233 {
00234 return _type;
00235 }
00236
00237
00238 FieldContainerPtr ParticlesBase::shallowCopy(void) const
00239 {
00240 ParticlesPtr returnValue;
00241
00242 newPtr(returnValue, dynamic_cast<const Particles *>(this));
00243
00244 return returnValue;
00245 }
00246
00247 UInt32 ParticlesBase::getContainerSize(void) const
00248 {
00249 return sizeof(Particles);
00250 }
00251
00252
00253 #if !defined(OSG_FIXED_MFIELDSYNC)
00254 void ParticlesBase::executeSync( FieldContainer &other,
00255 const BitVector &whichField)
00256 {
00257 this->executeSyncImpl((ParticlesBase *) &other, whichField);
00258 }
00259 #else
00260 void ParticlesBase::executeSync( FieldContainer &other,
00261 const BitVector &whichField, const SyncInfo &sInfo )
00262 {
00263 this->executeSyncImpl((ParticlesBase *) &other, whichField, sInfo);
00264 }
00265 void ParticlesBase::execBeginEdit(const BitVector &whichField,
00266 UInt32 uiAspect,
00267 UInt32 uiContainerSize)
00268 {
00269 this->execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00270 }
00271
00272 void ParticlesBase::onDestroyAspect(UInt32 uiId, UInt32 uiAspect)
00273 {
00274 Inherited::onDestroyAspect(uiId, uiAspect);
00275
00276 _mfSizes.terminateShare(uiAspect, this->getContainerSize());
00277 _mfIndices.terminateShare(uiAspect, this->getContainerSize());
00278 _mfTextureZs.terminateShare(uiAspect, this->getContainerSize());
00279 }
00280 #endif
00281
00282
00283
00284 #ifdef OSG_WIN32_ICL
00285 #pragma warning (disable : 383)
00286 #endif
00287
00288 ParticlesBase::ParticlesBase(void) :
00289 _sfMode (UInt32(2)),
00290 _sfPositions (),
00291 _mfSizes (),
00292 _sfSecPositions (),
00293 _sfColors (),
00294 _sfNormals (),
00295 _mfIndices (),
00296 _mfTextureZs (),
00297 _sfDrawOrder (UInt32(0)),
00298 _sfDynamic (bool(true)),
00299 _sfPump (),
00300 _sfBsp (),
00301 Inherited()
00302 {
00303 }
00304
00305 #ifdef OSG_WIN32_ICL
00306 #pragma warning (default : 383)
00307 #endif
00308
00309 ParticlesBase::ParticlesBase(const ParticlesBase &source) :
00310 _sfMode (source._sfMode ),
00311 _sfPositions (source._sfPositions ),
00312 _mfSizes (source._mfSizes ),
00313 _sfSecPositions (source._sfSecPositions ),
00314 _sfColors (source._sfColors ),
00315 _sfNormals (source._sfNormals ),
00316 _mfIndices (source._mfIndices ),
00317 _mfTextureZs (source._mfTextureZs ),
00318 _sfDrawOrder (source._sfDrawOrder ),
00319 _sfDynamic (source._sfDynamic ),
00320 _sfPump (source._sfPump ),
00321 _sfBsp (source._sfBsp ),
00322 Inherited (source)
00323 {
00324 }
00325
00326
00327
00328 ParticlesBase::~ParticlesBase(void)
00329 {
00330 }
00331
00332
00333
00334 UInt32 ParticlesBase::getBinSize(const BitVector &whichField)
00335 {
00336 UInt32 returnValue = Inherited::getBinSize(whichField);
00337
00338 if(FieldBits::NoField != (ModeFieldMask & whichField))
00339 {
00340 returnValue += _sfMode.getBinSize();
00341 }
00342
00343 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00344 {
00345 returnValue += _sfPositions.getBinSize();
00346 }
00347
00348 if(FieldBits::NoField != (SizesFieldMask & whichField))
00349 {
00350 returnValue += _mfSizes.getBinSize();
00351 }
00352
00353 if(FieldBits::NoField != (SecPositionsFieldMask & whichField))
00354 {
00355 returnValue += _sfSecPositions.getBinSize();
00356 }
00357
00358 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00359 {
00360 returnValue += _sfColors.getBinSize();
00361 }
00362
00363 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00364 {
00365 returnValue += _sfNormals.getBinSize();
00366 }
00367
00368 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00369 {
00370 returnValue += _mfIndices.getBinSize();
00371 }
00372
00373 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00374 {
00375 returnValue += _mfTextureZs.getBinSize();
00376 }
00377
00378 if(FieldBits::NoField != (DrawOrderFieldMask & whichField))
00379 {
00380 returnValue += _sfDrawOrder.getBinSize();
00381 }
00382
00383 if(FieldBits::NoField != (DynamicFieldMask & whichField))
00384 {
00385 returnValue += _sfDynamic.getBinSize();
00386 }
00387
00388 if(FieldBits::NoField != (PumpFieldMask & whichField))
00389 {
00390 returnValue += _sfPump.getBinSize();
00391 }
00392
00393 if(FieldBits::NoField != (BspFieldMask & whichField))
00394 {
00395 returnValue += _sfBsp.getBinSize();
00396 }
00397
00398
00399 return returnValue;
00400 }
00401
00402 void ParticlesBase::copyToBin( BinaryDataHandler &pMem,
00403 const BitVector &whichField)
00404 {
00405 Inherited::copyToBin(pMem, whichField);
00406
00407 if(FieldBits::NoField != (ModeFieldMask & whichField))
00408 {
00409 _sfMode.copyToBin(pMem);
00410 }
00411
00412 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00413 {
00414 _sfPositions.copyToBin(pMem);
00415 }
00416
00417 if(FieldBits::NoField != (SizesFieldMask & whichField))
00418 {
00419 _mfSizes.copyToBin(pMem);
00420 }
00421
00422 if(FieldBits::NoField != (SecPositionsFieldMask & whichField))
00423 {
00424 _sfSecPositions.copyToBin(pMem);
00425 }
00426
00427 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00428 {
00429 _sfColors.copyToBin(pMem);
00430 }
00431
00432 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00433 {
00434 _sfNormals.copyToBin(pMem);
00435 }
00436
00437 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00438 {
00439 _mfIndices.copyToBin(pMem);
00440 }
00441
00442 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00443 {
00444 _mfTextureZs.copyToBin(pMem);
00445 }
00446
00447 if(FieldBits::NoField != (DrawOrderFieldMask & whichField))
00448 {
00449 _sfDrawOrder.copyToBin(pMem);
00450 }
00451
00452 if(FieldBits::NoField != (DynamicFieldMask & whichField))
00453 {
00454 _sfDynamic.copyToBin(pMem);
00455 }
00456
00457 if(FieldBits::NoField != (PumpFieldMask & whichField))
00458 {
00459 _sfPump.copyToBin(pMem);
00460 }
00461
00462 if(FieldBits::NoField != (BspFieldMask & whichField))
00463 {
00464 _sfBsp.copyToBin(pMem);
00465 }
00466
00467
00468 }
00469
00470 void ParticlesBase::copyFromBin( BinaryDataHandler &pMem,
00471 const BitVector &whichField)
00472 {
00473 Inherited::copyFromBin(pMem, whichField);
00474
00475 if(FieldBits::NoField != (ModeFieldMask & whichField))
00476 {
00477 _sfMode.copyFromBin(pMem);
00478 }
00479
00480 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00481 {
00482 _sfPositions.copyFromBin(pMem);
00483 }
00484
00485 if(FieldBits::NoField != (SizesFieldMask & whichField))
00486 {
00487 _mfSizes.copyFromBin(pMem);
00488 }
00489
00490 if(FieldBits::NoField != (SecPositionsFieldMask & whichField))
00491 {
00492 _sfSecPositions.copyFromBin(pMem);
00493 }
00494
00495 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00496 {
00497 _sfColors.copyFromBin(pMem);
00498 }
00499
00500 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00501 {
00502 _sfNormals.copyFromBin(pMem);
00503 }
00504
00505 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00506 {
00507 _mfIndices.copyFromBin(pMem);
00508 }
00509
00510 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00511 {
00512 _mfTextureZs.copyFromBin(pMem);
00513 }
00514
00515 if(FieldBits::NoField != (DrawOrderFieldMask & whichField))
00516 {
00517 _sfDrawOrder.copyFromBin(pMem);
00518 }
00519
00520 if(FieldBits::NoField != (DynamicFieldMask & whichField))
00521 {
00522 _sfDynamic.copyFromBin(pMem);
00523 }
00524
00525 if(FieldBits::NoField != (PumpFieldMask & whichField))
00526 {
00527 _sfPump.copyFromBin(pMem);
00528 }
00529
00530 if(FieldBits::NoField != (BspFieldMask & whichField))
00531 {
00532 _sfBsp.copyFromBin(pMem);
00533 }
00534
00535
00536 }
00537
00538 #if !defined(OSG_FIXED_MFIELDSYNC)
00539 void ParticlesBase::executeSyncImpl( ParticlesBase *pOther,
00540 const BitVector &whichField)
00541 {
00542
00543 Inherited::executeSyncImpl(pOther, whichField);
00544
00545 if(FieldBits::NoField != (ModeFieldMask & whichField))
00546 _sfMode.syncWith(pOther->_sfMode);
00547
00548 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00549 _sfPositions.syncWith(pOther->_sfPositions);
00550
00551 if(FieldBits::NoField != (SizesFieldMask & whichField))
00552 _mfSizes.syncWith(pOther->_mfSizes);
00553
00554 if(FieldBits::NoField != (SecPositionsFieldMask & whichField))
00555 _sfSecPositions.syncWith(pOther->_sfSecPositions);
00556
00557 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00558 _sfColors.syncWith(pOther->_sfColors);
00559
00560 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00561 _sfNormals.syncWith(pOther->_sfNormals);
00562
00563 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00564 _mfIndices.syncWith(pOther->_mfIndices);
00565
00566 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00567 _mfTextureZs.syncWith(pOther->_mfTextureZs);
00568
00569 if(FieldBits::NoField != (DrawOrderFieldMask & whichField))
00570 _sfDrawOrder.syncWith(pOther->_sfDrawOrder);
00571
00572 if(FieldBits::NoField != (DynamicFieldMask & whichField))
00573 _sfDynamic.syncWith(pOther->_sfDynamic);
00574
00575 if(FieldBits::NoField != (PumpFieldMask & whichField))
00576 _sfPump.syncWith(pOther->_sfPump);
00577
00578 if(FieldBits::NoField != (BspFieldMask & whichField))
00579 _sfBsp.syncWith(pOther->_sfBsp);
00580
00581
00582 }
00583 #else
00584 void ParticlesBase::executeSyncImpl( ParticlesBase *pOther,
00585 const BitVector &whichField,
00586 const SyncInfo &sInfo )
00587 {
00588
00589 Inherited::executeSyncImpl(pOther, whichField, sInfo);
00590
00591 if(FieldBits::NoField != (ModeFieldMask & whichField))
00592 _sfMode.syncWith(pOther->_sfMode);
00593
00594 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00595 _sfPositions.syncWith(pOther->_sfPositions);
00596
00597 if(FieldBits::NoField != (SecPositionsFieldMask & whichField))
00598 _sfSecPositions.syncWith(pOther->_sfSecPositions);
00599
00600 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00601 _sfColors.syncWith(pOther->_sfColors);
00602
00603 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00604 _sfNormals.syncWith(pOther->_sfNormals);
00605
00606 if(FieldBits::NoField != (DrawOrderFieldMask & whichField))
00607 _sfDrawOrder.syncWith(pOther->_sfDrawOrder);
00608
00609 if(FieldBits::NoField != (DynamicFieldMask & whichField))
00610 _sfDynamic.syncWith(pOther->_sfDynamic);
00611
00612 if(FieldBits::NoField != (PumpFieldMask & whichField))
00613 _sfPump.syncWith(pOther->_sfPump);
00614
00615 if(FieldBits::NoField != (BspFieldMask & whichField))
00616 _sfBsp.syncWith(pOther->_sfBsp);
00617
00618
00619 if(FieldBits::NoField != (SizesFieldMask & whichField))
00620 _mfSizes.syncWith(pOther->_mfSizes, sInfo);
00621
00622 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00623 _mfIndices.syncWith(pOther->_mfIndices, sInfo);
00624
00625 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00626 _mfTextureZs.syncWith(pOther->_mfTextureZs, sInfo);
00627
00628
00629 }
00630
00631 void ParticlesBase::execBeginEditImpl (const BitVector &whichField,
00632 UInt32 uiAspect,
00633 UInt32 uiContainerSize)
00634 {
00635 Inherited::execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00636
00637 if(FieldBits::NoField != (SizesFieldMask & whichField))
00638 _mfSizes.beginEdit(uiAspect, uiContainerSize);
00639
00640 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00641 _mfIndices.beginEdit(uiAspect, uiContainerSize);
00642
00643 if(FieldBits::NoField != (TextureZsFieldMask & whichField))
00644 _mfTextureZs.beginEdit(uiAspect, uiContainerSize);
00645
00646 }
00647 #endif
00648
00649
00650
00651 #include <OSGSFieldTypeDef.inl>
00652 #include <OSGMFieldTypeDef.inl>
00653
00654 OSG_BEGIN_NAMESPACE
00655
00656 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
00657 DataType FieldDataTraits<ParticlesPtr>::_type("ParticlesPtr", "MaterialDrawablePtr");
00658 #endif
00659
00660 OSG_DLLEXPORT_SFIELD_DEF1(ParticlesPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
00661 OSG_DLLEXPORT_MFIELD_DEF1(ParticlesPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
00662
00663 OSG_END_NAMESPACE
00664
00665
00666
00667
00668
00669 #ifdef OSG_SGI_CC
00670 #pragma set woff 1174
00671 #endif
00672
00673 #ifdef OSG_LINUX_ICC
00674 #pragma warning( disable : 177 )
00675 #endif
00676
00677 namespace
00678 {
00679 static Char8 cvsid_cpp [] = "@(#)$Id: FCBaseTemplate_cpp.h,v 1.42 2004/08/03 05:53:03 dirk Exp $";
00680 static Char8 cvsid_hpp [] = OSGPARTICLESBASE_HEADER_CVSID;
00681 static Char8 cvsid_inl [] = OSGPARTICLESBASE_INLINE_CVSID;
00682
00683 static Char8 cvsid_fields_hpp[] = OSGPARTICLESFIELDS_HEADER_CVSID;
00684 }
00685