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_COMPILEGEOMETRYINST
00055
00056 #include <stdlib.h>
00057 #include <stdio.h>
00058
00059 #include <OSGConfig.h>
00060
00061 #include "OSGGeometryBase.h"
00062 #include "OSGGeometry.h"
00063
00064
00065 OSG_BEGIN_NAMESPACE
00066
00067 const OSG::BitVector GeometryBase::TypesFieldMask =
00068 (TypeTraits<BitVector>::One << GeometryBase::TypesFieldId);
00069
00070 const OSG::BitVector GeometryBase::LengthsFieldMask =
00071 (TypeTraits<BitVector>::One << GeometryBase::LengthsFieldId);
00072
00073 const OSG::BitVector GeometryBase::PositionsFieldMask =
00074 (TypeTraits<BitVector>::One << GeometryBase::PositionsFieldId);
00075
00076 const OSG::BitVector GeometryBase::NormalsFieldMask =
00077 (TypeTraits<BitVector>::One << GeometryBase::NormalsFieldId);
00078
00079 const OSG::BitVector GeometryBase::ColorsFieldMask =
00080 (TypeTraits<BitVector>::One << GeometryBase::ColorsFieldId);
00081
00082 const OSG::BitVector GeometryBase::SecondaryColorsFieldMask =
00083 (TypeTraits<BitVector>::One << GeometryBase::SecondaryColorsFieldId);
00084
00085 const OSG::BitVector GeometryBase::TexCoordsFieldMask =
00086 (TypeTraits<BitVector>::One << GeometryBase::TexCoordsFieldId);
00087
00088 const OSG::BitVector GeometryBase::TexCoords1FieldMask =
00089 (TypeTraits<BitVector>::One << GeometryBase::TexCoords1FieldId);
00090
00091 const OSG::BitVector GeometryBase::TexCoords2FieldMask =
00092 (TypeTraits<BitVector>::One << GeometryBase::TexCoords2FieldId);
00093
00094 const OSG::BitVector GeometryBase::TexCoords3FieldMask =
00095 (TypeTraits<BitVector>::One << GeometryBase::TexCoords3FieldId);
00096
00097 const OSG::BitVector GeometryBase::TexCoords4FieldMask =
00098 (TypeTraits<BitVector>::One << GeometryBase::TexCoords4FieldId);
00099
00100 const OSG::BitVector GeometryBase::TexCoords5FieldMask =
00101 (TypeTraits<BitVector>::One << GeometryBase::TexCoords5FieldId);
00102
00103 const OSG::BitVector GeometryBase::TexCoords6FieldMask =
00104 (TypeTraits<BitVector>::One << GeometryBase::TexCoords6FieldId);
00105
00106 const OSG::BitVector GeometryBase::TexCoords7FieldMask =
00107 (TypeTraits<BitVector>::One << GeometryBase::TexCoords7FieldId);
00108
00109 const OSG::BitVector GeometryBase::IndicesFieldMask =
00110 (TypeTraits<BitVector>::One << GeometryBase::IndicesFieldId);
00111
00112 const OSG::BitVector GeometryBase::IndexMappingFieldMask =
00113 (TypeTraits<BitVector>::One << GeometryBase::IndexMappingFieldId);
00114
00115 const OSG::BitVector GeometryBase::DlistCacheFieldMask =
00116 (TypeTraits<BitVector>::One << GeometryBase::DlistCacheFieldId);
00117
00118 const OSG::BitVector GeometryBase::GLIdFieldMask =
00119 (TypeTraits<BitVector>::One << GeometryBase::GLIdFieldId);
00120
00121 const OSG::BitVector GeometryBase::IgnoreGLForAspectFieldMask =
00122 (TypeTraits<BitVector>::One << GeometryBase::IgnoreGLForAspectFieldId);
00123
00124 const OSG::BitVector GeometryBase::MinindexFieldMask =
00125 (TypeTraits<BitVector>::One << GeometryBase::MinindexFieldId);
00126
00127 const OSG::BitVector GeometryBase::MaxindexFieldMask =
00128 (TypeTraits<BitVector>::One << GeometryBase::MaxindexFieldId);
00129
00130 const OSG::BitVector GeometryBase::LowindicesFieldMask =
00131 (TypeTraits<BitVector>::One << GeometryBase::LowindicesFieldId);
00132
00133 const OSG::BitVector GeometryBase::HighindicesFieldMask =
00134 (TypeTraits<BitVector>::One << GeometryBase::HighindicesFieldId);
00135
00136 const OSG::BitVector GeometryBase::VboFieldMask =
00137 (TypeTraits<BitVector>::One << GeometryBase::VboFieldId);
00138
00139 const OSG::BitVector GeometryBase::MTInfluenceMask =
00140 (Inherited::MTInfluenceMask) |
00141 (static_cast<BitVector>(0x0) << Inherited::NextFieldId);
00142
00143
00144
00145
00219
00220
00221 FieldDescription *GeometryBase::_desc[] =
00222 {
00223 new FieldDescription(SFGeoPTypesPtr::getClassType(),
00224 "types",
00225 TypesFieldId, TypesFieldMask,
00226 false,
00227 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTypes)),
00228 new FieldDescription(SFGeoPLengthsPtr::getClassType(),
00229 "lengths",
00230 LengthsFieldId, LengthsFieldMask,
00231 false,
00232 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFLengths)),
00233 new FieldDescription(SFGeoPositionsPtr::getClassType(),
00234 "positions",
00235 PositionsFieldId, PositionsFieldMask,
00236 false,
00237 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFPositions)),
00238 new FieldDescription(SFGeoNormalsPtr::getClassType(),
00239 "normals",
00240 NormalsFieldId, NormalsFieldMask,
00241 false,
00242 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFNormals)),
00243 new FieldDescription(SFGeoColorsPtr::getClassType(),
00244 "colors",
00245 ColorsFieldId, ColorsFieldMask,
00246 false,
00247 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFColors)),
00248 new FieldDescription(SFGeoColorsPtr::getClassType(),
00249 "secondaryColors",
00250 SecondaryColorsFieldId, SecondaryColorsFieldMask,
00251 false,
00252 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFSecondaryColors)),
00253 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00254 "texCoords",
00255 TexCoordsFieldId, TexCoordsFieldMask,
00256 false,
00257 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords)),
00258 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00259 "texCoords1",
00260 TexCoords1FieldId, TexCoords1FieldMask,
00261 false,
00262 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords1)),
00263 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00264 "texCoords2",
00265 TexCoords2FieldId, TexCoords2FieldMask,
00266 false,
00267 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords2)),
00268 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00269 "texCoords3",
00270 TexCoords3FieldId, TexCoords3FieldMask,
00271 false,
00272 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords3)),
00273 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00274 "texCoords4",
00275 TexCoords4FieldId, TexCoords4FieldMask,
00276 false,
00277 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords4)),
00278 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00279 "texCoords5",
00280 TexCoords5FieldId, TexCoords5FieldMask,
00281 false,
00282 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords5)),
00283 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00284 "texCoords6",
00285 TexCoords6FieldId, TexCoords6FieldMask,
00286 false,
00287 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords6)),
00288 new FieldDescription(SFGeoTexCoordsPtr::getClassType(),
00289 "texCoords7",
00290 TexCoords7FieldId, TexCoords7FieldMask,
00291 false,
00292 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFTexCoords7)),
00293 new FieldDescription(SFGeoIndicesPtr::getClassType(),
00294 "indices",
00295 IndicesFieldId, IndicesFieldMask,
00296 false,
00297 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFIndices)),
00298 new FieldDescription(MFUInt16::getClassType(),
00299 "indexMapping",
00300 IndexMappingFieldId, IndexMappingFieldMask,
00301 false,
00302 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editMFIndexMapping)),
00303 new FieldDescription(SFBool::getClassType(),
00304 "dlistCache",
00305 DlistCacheFieldId, DlistCacheFieldMask,
00306 false,
00307 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFDlistCache)),
00308 new FieldDescription(SFInt32::getClassType(),
00309 "GLId",
00310 GLIdFieldId, GLIdFieldMask,
00311 true,
00312 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFGLId)),
00313 new FieldDescription(SFInt32::getClassType(),
00314 "IgnoreGLForAspect",
00315 IgnoreGLForAspectFieldId, IgnoreGLForAspectFieldMask,
00316 true,
00317 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFIgnoreGLForAspect)),
00318 new FieldDescription(SFUInt32::getClassType(),
00319 "minindex",
00320 MinindexFieldId, MinindexFieldMask,
00321 true,
00322 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFMinindex)),
00323 new FieldDescription(SFUInt32::getClassType(),
00324 "maxindex",
00325 MaxindexFieldId, MaxindexFieldMask,
00326 true,
00327 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFMaxindex)),
00328 new FieldDescription(MFUInt32::getClassType(),
00329 "lowindices",
00330 LowindicesFieldId, LowindicesFieldMask,
00331 true,
00332 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editMFLowindices)),
00333 new FieldDescription(MFUInt32::getClassType(),
00334 "highindices",
00335 HighindicesFieldId, HighindicesFieldMask,
00336 true,
00337 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editMFHighindices)),
00338 new FieldDescription(SFBool::getClassType(),
00339 "vbo",
00340 VboFieldId, VboFieldMask,
00341 false,
00342 reinterpret_cast<FieldAccessMethod>(&GeometryBase::editSFVbo))
00343 };
00344
00345
00346 FieldContainerType GeometryBase::_type(
00347 "Geometry",
00348 "MaterialDrawable",
00349 NULL,
00350 reinterpret_cast<PrototypeCreateF>(&GeometryBase::createEmpty),
00351 Geometry::initMethod,
00352 _desc,
00353 sizeof(_desc));
00354
00355
00356
00357
00358
00359 FieldContainerType &GeometryBase::getType(void)
00360 {
00361 return _type;
00362 }
00363
00364 const FieldContainerType &GeometryBase::getType(void) const
00365 {
00366 return _type;
00367 }
00368
00369
00370 FieldContainerPtr GeometryBase::shallowCopy(void) const
00371 {
00372 GeometryPtr returnValue;
00373
00374 newPtr(returnValue, dynamic_cast<const Geometry *>(this));
00375
00376 return returnValue;
00377 }
00378
00379 UInt32 GeometryBase::getContainerSize(void) const
00380 {
00381 return sizeof(Geometry);
00382 }
00383
00384
00385 #if !defined(OSG_FIXED_MFIELDSYNC)
00386 void GeometryBase::executeSync( FieldContainer &other,
00387 const BitVector &whichField)
00388 {
00389 this->executeSyncImpl(static_cast<GeometryBase *>(&other),
00390 whichField);
00391 }
00392 #else
00393 void GeometryBase::executeSync( FieldContainer &other,
00394 const BitVector &whichField, const SyncInfo &sInfo )
00395 {
00396 this->executeSyncImpl((GeometryBase *) &other, whichField, sInfo);
00397 }
00398 void GeometryBase::execBeginEdit(const BitVector &whichField,
00399 UInt32 uiAspect,
00400 UInt32 uiContainerSize)
00401 {
00402 this->execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00403 }
00404
00405 void GeometryBase::onDestroyAspect(UInt32 uiId, UInt32 uiAspect)
00406 {
00407 Inherited::onDestroyAspect(uiId, uiAspect);
00408
00409 _mfIndexMapping.terminateShare(uiAspect, this->getContainerSize());
00410 _mfLowindices.terminateShare(uiAspect, this->getContainerSize());
00411 _mfHighindices.terminateShare(uiAspect, this->getContainerSize());
00412 }
00413 #endif
00414
00415
00416
00417 #ifdef OSG_WIN32_ICL
00418 #pragma warning (disable : 383)
00419 #endif
00420
00421 GeometryBase::GeometryBase(void) :
00422 _sfTypes (),
00423 _sfLengths (),
00424 _sfPositions (),
00425 _sfNormals (),
00426 _sfColors (),
00427 _sfSecondaryColors (),
00428 _sfTexCoords (),
00429 _sfTexCoords1 (),
00430 _sfTexCoords2 (),
00431 _sfTexCoords3 (),
00432 _sfTexCoords4 (),
00433 _sfTexCoords5 (),
00434 _sfTexCoords6 (),
00435 _sfTexCoords7 (),
00436 _sfIndices (),
00437 _mfIndexMapping (),
00438 _sfDlistCache (bool(true)),
00439 _sfGLId (Int32(0)),
00440 _sfIgnoreGLForAspect (Int32(-1)),
00441 _sfMinindex (),
00442 _sfMaxindex (),
00443 _mfLowindices (),
00444 _mfHighindices (),
00445 _sfVbo (bool(false)),
00446 Inherited()
00447 {
00448 }
00449
00450 #ifdef OSG_WIN32_ICL
00451 #pragma warning (default : 383)
00452 #endif
00453
00454 GeometryBase::GeometryBase(const GeometryBase &source) :
00455 _sfTypes (source._sfTypes ),
00456 _sfLengths (source._sfLengths ),
00457 _sfPositions (source._sfPositions ),
00458 _sfNormals (source._sfNormals ),
00459 _sfColors (source._sfColors ),
00460 _sfSecondaryColors (source._sfSecondaryColors ),
00461 _sfTexCoords (source._sfTexCoords ),
00462 _sfTexCoords1 (source._sfTexCoords1 ),
00463 _sfTexCoords2 (source._sfTexCoords2 ),
00464 _sfTexCoords3 (source._sfTexCoords3 ),
00465 _sfTexCoords4 (source._sfTexCoords4 ),
00466 _sfTexCoords5 (source._sfTexCoords5 ),
00467 _sfTexCoords6 (source._sfTexCoords6 ),
00468 _sfTexCoords7 (source._sfTexCoords7 ),
00469 _sfIndices (source._sfIndices ),
00470 _mfIndexMapping (source._mfIndexMapping ),
00471 _sfDlistCache (source._sfDlistCache ),
00472 _sfGLId (source._sfGLId ),
00473 _sfIgnoreGLForAspect (source._sfIgnoreGLForAspect ),
00474 _sfMinindex (source._sfMinindex ),
00475 _sfMaxindex (source._sfMaxindex ),
00476 _mfLowindices (source._mfLowindices ),
00477 _mfHighindices (source._mfHighindices ),
00478 _sfVbo (source._sfVbo ),
00479 Inherited (source)
00480 {
00481 }
00482
00483
00484
00485 GeometryBase::~GeometryBase(void)
00486 {
00487 }
00488
00489
00490
00491 UInt32 GeometryBase::getBinSize(const BitVector &whichField)
00492 {
00493 UInt32 returnValue = Inherited::getBinSize(whichField);
00494
00495 if(FieldBits::NoField != (TypesFieldMask & whichField))
00496 {
00497 returnValue += _sfTypes.getBinSize();
00498 }
00499
00500 if(FieldBits::NoField != (LengthsFieldMask & whichField))
00501 {
00502 returnValue += _sfLengths.getBinSize();
00503 }
00504
00505 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00506 {
00507 returnValue += _sfPositions.getBinSize();
00508 }
00509
00510 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00511 {
00512 returnValue += _sfNormals.getBinSize();
00513 }
00514
00515 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00516 {
00517 returnValue += _sfColors.getBinSize();
00518 }
00519
00520 if(FieldBits::NoField != (SecondaryColorsFieldMask & whichField))
00521 {
00522 returnValue += _sfSecondaryColors.getBinSize();
00523 }
00524
00525 if(FieldBits::NoField != (TexCoordsFieldMask & whichField))
00526 {
00527 returnValue += _sfTexCoords.getBinSize();
00528 }
00529
00530 if(FieldBits::NoField != (TexCoords1FieldMask & whichField))
00531 {
00532 returnValue += _sfTexCoords1.getBinSize();
00533 }
00534
00535 if(FieldBits::NoField != (TexCoords2FieldMask & whichField))
00536 {
00537 returnValue += _sfTexCoords2.getBinSize();
00538 }
00539
00540 if(FieldBits::NoField != (TexCoords3FieldMask & whichField))
00541 {
00542 returnValue += _sfTexCoords3.getBinSize();
00543 }
00544
00545 if(FieldBits::NoField != (TexCoords4FieldMask & whichField))
00546 {
00547 returnValue += _sfTexCoords4.getBinSize();
00548 }
00549
00550 if(FieldBits::NoField != (TexCoords5FieldMask & whichField))
00551 {
00552 returnValue += _sfTexCoords5.getBinSize();
00553 }
00554
00555 if(FieldBits::NoField != (TexCoords6FieldMask & whichField))
00556 {
00557 returnValue += _sfTexCoords6.getBinSize();
00558 }
00559
00560 if(FieldBits::NoField != (TexCoords7FieldMask & whichField))
00561 {
00562 returnValue += _sfTexCoords7.getBinSize();
00563 }
00564
00565 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00566 {
00567 returnValue += _sfIndices.getBinSize();
00568 }
00569
00570 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
00571 {
00572 returnValue += _mfIndexMapping.getBinSize();
00573 }
00574
00575 if(FieldBits::NoField != (DlistCacheFieldMask & whichField))
00576 {
00577 returnValue += _sfDlistCache.getBinSize();
00578 }
00579
00580 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00581 {
00582 returnValue += _sfGLId.getBinSize();
00583 }
00584
00585 if(FieldBits::NoField != (IgnoreGLForAspectFieldMask & whichField))
00586 {
00587 returnValue += _sfIgnoreGLForAspect.getBinSize();
00588 }
00589
00590 if(FieldBits::NoField != (MinindexFieldMask & whichField))
00591 {
00592 returnValue += _sfMinindex.getBinSize();
00593 }
00594
00595 if(FieldBits::NoField != (MaxindexFieldMask & whichField))
00596 {
00597 returnValue += _sfMaxindex.getBinSize();
00598 }
00599
00600 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
00601 {
00602 returnValue += _mfLowindices.getBinSize();
00603 }
00604
00605 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
00606 {
00607 returnValue += _mfHighindices.getBinSize();
00608 }
00609
00610 if(FieldBits::NoField != (VboFieldMask & whichField))
00611 {
00612 returnValue += _sfVbo.getBinSize();
00613 }
00614
00615
00616 return returnValue;
00617 }
00618
00619 void GeometryBase::copyToBin( BinaryDataHandler &pMem,
00620 const BitVector &whichField)
00621 {
00622 Inherited::copyToBin(pMem, whichField);
00623
00624 if(FieldBits::NoField != (TypesFieldMask & whichField))
00625 {
00626 _sfTypes.copyToBin(pMem);
00627 }
00628
00629 if(FieldBits::NoField != (LengthsFieldMask & whichField))
00630 {
00631 _sfLengths.copyToBin(pMem);
00632 }
00633
00634 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00635 {
00636 _sfPositions.copyToBin(pMem);
00637 }
00638
00639 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00640 {
00641 _sfNormals.copyToBin(pMem);
00642 }
00643
00644 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00645 {
00646 _sfColors.copyToBin(pMem);
00647 }
00648
00649 if(FieldBits::NoField != (SecondaryColorsFieldMask & whichField))
00650 {
00651 _sfSecondaryColors.copyToBin(pMem);
00652 }
00653
00654 if(FieldBits::NoField != (TexCoordsFieldMask & whichField))
00655 {
00656 _sfTexCoords.copyToBin(pMem);
00657 }
00658
00659 if(FieldBits::NoField != (TexCoords1FieldMask & whichField))
00660 {
00661 _sfTexCoords1.copyToBin(pMem);
00662 }
00663
00664 if(FieldBits::NoField != (TexCoords2FieldMask & whichField))
00665 {
00666 _sfTexCoords2.copyToBin(pMem);
00667 }
00668
00669 if(FieldBits::NoField != (TexCoords3FieldMask & whichField))
00670 {
00671 _sfTexCoords3.copyToBin(pMem);
00672 }
00673
00674 if(FieldBits::NoField != (TexCoords4FieldMask & whichField))
00675 {
00676 _sfTexCoords4.copyToBin(pMem);
00677 }
00678
00679 if(FieldBits::NoField != (TexCoords5FieldMask & whichField))
00680 {
00681 _sfTexCoords5.copyToBin(pMem);
00682 }
00683
00684 if(FieldBits::NoField != (TexCoords6FieldMask & whichField))
00685 {
00686 _sfTexCoords6.copyToBin(pMem);
00687 }
00688
00689 if(FieldBits::NoField != (TexCoords7FieldMask & whichField))
00690 {
00691 _sfTexCoords7.copyToBin(pMem);
00692 }
00693
00694 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00695 {
00696 _sfIndices.copyToBin(pMem);
00697 }
00698
00699 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
00700 {
00701 _mfIndexMapping.copyToBin(pMem);
00702 }
00703
00704 if(FieldBits::NoField != (DlistCacheFieldMask & whichField))
00705 {
00706 _sfDlistCache.copyToBin(pMem);
00707 }
00708
00709 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00710 {
00711 _sfGLId.copyToBin(pMem);
00712 }
00713
00714 if(FieldBits::NoField != (IgnoreGLForAspectFieldMask & whichField))
00715 {
00716 _sfIgnoreGLForAspect.copyToBin(pMem);
00717 }
00718
00719 if(FieldBits::NoField != (MinindexFieldMask & whichField))
00720 {
00721 _sfMinindex.copyToBin(pMem);
00722 }
00723
00724 if(FieldBits::NoField != (MaxindexFieldMask & whichField))
00725 {
00726 _sfMaxindex.copyToBin(pMem);
00727 }
00728
00729 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
00730 {
00731 _mfLowindices.copyToBin(pMem);
00732 }
00733
00734 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
00735 {
00736 _mfHighindices.copyToBin(pMem);
00737 }
00738
00739 if(FieldBits::NoField != (VboFieldMask & whichField))
00740 {
00741 _sfVbo.copyToBin(pMem);
00742 }
00743
00744
00745 }
00746
00747 void GeometryBase::copyFromBin( BinaryDataHandler &pMem,
00748 const BitVector &whichField)
00749 {
00750 Inherited::copyFromBin(pMem, whichField);
00751
00752 if(FieldBits::NoField != (TypesFieldMask & whichField))
00753 {
00754 _sfTypes.copyFromBin(pMem);
00755 }
00756
00757 if(FieldBits::NoField != (LengthsFieldMask & whichField))
00758 {
00759 _sfLengths.copyFromBin(pMem);
00760 }
00761
00762 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00763 {
00764 _sfPositions.copyFromBin(pMem);
00765 }
00766
00767 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00768 {
00769 _sfNormals.copyFromBin(pMem);
00770 }
00771
00772 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00773 {
00774 _sfColors.copyFromBin(pMem);
00775 }
00776
00777 if(FieldBits::NoField != (SecondaryColorsFieldMask & whichField))
00778 {
00779 _sfSecondaryColors.copyFromBin(pMem);
00780 }
00781
00782 if(FieldBits::NoField != (TexCoordsFieldMask & whichField))
00783 {
00784 _sfTexCoords.copyFromBin(pMem);
00785 }
00786
00787 if(FieldBits::NoField != (TexCoords1FieldMask & whichField))
00788 {
00789 _sfTexCoords1.copyFromBin(pMem);
00790 }
00791
00792 if(FieldBits::NoField != (TexCoords2FieldMask & whichField))
00793 {
00794 _sfTexCoords2.copyFromBin(pMem);
00795 }
00796
00797 if(FieldBits::NoField != (TexCoords3FieldMask & whichField))
00798 {
00799 _sfTexCoords3.copyFromBin(pMem);
00800 }
00801
00802 if(FieldBits::NoField != (TexCoords4FieldMask & whichField))
00803 {
00804 _sfTexCoords4.copyFromBin(pMem);
00805 }
00806
00807 if(FieldBits::NoField != (TexCoords5FieldMask & whichField))
00808 {
00809 _sfTexCoords5.copyFromBin(pMem);
00810 }
00811
00812 if(FieldBits::NoField != (TexCoords6FieldMask & whichField))
00813 {
00814 _sfTexCoords6.copyFromBin(pMem);
00815 }
00816
00817 if(FieldBits::NoField != (TexCoords7FieldMask & whichField))
00818 {
00819 _sfTexCoords7.copyFromBin(pMem);
00820 }
00821
00822 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00823 {
00824 _sfIndices.copyFromBin(pMem);
00825 }
00826
00827 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
00828 {
00829 _mfIndexMapping.copyFromBin(pMem);
00830 }
00831
00832 if(FieldBits::NoField != (DlistCacheFieldMask & whichField))
00833 {
00834 _sfDlistCache.copyFromBin(pMem);
00835 }
00836
00837 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00838 {
00839 _sfGLId.copyFromBin(pMem);
00840 }
00841
00842 if(FieldBits::NoField != (IgnoreGLForAspectFieldMask & whichField))
00843 {
00844 _sfIgnoreGLForAspect.copyFromBin(pMem);
00845 }
00846
00847 if(FieldBits::NoField != (MinindexFieldMask & whichField))
00848 {
00849 _sfMinindex.copyFromBin(pMem);
00850 }
00851
00852 if(FieldBits::NoField != (MaxindexFieldMask & whichField))
00853 {
00854 _sfMaxindex.copyFromBin(pMem);
00855 }
00856
00857 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
00858 {
00859 _mfLowindices.copyFromBin(pMem);
00860 }
00861
00862 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
00863 {
00864 _mfHighindices.copyFromBin(pMem);
00865 }
00866
00867 if(FieldBits::NoField != (VboFieldMask & whichField))
00868 {
00869 _sfVbo.copyFromBin(pMem);
00870 }
00871
00872
00873 }
00874
00875 #if !defined(OSG_FIXED_MFIELDSYNC)
00876 void GeometryBase::executeSyncImpl( GeometryBase *pOther,
00877 const BitVector &whichField)
00878 {
00879
00880 Inherited::executeSyncImpl(pOther, whichField);
00881
00882 if(FieldBits::NoField != (TypesFieldMask & whichField))
00883 _sfTypes.syncWith(pOther->_sfTypes);
00884
00885 if(FieldBits::NoField != (LengthsFieldMask & whichField))
00886 _sfLengths.syncWith(pOther->_sfLengths);
00887
00888 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00889 _sfPositions.syncWith(pOther->_sfPositions);
00890
00891 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00892 _sfNormals.syncWith(pOther->_sfNormals);
00893
00894 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00895 _sfColors.syncWith(pOther->_sfColors);
00896
00897 if(FieldBits::NoField != (SecondaryColorsFieldMask & whichField))
00898 _sfSecondaryColors.syncWith(pOther->_sfSecondaryColors);
00899
00900 if(FieldBits::NoField != (TexCoordsFieldMask & whichField))
00901 _sfTexCoords.syncWith(pOther->_sfTexCoords);
00902
00903 if(FieldBits::NoField != (TexCoords1FieldMask & whichField))
00904 _sfTexCoords1.syncWith(pOther->_sfTexCoords1);
00905
00906 if(FieldBits::NoField != (TexCoords2FieldMask & whichField))
00907 _sfTexCoords2.syncWith(pOther->_sfTexCoords2);
00908
00909 if(FieldBits::NoField != (TexCoords3FieldMask & whichField))
00910 _sfTexCoords3.syncWith(pOther->_sfTexCoords3);
00911
00912 if(FieldBits::NoField != (TexCoords4FieldMask & whichField))
00913 _sfTexCoords4.syncWith(pOther->_sfTexCoords4);
00914
00915 if(FieldBits::NoField != (TexCoords5FieldMask & whichField))
00916 _sfTexCoords5.syncWith(pOther->_sfTexCoords5);
00917
00918 if(FieldBits::NoField != (TexCoords6FieldMask & whichField))
00919 _sfTexCoords6.syncWith(pOther->_sfTexCoords6);
00920
00921 if(FieldBits::NoField != (TexCoords7FieldMask & whichField))
00922 _sfTexCoords7.syncWith(pOther->_sfTexCoords7);
00923
00924 if(FieldBits::NoField != (IndicesFieldMask & whichField))
00925 _sfIndices.syncWith(pOther->_sfIndices);
00926
00927 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
00928 _mfIndexMapping.syncWith(pOther->_mfIndexMapping);
00929
00930 if(FieldBits::NoField != (DlistCacheFieldMask & whichField))
00931 _sfDlistCache.syncWith(pOther->_sfDlistCache);
00932
00933 if(FieldBits::NoField != (GLIdFieldMask & whichField))
00934 _sfGLId.syncWith(pOther->_sfGLId);
00935
00936 if(FieldBits::NoField != (IgnoreGLForAspectFieldMask & whichField))
00937 _sfIgnoreGLForAspect.syncWith(pOther->_sfIgnoreGLForAspect);
00938
00939 if(FieldBits::NoField != (MinindexFieldMask & whichField))
00940 _sfMinindex.syncWith(pOther->_sfMinindex);
00941
00942 if(FieldBits::NoField != (MaxindexFieldMask & whichField))
00943 _sfMaxindex.syncWith(pOther->_sfMaxindex);
00944
00945 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
00946 _mfLowindices.syncWith(pOther->_mfLowindices);
00947
00948 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
00949 _mfHighindices.syncWith(pOther->_mfHighindices);
00950
00951 if(FieldBits::NoField != (VboFieldMask & whichField))
00952 _sfVbo.syncWith(pOther->_sfVbo);
00953
00954
00955 }
00956 #else
00957 void GeometryBase::executeSyncImpl( GeometryBase *pOther,
00958 const BitVector &whichField,
00959 const SyncInfo &sInfo )
00960 {
00961
00962 Inherited::executeSyncImpl(pOther, whichField, sInfo);
00963
00964 if(FieldBits::NoField != (TypesFieldMask & whichField))
00965 _sfTypes.syncWith(pOther->_sfTypes);
00966
00967 if(FieldBits::NoField != (LengthsFieldMask & whichField))
00968 _sfLengths.syncWith(pOther->_sfLengths);
00969
00970 if(FieldBits::NoField != (PositionsFieldMask & whichField))
00971 _sfPositions.syncWith(pOther->_sfPositions);
00972
00973 if(FieldBits::NoField != (NormalsFieldMask & whichField))
00974 _sfNormals.syncWith(pOther->_sfNormals);
00975
00976 if(FieldBits::NoField != (ColorsFieldMask & whichField))
00977 _sfColors.syncWith(pOther->_sfColors);
00978
00979 if(FieldBits::NoField != (SecondaryColorsFieldMask & whichField))
00980 _sfSecondaryColors.syncWith(pOther->_sfSecondaryColors);
00981
00982 if(FieldBits::NoField != (TexCoordsFieldMask & whichField))
00983 _sfTexCoords.syncWith(pOther->_sfTexCoords);
00984
00985 if(FieldBits::NoField != (TexCoords1FieldMask & whichField))
00986 _sfTexCoords1.syncWith(pOther->_sfTexCoords1);
00987
00988 if(FieldBits::NoField != (TexCoords2FieldMask & whichField))
00989 _sfTexCoords2.syncWith(pOther->_sfTexCoords2);
00990
00991 if(FieldBits::NoField != (TexCoords3FieldMask & whichField))
00992 _sfTexCoords3.syncWith(pOther->_sfTexCoords3);
00993
00994 if(FieldBits::NoField != (TexCoords4FieldMask & whichField))
00995 _sfTexCoords4.syncWith(pOther->_sfTexCoords4);
00996
00997 if(FieldBits::NoField != (TexCoords5FieldMask & whichField))
00998 _sfTexCoords5.syncWith(pOther->_sfTexCoords5);
00999
01000 if(FieldBits::NoField != (TexCoords6FieldMask & whichField))
01001 _sfTexCoords6.syncWith(pOther->_sfTexCoords6);
01002
01003 if(FieldBits::NoField != (TexCoords7FieldMask & whichField))
01004 _sfTexCoords7.syncWith(pOther->_sfTexCoords7);
01005
01006 if(FieldBits::NoField != (IndicesFieldMask & whichField))
01007 _sfIndices.syncWith(pOther->_sfIndices);
01008
01009 if(FieldBits::NoField != (DlistCacheFieldMask & whichField))
01010 _sfDlistCache.syncWith(pOther->_sfDlistCache);
01011
01012 if(FieldBits::NoField != (GLIdFieldMask & whichField))
01013 _sfGLId.syncWith(pOther->_sfGLId);
01014
01015 if(FieldBits::NoField != (IgnoreGLForAspectFieldMask & whichField))
01016 _sfIgnoreGLForAspect.syncWith(pOther->_sfIgnoreGLForAspect);
01017
01018 if(FieldBits::NoField != (MinindexFieldMask & whichField))
01019 _sfMinindex.syncWith(pOther->_sfMinindex);
01020
01021 if(FieldBits::NoField != (MaxindexFieldMask & whichField))
01022 _sfMaxindex.syncWith(pOther->_sfMaxindex);
01023
01024 if(FieldBits::NoField != (VboFieldMask & whichField))
01025 _sfVbo.syncWith(pOther->_sfVbo);
01026
01027
01028 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
01029 _mfIndexMapping.syncWith(pOther->_mfIndexMapping, sInfo);
01030
01031 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
01032 _mfLowindices.syncWith(pOther->_mfLowindices, sInfo);
01033
01034 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
01035 _mfHighindices.syncWith(pOther->_mfHighindices, sInfo);
01036
01037
01038 }
01039
01040 void GeometryBase::execBeginEditImpl (const BitVector &whichField,
01041 UInt32 uiAspect,
01042 UInt32 uiContainerSize)
01043 {
01044 Inherited::execBeginEditImpl(whichField, uiAspect, uiContainerSize);
01045
01046 if(FieldBits::NoField != (IndexMappingFieldMask & whichField))
01047 _mfIndexMapping.beginEdit(uiAspect, uiContainerSize);
01048
01049 if(FieldBits::NoField != (LowindicesFieldMask & whichField))
01050 _mfLowindices.beginEdit(uiAspect, uiContainerSize);
01051
01052 if(FieldBits::NoField != (HighindicesFieldMask & whichField))
01053 _mfHighindices.beginEdit(uiAspect, uiContainerSize);
01054
01055 }
01056 #endif
01057
01058
01059
01060 OSG_END_NAMESPACE
01061
01062 #include <OSGSFieldTypeDef.inl>
01063 #include <OSGMFieldTypeDef.inl>
01064
01065 OSG_BEGIN_NAMESPACE
01066
01067 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
01068 DataType FieldDataTraits<GeometryPtr>::_type("GeometryPtr", "MaterialDrawablePtr");
01069 #endif
01070
01071 OSG_DLLEXPORT_SFIELD_DEF1(GeometryPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
01072 OSG_DLLEXPORT_MFIELD_DEF1(GeometryPtr, OSG_SYSTEMLIB_DLLTMPLMAPPING);
01073
01074
01075
01076
01077
01078 #ifdef OSG_SGI_CC
01079 #pragma set woff 1174
01080 #endif
01081
01082 #ifdef OSG_LINUX_ICC
01083 #pragma warning( disable : 177 )
01084 #endif
01085
01086 namespace
01087 {
01088 static Char8 cvsid_cpp [] = "@(#)$Id: FCBaseTemplate_cpp.h,v 1.49 2008/06/09 07:30:44 vossg Exp $";
01089 static Char8 cvsid_hpp [] = OSGGEOMETRYBASE_HEADER_CVSID;
01090 static Char8 cvsid_inl [] = OSGGEOMETRYBASE_INLINE_CVSID;
01091
01092 static Char8 cvsid_fields_hpp[] = OSGGEOMETRYFIELDS_HEADER_CVSID;
01093 }
01094
01095 OSG_END_NAMESPACE
01096