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_COMPILESTENCILCHUNKINST
00055
00056 #include <stdlib.h>
00057 #include <stdio.h>
00058
00059 #include <OSGConfig.h>
00060
00061 #include "OSGStencilChunkBase.h"
00062 #include "OSGStencilChunk.h"
00063
00064 #include <OSGGL.h>
00065 #include <OSGGL.h>
00066 #include <OSGGL.h>
00067 #include <OSGGL.h>
00068
00069 OSG_BEGIN_NAMESPACE
00070
00071 const OSG::BitVector StencilChunkBase::StencilFuncFieldMask =
00072 (TypeTraits<BitVector>::One << StencilChunkBase::StencilFuncFieldId);
00073
00074 const OSG::BitVector StencilChunkBase::StencilValueFieldMask =
00075 (TypeTraits<BitVector>::One << StencilChunkBase::StencilValueFieldId);
00076
00077 const OSG::BitVector StencilChunkBase::StencilMaskFieldMask =
00078 (TypeTraits<BitVector>::One << StencilChunkBase::StencilMaskFieldId);
00079
00080 const OSG::BitVector StencilChunkBase::StencilOpFailFieldMask =
00081 (TypeTraits<BitVector>::One << StencilChunkBase::StencilOpFailFieldId);
00082
00083 const OSG::BitVector StencilChunkBase::StencilOpZFailFieldMask =
00084 (TypeTraits<BitVector>::One << StencilChunkBase::StencilOpZFailFieldId);
00085
00086 const OSG::BitVector StencilChunkBase::StencilOpZPassFieldMask =
00087 (TypeTraits<BitVector>::One << StencilChunkBase::StencilOpZPassFieldId);
00088
00089 const OSG::BitVector StencilChunkBase::ClearBufferFieldMask =
00090 (TypeTraits<BitVector>::One << StencilChunkBase::ClearBufferFieldId);
00091
00092 const OSG::BitVector StencilChunkBase::BitMaskFieldMask =
00093 (TypeTraits<BitVector>::One << StencilChunkBase::BitMaskFieldId);
00094
00095 const OSG::BitVector StencilChunkBase::MTInfluenceMask =
00096 (Inherited::MTInfluenceMask) |
00097 (static_cast<BitVector>(0x0) << Inherited::NextFieldId);
00098
00099
00100
00101
00127
00128
00129 FieldDescription *StencilChunkBase::_desc[] =
00130 {
00131 new FieldDescription(SFGLenum::getClassType(),
00132 "stencilFunc",
00133 StencilFuncFieldId, StencilFuncFieldMask,
00134 false,
00135 (FieldAccessMethod) &StencilChunkBase::getSFStencilFunc),
00136 new FieldDescription(SFInt32::getClassType(),
00137 "stencilValue",
00138 StencilValueFieldId, StencilValueFieldMask,
00139 false,
00140 (FieldAccessMethod) &StencilChunkBase::getSFStencilValue),
00141 new FieldDescription(SFUInt32::getClassType(),
00142 "stencilMask",
00143 StencilMaskFieldId, StencilMaskFieldMask,
00144 false,
00145 (FieldAccessMethod) &StencilChunkBase::getSFStencilMask),
00146 new FieldDescription(SFGLenum::getClassType(),
00147 "stencilOpFail",
00148 StencilOpFailFieldId, StencilOpFailFieldMask,
00149 false,
00150 (FieldAccessMethod) &StencilChunkBase::getSFStencilOpFail),
00151 new FieldDescription(SFGLenum::getClassType(),
00152 "stencilOpZFail",
00153 StencilOpZFailFieldId, StencilOpZFailFieldMask,
00154 false,
00155 (FieldAccessMethod) &StencilChunkBase::getSFStencilOpZFail),
00156 new FieldDescription(SFGLenum::getClassType(),
00157 "stencilOpZPass",
00158 StencilOpZPassFieldId, StencilOpZPassFieldMask,
00159 false,
00160 (FieldAccessMethod) &StencilChunkBase::getSFStencilOpZPass),
00161 new FieldDescription(SFInt32::getClassType(),
00162 "clearBuffer",
00163 ClearBufferFieldId, ClearBufferFieldMask,
00164 false,
00165 (FieldAccessMethod) &StencilChunkBase::getSFClearBuffer),
00166 new FieldDescription(SFUInt32::getClassType(),
00167 "bitMask",
00168 BitMaskFieldId, BitMaskFieldMask,
00169 false,
00170 (FieldAccessMethod) &StencilChunkBase::getSFBitMask)
00171 };
00172
00173
00174 FieldContainerType StencilChunkBase::_type(
00175 "StencilChunk",
00176 "StateChunk",
00177 NULL,
00178 (PrototypeCreateF) &StencilChunkBase::createEmpty,
00179 StencilChunk::initMethod,
00180 _desc,
00181 sizeof(_desc));
00182
00183
00184
00185
00186
00187 FieldContainerType &StencilChunkBase::getType(void)
00188 {
00189 return _type;
00190 }
00191
00192 const FieldContainerType &StencilChunkBase::getType(void) const
00193 {
00194 return _type;
00195 }
00196
00197
00198 FieldContainerPtr StencilChunkBase::shallowCopy(void) const
00199 {
00200 StencilChunkPtr returnValue;
00201
00202 newPtr(returnValue, dynamic_cast<const StencilChunk *>(this));
00203
00204 return returnValue;
00205 }
00206
00207 UInt32 StencilChunkBase::getContainerSize(void) const
00208 {
00209 return sizeof(StencilChunk);
00210 }
00211
00212
00213 #if !defined(OSG_FIXED_MFIELDSYNC)
00214 void StencilChunkBase::executeSync( FieldContainer &other,
00215 const BitVector &whichField)
00216 {
00217 this->executeSyncImpl((StencilChunkBase *) &other, whichField);
00218 }
00219 #else
00220 void StencilChunkBase::executeSync( FieldContainer &other,
00221 const BitVector &whichField, const SyncInfo &sInfo )
00222 {
00223 this->executeSyncImpl((StencilChunkBase *) &other, whichField, sInfo);
00224 }
00225 void StencilChunkBase::execBeginEdit(const BitVector &whichField,
00226 UInt32 uiAspect,
00227 UInt32 uiContainerSize)
00228 {
00229 this->execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00230 }
00231
00232 void StencilChunkBase::onDestroyAspect(UInt32 uiId, UInt32 uiAspect)
00233 {
00234 Inherited::onDestroyAspect(uiId, uiAspect);
00235
00236 }
00237 #endif
00238
00239
00240
00241 #ifdef OSG_WIN32_ICL
00242 #pragma warning (disable : 383)
00243 #endif
00244
00245 StencilChunkBase::StencilChunkBase(void) :
00246 _sfStencilFunc (GLenum(GL_NONE)),
00247 _sfStencilValue (Int32(0)),
00248 _sfStencilMask (UInt32(0x1)),
00249 _sfStencilOpFail (GLenum(GL_KEEP)),
00250 _sfStencilOpZFail (GLenum(GL_KEEP)),
00251 _sfStencilOpZPass (GLenum(GL_KEEP)),
00252 _sfClearBuffer (Int32(0)),
00253 _sfBitMask (UInt32(0xFFFFFFFF)),
00254 Inherited()
00255 {
00256 }
00257
00258 #ifdef OSG_WIN32_ICL
00259 #pragma warning (default : 383)
00260 #endif
00261
00262 StencilChunkBase::StencilChunkBase(const StencilChunkBase &source) :
00263 _sfStencilFunc (source._sfStencilFunc ),
00264 _sfStencilValue (source._sfStencilValue ),
00265 _sfStencilMask (source._sfStencilMask ),
00266 _sfStencilOpFail (source._sfStencilOpFail ),
00267 _sfStencilOpZFail (source._sfStencilOpZFail ),
00268 _sfStencilOpZPass (source._sfStencilOpZPass ),
00269 _sfClearBuffer (source._sfClearBuffer ),
00270 _sfBitMask (source._sfBitMask ),
00271 Inherited (source)
00272 {
00273 }
00274
00275
00276
00277 StencilChunkBase::~StencilChunkBase(void)
00278 {
00279 }
00280
00281
00282
00283 UInt32 StencilChunkBase::getBinSize(const BitVector &whichField)
00284 {
00285 UInt32 returnValue = Inherited::getBinSize(whichField);
00286
00287 if(FieldBits::NoField != (StencilFuncFieldMask & whichField))
00288 {
00289 returnValue += _sfStencilFunc.getBinSize();
00290 }
00291
00292 if(FieldBits::NoField != (StencilValueFieldMask & whichField))
00293 {
00294 returnValue += _sfStencilValue.getBinSize();
00295 }
00296
00297 if(FieldBits::NoField != (StencilMaskFieldMask & whichField))
00298 {
00299 returnValue += _sfStencilMask.getBinSize();
00300 }
00301
00302 if(FieldBits::NoField != (StencilOpFailFieldMask & whichField))
00303 {
00304 returnValue += _sfStencilOpFail.getBinSize();
00305 }
00306
00307 if(FieldBits::NoField != (StencilOpZFailFieldMask & whichField))
00308 {
00309 returnValue += _sfStencilOpZFail.getBinSize();
00310 }
00311
00312 if(FieldBits::NoField != (StencilOpZPassFieldMask & whichField))
00313 {
00314 returnValue += _sfStencilOpZPass.getBinSize();
00315 }
00316
00317 if(FieldBits::NoField != (ClearBufferFieldMask & whichField))
00318 {
00319 returnValue += _sfClearBuffer.getBinSize();
00320 }
00321
00322 if(FieldBits::NoField != (BitMaskFieldMask & whichField))
00323 {
00324 returnValue += _sfBitMask.getBinSize();
00325 }
00326
00327
00328 return returnValue;
00329 }
00330
00331 void StencilChunkBase::copyToBin( BinaryDataHandler &pMem,
00332 const BitVector &whichField)
00333 {
00334 Inherited::copyToBin(pMem, whichField);
00335
00336 if(FieldBits::NoField != (StencilFuncFieldMask & whichField))
00337 {
00338 _sfStencilFunc.copyToBin(pMem);
00339 }
00340
00341 if(FieldBits::NoField != (StencilValueFieldMask & whichField))
00342 {
00343 _sfStencilValue.copyToBin(pMem);
00344 }
00345
00346 if(FieldBits::NoField != (StencilMaskFieldMask & whichField))
00347 {
00348 _sfStencilMask.copyToBin(pMem);
00349 }
00350
00351 if(FieldBits::NoField != (StencilOpFailFieldMask & whichField))
00352 {
00353 _sfStencilOpFail.copyToBin(pMem);
00354 }
00355
00356 if(FieldBits::NoField != (StencilOpZFailFieldMask & whichField))
00357 {
00358 _sfStencilOpZFail.copyToBin(pMem);
00359 }
00360
00361 if(FieldBits::NoField != (StencilOpZPassFieldMask & whichField))
00362 {
00363 _sfStencilOpZPass.copyToBin(pMem);
00364 }
00365
00366 if(FieldBits::NoField != (ClearBufferFieldMask & whichField))
00367 {
00368 _sfClearBuffer.copyToBin(pMem);
00369 }
00370
00371 if(FieldBits::NoField != (BitMaskFieldMask & whichField))
00372 {
00373 _sfBitMask.copyToBin(pMem);
00374 }
00375
00376
00377 }
00378
00379 void StencilChunkBase::copyFromBin( BinaryDataHandler &pMem,
00380 const BitVector &whichField)
00381 {
00382 Inherited::copyFromBin(pMem, whichField);
00383
00384 if(FieldBits::NoField != (StencilFuncFieldMask & whichField))
00385 {
00386 _sfStencilFunc.copyFromBin(pMem);
00387 }
00388
00389 if(FieldBits::NoField != (StencilValueFieldMask & whichField))
00390 {
00391 _sfStencilValue.copyFromBin(pMem);
00392 }
00393
00394 if(FieldBits::NoField != (StencilMaskFieldMask & whichField))
00395 {
00396 _sfStencilMask.copyFromBin(pMem);
00397 }
00398
00399 if(FieldBits::NoField != (StencilOpFailFieldMask & whichField))
00400 {
00401 _sfStencilOpFail.copyFromBin(pMem);
00402 }
00403
00404 if(FieldBits::NoField != (StencilOpZFailFieldMask & whichField))
00405 {
00406 _sfStencilOpZFail.copyFromBin(pMem);
00407 }
00408
00409 if(FieldBits::NoField != (StencilOpZPassFieldMask & whichField))
00410 {
00411 _sfStencilOpZPass.copyFromBin(pMem);
00412 }
00413
00414 if(FieldBits::NoField != (ClearBufferFieldMask & whichField))
00415 {
00416 _sfClearBuffer.copyFromBin(pMem);
00417 }
00418
00419 if(FieldBits::NoField != (BitMaskFieldMask & whichField))
00420 {
00421 _sfBitMask.copyFromBin(pMem);
00422 }
00423
00424
00425 }
00426
00427 #if !defined(OSG_FIXED_MFIELDSYNC)
00428 void StencilChunkBase::executeSyncImpl( StencilChunkBase *pOther,
00429 const BitVector &whichField)
00430 {
00431
00432 Inherited::executeSyncImpl(pOther, whichField);
00433
00434 if(FieldBits::NoField != (StencilFuncFieldMask & whichField))
00435 _sfStencilFunc.syncWith(pOther->_sfStencilFunc);
00436
00437 if(FieldBits::NoField != (StencilValueFieldMask & whichField))
00438 _sfStencilValue.syncWith(pOther->_sfStencilValue);
00439
00440 if(FieldBits::NoField != (StencilMaskFieldMask & whichField))
00441 _sfStencilMask.syncWith(pOther->_sfStencilMask);
00442
00443 if(FieldBits::NoField != (StencilOpFailFieldMask & whichField))
00444 _sfStencilOpFail.syncWith(pOther->_sfStencilOpFail);
00445
00446 if(FieldBits::NoField != (StencilOpZFailFieldMask & whichField))
00447 _sfStencilOpZFail.syncWith(pOther->_sfStencilOpZFail);
00448
00449 if(FieldBits::NoField != (StencilOpZPassFieldMask & whichField))
00450 _sfStencilOpZPass.syncWith(pOther->_sfStencilOpZPass);
00451
00452 if(FieldBits::NoField != (ClearBufferFieldMask & whichField))
00453 _sfClearBuffer.syncWith(pOther->_sfClearBuffer);
00454
00455 if(FieldBits::NoField != (BitMaskFieldMask & whichField))
00456 _sfBitMask.syncWith(pOther->_sfBitMask);
00457
00458
00459 }
00460 #else
00461 void StencilChunkBase::executeSyncImpl( StencilChunkBase *pOther,
00462 const BitVector &whichField,
00463 const SyncInfo &sInfo )
00464 {
00465
00466 Inherited::executeSyncImpl(pOther, whichField, sInfo);
00467
00468 if(FieldBits::NoField != (StencilFuncFieldMask & whichField))
00469 _sfStencilFunc.syncWith(pOther->_sfStencilFunc);
00470
00471 if(FieldBits::NoField != (StencilValueFieldMask & whichField))
00472 _sfStencilValue.syncWith(pOther->_sfStencilValue);
00473
00474 if(FieldBits::NoField != (StencilMaskFieldMask & whichField))
00475 _sfStencilMask.syncWith(pOther->_sfStencilMask);
00476
00477 if(FieldBits::NoField != (StencilOpFailFieldMask & whichField))
00478 _sfStencilOpFail.syncWith(pOther->_sfStencilOpFail);
00479
00480 if(FieldBits::NoField != (StencilOpZFailFieldMask & whichField))
00481 _sfStencilOpZFail.syncWith(pOther->_sfStencilOpZFail);
00482
00483 if(FieldBits::NoField != (StencilOpZPassFieldMask & whichField))
00484 _sfStencilOpZPass.syncWith(pOther->_sfStencilOpZPass);
00485
00486 if(FieldBits::NoField != (ClearBufferFieldMask & whichField))
00487 _sfClearBuffer.syncWith(pOther->_sfClearBuffer);
00488
00489 if(FieldBits::NoField != (BitMaskFieldMask & whichField))
00490 _sfBitMask.syncWith(pOther->_sfBitMask);
00491
00492
00493
00494 }
00495
00496 void StencilChunkBase::execBeginEditImpl (const BitVector &whichField,
00497 UInt32 uiAspect,
00498 UInt32 uiContainerSize)
00499 {
00500 Inherited::execBeginEditImpl(whichField, uiAspect, uiContainerSize);
00501
00502 }
00503 #endif
00504
00505
00506
00507 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
00508 DataType FieldDataTraits<StencilChunkPtr>::_type("StencilChunkPtr", "StateChunkPtr");
00509 #endif
00510
00511
00512
00513
00514
00515
00516 #ifdef OSG_SGI_CC
00517 #pragma set woff 1174
00518 #endif
00519
00520 #ifdef OSG_LINUX_ICC
00521 #pragma warning( disable : 177 )
00522 #endif
00523
00524 namespace
00525 {
00526 static Char8 cvsid_cpp [] = "@(#)$Id: OSGStencilChunkBase.cpp,v 1.7 2006/09/08 13:45:30 yjung Exp $";
00527 static Char8 cvsid_hpp [] = OSGSTENCILCHUNKBASE_HEADER_CVSID;
00528 static Char8 cvsid_inl [] = OSGSTENCILCHUNKBASE_INLINE_CVSID;
00529
00530 static Char8 cvsid_fields_hpp[] = OSGSTENCILCHUNKFIELDS_HEADER_CVSID;
00531 }
00532
00533 OSG_END_NAMESPACE
00534