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