1 /*---------------------------------------------------------------------------*\
5 * Copyright (C) 2000-2013 by the OpenSG Forum *
9 * contact: dirk@opensg.org, gerrit.voss@vossg.org, carsten_neumann@gmx.net *
11 \*---------------------------------------------------------------------------*/
12 /*---------------------------------------------------------------------------*\
15 * This library is free software; you can redistribute it and/or modify it *
16 * under the terms of the GNU Library General Public License as published *
17 * by the Free Software Foundation, version 2. *
19 * This library is distributed in the hope that it will be useful, but *
20 * WITHOUT ANY WARRANTY; without even the implied warranty of *
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
22 * Library General Public License for more details. *
24 * You should have received a copy of the GNU Library General Public *
25 * License along with this library; if not, write to the Free Software *
26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
28 \*---------------------------------------------------------------------------*/
29 /*---------------------------------------------------------------------------*\
37 \*---------------------------------------------------------------------------*/
39 /*****************************************************************************\
40 *****************************************************************************
42 ** This file is automatically generated. **
44 ** Any changes made to this file WILL be lost when it is **
45 ** regenerated, which can become necessary at any time. **
47 ** Do not change this file, changes should be done in the derived **
48 ** class MaterialChunk!
50 *****************************************************************************
51 \*****************************************************************************/
56 #include "OSGConfig.h"
59 #include "OSGGL.h" // ColorMaterial default header
60 #include "OSGGL.h" // BackColorMaterial default header
63 #include "OSGMaterialChunkBase.h"
64 #include "OSGMaterialChunk.h"
66 #include <boost/bind.hpp>
68 #ifdef WIN32 // turn off 'this' : used in base member initializer list warning
69 #pragma warning(disable:4355)
74 /***************************************************************************\
76 \***************************************************************************/
78 /*! \class OSG::MaterialChunk
79 See \ref PageSystemMaterialChunk for details.
81 This chunk wraps glMaterial() (OSG::MaterialChunk::_sfDiffuse,
82 OSG::MaterialChunk::_sfSpecular, OSG::MaterialChunk::_sfEmission,
83 OSG::MaterialChunk::_sfShininess, OSG::MaterialChunk::_sfAmbient),
84 glEnable(GL_LIGHTING)(OSG::MaterialChunk::_sfLit) and glColorMaterial()
85 (OSG::MaterialChunk::_sfColorMaterial).
88 /***************************************************************************\
89 * Field Documentation *
90 \***************************************************************************/
92 /*! \var Color4f MaterialChunkBase::_sfDiffuse
96 /*! \var Color4f MaterialChunkBase::_sfAmbient
100 /*! \var Color4f MaterialChunkBase::_sfSpecular
104 /*! \var Color4f MaterialChunkBase::_sfEmission
108 /*! \var Real32 MaterialChunkBase::_sfShininess
112 /*! \var bool MaterialChunkBase::_sfLit
113 Switch for using this material in lighting calculation.
114 If not set the diffuse color is used as is.
117 /*! \var GLenum MaterialChunkBase::_sfColorMaterial
118 The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.
121 /*! \var bool MaterialChunkBase::_sfBackMaterial
122 Switch for using separate material properties for front- and back-facing
123 polygons. If set to false the standard parameters will be used for front- and
127 /*! \var Color4f MaterialChunkBase::_sfBackDiffuse
131 /*! \var Color4f MaterialChunkBase::_sfBackAmbient
135 /*! \var Color4f MaterialChunkBase::_sfBackSpecular
139 /*! \var Color4f MaterialChunkBase::_sfBackEmission
143 /*! \var Real32 MaterialChunkBase::_sfBackShininess
147 /*! \var GLenum MaterialChunkBase::_sfBackColorMaterial
148 The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.
152 /***************************************************************************\
153 * FieldType/FieldTrait Instantiation *
154 \***************************************************************************/
156 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
157 PointerType FieldTraits
<MaterialChunk
*, nsOSG
>::_type(
160 MaterialChunk::getClassType(),
164 OSG_FIELDTRAITS_GETTYPE_NS(MaterialChunk
*, nsOSG
)
166 OSG_EXPORT_PTR_SFIELD_FULL(PointerSField
,
170 OSG_EXPORT_PTR_MFIELD_FULL(PointerMField
,
174 /***************************************************************************\
175 * Field Description *
176 \***************************************************************************/
178 void MaterialChunkBase::classDescInserter(TypeObject
&oType
)
180 FieldDescriptionBase
*pDesc
= NULL
;
183 pDesc
= new SFColor4f::Description(
184 SFColor4f::getClassType(),
187 DiffuseFieldId
, DiffuseFieldMask
,
189 (Field::SFDefaultFlags
| Field::FStdAccess
),
190 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleDiffuse
),
191 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleDiffuse
));
193 oType
.addInitialDesc(pDesc
);
195 pDesc
= new SFColor4f::Description(
196 SFColor4f::getClassType(),
199 AmbientFieldId
, AmbientFieldMask
,
201 (Field::SFDefaultFlags
| Field::FStdAccess
),
202 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleAmbient
),
203 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleAmbient
));
205 oType
.addInitialDesc(pDesc
);
207 pDesc
= new SFColor4f::Description(
208 SFColor4f::getClassType(),
211 SpecularFieldId
, SpecularFieldMask
,
213 (Field::SFDefaultFlags
| Field::FStdAccess
),
214 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleSpecular
),
215 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleSpecular
));
217 oType
.addInitialDesc(pDesc
);
219 pDesc
= new SFColor4f::Description(
220 SFColor4f::getClassType(),
223 EmissionFieldId
, EmissionFieldMask
,
225 (Field::SFDefaultFlags
| Field::FStdAccess
),
226 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleEmission
),
227 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleEmission
));
229 oType
.addInitialDesc(pDesc
);
231 pDesc
= new SFReal32::Description(
232 SFReal32::getClassType(),
235 ShininessFieldId
, ShininessFieldMask
,
237 (Field::SFDefaultFlags
| Field::FStdAccess
),
238 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleShininess
),
239 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleShininess
));
241 oType
.addInitialDesc(pDesc
);
243 pDesc
= new SFBool::Description(
244 SFBool::getClassType(),
246 "Switch for using this material in lighting calculation. \n"
247 "If not set the diffuse color is used as is.\n",
248 LitFieldId
, LitFieldMask
,
250 (Field::SFDefaultFlags
| Field::FStdAccess
),
251 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleLit
),
252 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleLit
));
254 oType
.addInitialDesc(pDesc
);
256 pDesc
= new SFGLenum::Description(
257 SFGLenum::getClassType(),
259 "The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.\n",
260 ColorMaterialFieldId
, ColorMaterialFieldMask
,
262 (Field::SFDefaultFlags
| Field::FStdAccess
),
263 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleColorMaterial
),
264 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleColorMaterial
));
266 oType
.addInitialDesc(pDesc
);
268 pDesc
= new SFBool::Description(
269 SFBool::getClassType(),
271 "Switch for using separate material properties for front- and back-facing\n"
272 "polygons. If set to false the standard parameters will be used for front- and \n"
274 BackMaterialFieldId
, BackMaterialFieldMask
,
276 (Field::SFDefaultFlags
| Field::FStdAccess
),
277 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackMaterial
),
278 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackMaterial
));
280 oType
.addInitialDesc(pDesc
);
282 pDesc
= new SFColor4f::Description(
283 SFColor4f::getClassType(),
286 BackDiffuseFieldId
, BackDiffuseFieldMask
,
288 (Field::SFDefaultFlags
| Field::FStdAccess
),
289 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackDiffuse
),
290 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackDiffuse
));
292 oType
.addInitialDesc(pDesc
);
294 pDesc
= new SFColor4f::Description(
295 SFColor4f::getClassType(),
298 BackAmbientFieldId
, BackAmbientFieldMask
,
300 (Field::SFDefaultFlags
| Field::FStdAccess
),
301 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackAmbient
),
302 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackAmbient
));
304 oType
.addInitialDesc(pDesc
);
306 pDesc
= new SFColor4f::Description(
307 SFColor4f::getClassType(),
310 BackSpecularFieldId
, BackSpecularFieldMask
,
312 (Field::SFDefaultFlags
| Field::FStdAccess
),
313 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackSpecular
),
314 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackSpecular
));
316 oType
.addInitialDesc(pDesc
);
318 pDesc
= new SFColor4f::Description(
319 SFColor4f::getClassType(),
322 BackEmissionFieldId
, BackEmissionFieldMask
,
324 (Field::SFDefaultFlags
| Field::FStdAccess
),
325 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackEmission
),
326 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackEmission
));
328 oType
.addInitialDesc(pDesc
);
330 pDesc
= new SFReal32::Description(
331 SFReal32::getClassType(),
334 BackShininessFieldId
, BackShininessFieldMask
,
336 (Field::SFDefaultFlags
| Field::FStdAccess
),
337 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackShininess
),
338 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackShininess
));
340 oType
.addInitialDesc(pDesc
);
342 pDesc
= new SFGLenum::Description(
343 SFGLenum::getClassType(),
345 "The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.\n",
346 BackColorMaterialFieldId
, BackColorMaterialFieldMask
,
348 (Field::SFDefaultFlags
| Field::FStdAccess
),
349 static_cast<FieldEditMethodSig
>(&MaterialChunk::editHandleBackColorMaterial
),
350 static_cast<FieldGetMethodSig
>(&MaterialChunk::getHandleBackColorMaterial
));
352 oType
.addInitialDesc(pDesc
);
356 MaterialChunkBase::TypeObject
MaterialChunkBase::_type(
357 MaterialChunkBase::getClassname(),
358 Inherited::getClassname(),
361 reinterpret_cast<PrototypeCreateF
>(&MaterialChunkBase::createEmptyLocal
),
362 MaterialChunk::initMethod
,
363 MaterialChunk::exitMethod
,
364 reinterpret_cast<InitalInsertDescFunc
>(&MaterialChunk::classDescInserter
),
367 "<?xml version=\"1.0\" ?>\n"
370 " name=\"MaterialChunk\"\n"
371 " parent=\"StateChunk\"\n"
372 " library=\"System\"\n"
373 " structure=\"concrete\"\n"
374 " pointerfieldtypes=\"both\"\n"
375 " systemcomponent=\"true\"\n"
376 " parentsystemcomponent=\"true\"\n"
377 " docGroupBase=\"GrpSystemState\"\n"
379 "See \\ref PageSystemMaterialChunk for details.\n"
381 "This chunk wraps glMaterial() (OSG::MaterialChunk::_sfDiffuse,\n"
382 "OSG::MaterialChunk::_sfSpecular, OSG::MaterialChunk::_sfEmission,\n"
383 "OSG::MaterialChunk::_sfShininess, OSG::MaterialChunk::_sfAmbient),\n"
384 "glEnable(GL_LIGHTING)(OSG::MaterialChunk::_sfLit) and glColorMaterial()\n"
385 "(OSG::MaterialChunk::_sfColorMaterial).\n"
387 "\t\tname=\"diffuse\"\n"
388 "\t\ttype=\"Color4f\"\n"
389 "\t\tcardinality=\"single\"\n"
390 "\t\tvisibility=\"external\"\n"
391 "\t\tdefaultValue=\"1.f,1.f,1.f,1.f\"\n"
395 "\t\tname=\"ambient\"\n"
396 "\t\ttype=\"Color4f\"\n"
397 "\t\tcardinality=\"single\"\n"
398 "\t\tvisibility=\"external\"\n"
399 "\t\tdefaultValue=\".2f,.2f,.2f,1.f\"\n"
403 "\t\tname=\"specular\"\n"
404 "\t\ttype=\"Color4f\"\n"
405 "\t\tcardinality=\"single\"\n"
406 "\t\tvisibility=\"external\"\n"
407 "\t\tdefaultValue=\".5f,.5f,.5f,1.f\"\n"
411 "\t\tname=\"emission\"\n"
412 "\t\ttype=\"Color4f\"\n"
413 "\t\tcardinality=\"single\"\n"
414 "\t\tvisibility=\"external\"\n"
415 "\t\tdefaultValue=\"0.f,0.f,0.f,1.f\"\n"
419 "\t\tname=\"shininess\"\n"
420 "\t\ttype=\"Real32\"\n"
421 "\t\tcardinality=\"single\"\n"
422 "\t\tvisibility=\"external\"\n"
423 "\t\tdefaultValue=\"10.f\"\n"
428 "\t\ttype=\"bool\"\n"
429 "\t\tcardinality=\"single\"\n"
430 "\t\tvisibility=\"external\"\n"
431 "\t\tdefaultValue=\"true\"\n"
433 " Switch for using this material in lighting calculation. \n"
434 " If not set the diffuse color is used as is.\n"
437 "\t\tname=\"colorMaterial\"\n"
438 "\t\ttype=\"GLenum\"\n"
439 "\t\tcardinality=\"single\"\n"
440 "\t\tvisibility=\"external\"\n"
441 "\t\tdefaultValue=\"GL_DIFFUSE\"\n"
442 "\t\tdefaultHeader=\""OSGGL.h"\"\n"
444 " The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.\n"
447 "\t\tname=\"backMaterial\"\n"
448 "\t\ttype=\"bool\"\n"
449 "\t\tcardinality=\"single\"\n"
450 "\t\tvisibility=\"external\"\n"
451 "\t\tdefaultValue=\"false\"\n"
453 " Switch for using separate material properties for front- and back-facing\n"
454 " polygons. If set to false the standard parameters will be used for front- and \n"
458 "\t\tname=\"backDiffuse\"\n"
459 "\t\ttype=\"Color4f\"\n"
460 "\t\tcardinality=\"single\"\n"
461 "\t\tvisibility=\"external\"\n"
462 "\t\tdefaultValue=\"1.f,1.f,1.f,0.f\"\n"
466 "\t\tname=\"backAmbient\"\n"
467 "\t\ttype=\"Color4f\"\n"
468 "\t\tcardinality=\"single\"\n"
469 "\t\tvisibility=\"external\"\n"
470 "\t\tdefaultValue=\".2f,.2f,.2f,0.f\"\n"
474 "\t\tname=\"backSpecular\"\n"
475 "\t\ttype=\"Color4f\"\n"
476 "\t\tcardinality=\"single\"\n"
477 "\t\tvisibility=\"external\"\n"
478 "\t\tdefaultValue=\".5f,.5f,.5f,0.f\"\n"
482 "\t\tname=\"backEmission\"\n"
483 "\t\ttype=\"Color4f\"\n"
484 "\t\tcardinality=\"single\"\n"
485 "\t\tvisibility=\"external\"\n"
486 "\t\tdefaultValue=\"0.f,0.f,0.f,0.f\"\n"
490 "\t\tname=\"backShininess\"\n"
491 "\t\ttype=\"Real32\"\n"
492 "\t\tcardinality=\"single\"\n"
493 "\t\tvisibility=\"external\"\n"
494 "\t\tdefaultValue=\"10.f\"\n"
498 "\t\tname=\"backColorMaterial\"\n"
499 "\t\ttype=\"GLenum\"\n"
500 "\t\tcardinality=\"single\"\n"
501 "\t\tvisibility=\"external\"\n"
502 "\t\tdefaultValue=\"GL_DIFFUSE\"\n"
503 "\t\tdefaultHeader=\""OSGGL.h"\"\n"
505 " The mode for using Geometry colors in lighting. Defaults to GL_DIFFUSE.\n"
507 "</FieldContainer>\n",
508 "See \\ref PageSystemMaterialChunk for details.\n"
510 "This chunk wraps glMaterial() (OSG::MaterialChunk::_sfDiffuse,\n"
511 "OSG::MaterialChunk::_sfSpecular, OSG::MaterialChunk::_sfEmission,\n"
512 "OSG::MaterialChunk::_sfShininess, OSG::MaterialChunk::_sfAmbient),\n"
513 "glEnable(GL_LIGHTING)(OSG::MaterialChunk::_sfLit) and glColorMaterial()\n"
514 "(OSG::MaterialChunk::_sfColorMaterial).\n"
517 /*------------------------------ get -----------------------------------*/
519 FieldContainerType
&MaterialChunkBase::getType(void)
524 const FieldContainerType
&MaterialChunkBase::getType(void) const
529 UInt32
MaterialChunkBase::getContainerSize(void) const
531 return sizeof(MaterialChunk
);
534 /*------------------------- decorator get ------------------------------*/
537 SFColor4f
*MaterialChunkBase::editSFDiffuse(void)
539 editSField(DiffuseFieldMask
);
544 const SFColor4f
*MaterialChunkBase::getSFDiffuse(void) const
550 SFColor4f
*MaterialChunkBase::editSFAmbient(void)
552 editSField(AmbientFieldMask
);
557 const SFColor4f
*MaterialChunkBase::getSFAmbient(void) const
563 SFColor4f
*MaterialChunkBase::editSFSpecular(void)
565 editSField(SpecularFieldMask
);
570 const SFColor4f
*MaterialChunkBase::getSFSpecular(void) const
576 SFColor4f
*MaterialChunkBase::editSFEmission(void)
578 editSField(EmissionFieldMask
);
583 const SFColor4f
*MaterialChunkBase::getSFEmission(void) const
589 SFReal32
*MaterialChunkBase::editSFShininess(void)
591 editSField(ShininessFieldMask
);
593 return &_sfShininess
;
596 const SFReal32
*MaterialChunkBase::getSFShininess(void) const
598 return &_sfShininess
;
602 SFBool
*MaterialChunkBase::editSFLit(void)
604 editSField(LitFieldMask
);
609 const SFBool
*MaterialChunkBase::getSFLit(void) const
615 SFGLenum
*MaterialChunkBase::editSFColorMaterial(void)
617 editSField(ColorMaterialFieldMask
);
619 return &_sfColorMaterial
;
622 const SFGLenum
*MaterialChunkBase::getSFColorMaterial(void) const
624 return &_sfColorMaterial
;
628 SFBool
*MaterialChunkBase::editSFBackMaterial(void)
630 editSField(BackMaterialFieldMask
);
632 return &_sfBackMaterial
;
635 const SFBool
*MaterialChunkBase::getSFBackMaterial(void) const
637 return &_sfBackMaterial
;
641 SFColor4f
*MaterialChunkBase::editSFBackDiffuse(void)
643 editSField(BackDiffuseFieldMask
);
645 return &_sfBackDiffuse
;
648 const SFColor4f
*MaterialChunkBase::getSFBackDiffuse(void) const
650 return &_sfBackDiffuse
;
654 SFColor4f
*MaterialChunkBase::editSFBackAmbient(void)
656 editSField(BackAmbientFieldMask
);
658 return &_sfBackAmbient
;
661 const SFColor4f
*MaterialChunkBase::getSFBackAmbient(void) const
663 return &_sfBackAmbient
;
667 SFColor4f
*MaterialChunkBase::editSFBackSpecular(void)
669 editSField(BackSpecularFieldMask
);
671 return &_sfBackSpecular
;
674 const SFColor4f
*MaterialChunkBase::getSFBackSpecular(void) const
676 return &_sfBackSpecular
;
680 SFColor4f
*MaterialChunkBase::editSFBackEmission(void)
682 editSField(BackEmissionFieldMask
);
684 return &_sfBackEmission
;
687 const SFColor4f
*MaterialChunkBase::getSFBackEmission(void) const
689 return &_sfBackEmission
;
693 SFReal32
*MaterialChunkBase::editSFBackShininess(void)
695 editSField(BackShininessFieldMask
);
697 return &_sfBackShininess
;
700 const SFReal32
*MaterialChunkBase::getSFBackShininess(void) const
702 return &_sfBackShininess
;
706 SFGLenum
*MaterialChunkBase::editSFBackColorMaterial(void)
708 editSField(BackColorMaterialFieldMask
);
710 return &_sfBackColorMaterial
;
713 const SFGLenum
*MaterialChunkBase::getSFBackColorMaterial(void) const
715 return &_sfBackColorMaterial
;
723 /*------------------------------ access -----------------------------------*/
725 SizeT
MaterialChunkBase::getBinSize(ConstFieldMaskArg whichField
)
727 SizeT returnValue
= Inherited::getBinSize(whichField
);
729 if(FieldBits::NoField
!= (DiffuseFieldMask
& whichField
))
731 returnValue
+= _sfDiffuse
.getBinSize();
733 if(FieldBits::NoField
!= (AmbientFieldMask
& whichField
))
735 returnValue
+= _sfAmbient
.getBinSize();
737 if(FieldBits::NoField
!= (SpecularFieldMask
& whichField
))
739 returnValue
+= _sfSpecular
.getBinSize();
741 if(FieldBits::NoField
!= (EmissionFieldMask
& whichField
))
743 returnValue
+= _sfEmission
.getBinSize();
745 if(FieldBits::NoField
!= (ShininessFieldMask
& whichField
))
747 returnValue
+= _sfShininess
.getBinSize();
749 if(FieldBits::NoField
!= (LitFieldMask
& whichField
))
751 returnValue
+= _sfLit
.getBinSize();
753 if(FieldBits::NoField
!= (ColorMaterialFieldMask
& whichField
))
755 returnValue
+= _sfColorMaterial
.getBinSize();
757 if(FieldBits::NoField
!= (BackMaterialFieldMask
& whichField
))
759 returnValue
+= _sfBackMaterial
.getBinSize();
761 if(FieldBits::NoField
!= (BackDiffuseFieldMask
& whichField
))
763 returnValue
+= _sfBackDiffuse
.getBinSize();
765 if(FieldBits::NoField
!= (BackAmbientFieldMask
& whichField
))
767 returnValue
+= _sfBackAmbient
.getBinSize();
769 if(FieldBits::NoField
!= (BackSpecularFieldMask
& whichField
))
771 returnValue
+= _sfBackSpecular
.getBinSize();
773 if(FieldBits::NoField
!= (BackEmissionFieldMask
& whichField
))
775 returnValue
+= _sfBackEmission
.getBinSize();
777 if(FieldBits::NoField
!= (BackShininessFieldMask
& whichField
))
779 returnValue
+= _sfBackShininess
.getBinSize();
781 if(FieldBits::NoField
!= (BackColorMaterialFieldMask
& whichField
))
783 returnValue
+= _sfBackColorMaterial
.getBinSize();
789 void MaterialChunkBase::copyToBin(BinaryDataHandler
&pMem
,
790 ConstFieldMaskArg whichField
)
792 Inherited::copyToBin(pMem
, whichField
);
794 if(FieldBits::NoField
!= (DiffuseFieldMask
& whichField
))
796 _sfDiffuse
.copyToBin(pMem
);
798 if(FieldBits::NoField
!= (AmbientFieldMask
& whichField
))
800 _sfAmbient
.copyToBin(pMem
);
802 if(FieldBits::NoField
!= (SpecularFieldMask
& whichField
))
804 _sfSpecular
.copyToBin(pMem
);
806 if(FieldBits::NoField
!= (EmissionFieldMask
& whichField
))
808 _sfEmission
.copyToBin(pMem
);
810 if(FieldBits::NoField
!= (ShininessFieldMask
& whichField
))
812 _sfShininess
.copyToBin(pMem
);
814 if(FieldBits::NoField
!= (LitFieldMask
& whichField
))
816 _sfLit
.copyToBin(pMem
);
818 if(FieldBits::NoField
!= (ColorMaterialFieldMask
& whichField
))
820 _sfColorMaterial
.copyToBin(pMem
);
822 if(FieldBits::NoField
!= (BackMaterialFieldMask
& whichField
))
824 _sfBackMaterial
.copyToBin(pMem
);
826 if(FieldBits::NoField
!= (BackDiffuseFieldMask
& whichField
))
828 _sfBackDiffuse
.copyToBin(pMem
);
830 if(FieldBits::NoField
!= (BackAmbientFieldMask
& whichField
))
832 _sfBackAmbient
.copyToBin(pMem
);
834 if(FieldBits::NoField
!= (BackSpecularFieldMask
& whichField
))
836 _sfBackSpecular
.copyToBin(pMem
);
838 if(FieldBits::NoField
!= (BackEmissionFieldMask
& whichField
))
840 _sfBackEmission
.copyToBin(pMem
);
842 if(FieldBits::NoField
!= (BackShininessFieldMask
& whichField
))
844 _sfBackShininess
.copyToBin(pMem
);
846 if(FieldBits::NoField
!= (BackColorMaterialFieldMask
& whichField
))
848 _sfBackColorMaterial
.copyToBin(pMem
);
852 void MaterialChunkBase::copyFromBin(BinaryDataHandler
&pMem
,
853 ConstFieldMaskArg whichField
)
855 Inherited::copyFromBin(pMem
, whichField
);
857 if(FieldBits::NoField
!= (DiffuseFieldMask
& whichField
))
859 editSField(DiffuseFieldMask
);
860 _sfDiffuse
.copyFromBin(pMem
);
862 if(FieldBits::NoField
!= (AmbientFieldMask
& whichField
))
864 editSField(AmbientFieldMask
);
865 _sfAmbient
.copyFromBin(pMem
);
867 if(FieldBits::NoField
!= (SpecularFieldMask
& whichField
))
869 editSField(SpecularFieldMask
);
870 _sfSpecular
.copyFromBin(pMem
);
872 if(FieldBits::NoField
!= (EmissionFieldMask
& whichField
))
874 editSField(EmissionFieldMask
);
875 _sfEmission
.copyFromBin(pMem
);
877 if(FieldBits::NoField
!= (ShininessFieldMask
& whichField
))
879 editSField(ShininessFieldMask
);
880 _sfShininess
.copyFromBin(pMem
);
882 if(FieldBits::NoField
!= (LitFieldMask
& whichField
))
884 editSField(LitFieldMask
);
885 _sfLit
.copyFromBin(pMem
);
887 if(FieldBits::NoField
!= (ColorMaterialFieldMask
& whichField
))
889 editSField(ColorMaterialFieldMask
);
890 _sfColorMaterial
.copyFromBin(pMem
);
892 if(FieldBits::NoField
!= (BackMaterialFieldMask
& whichField
))
894 editSField(BackMaterialFieldMask
);
895 _sfBackMaterial
.copyFromBin(pMem
);
897 if(FieldBits::NoField
!= (BackDiffuseFieldMask
& whichField
))
899 editSField(BackDiffuseFieldMask
);
900 _sfBackDiffuse
.copyFromBin(pMem
);
902 if(FieldBits::NoField
!= (BackAmbientFieldMask
& whichField
))
904 editSField(BackAmbientFieldMask
);
905 _sfBackAmbient
.copyFromBin(pMem
);
907 if(FieldBits::NoField
!= (BackSpecularFieldMask
& whichField
))
909 editSField(BackSpecularFieldMask
);
910 _sfBackSpecular
.copyFromBin(pMem
);
912 if(FieldBits::NoField
!= (BackEmissionFieldMask
& whichField
))
914 editSField(BackEmissionFieldMask
);
915 _sfBackEmission
.copyFromBin(pMem
);
917 if(FieldBits::NoField
!= (BackShininessFieldMask
& whichField
))
919 editSField(BackShininessFieldMask
);
920 _sfBackShininess
.copyFromBin(pMem
);
922 if(FieldBits::NoField
!= (BackColorMaterialFieldMask
& whichField
))
924 editSField(BackColorMaterialFieldMask
);
925 _sfBackColorMaterial
.copyFromBin(pMem
);
929 //! create a new instance of the class
930 MaterialChunkTransitPtr
MaterialChunkBase::createLocal(BitVector bFlags
)
932 MaterialChunkTransitPtr fc
;
934 if(getClassType().getPrototype() != NULL
)
936 FieldContainerTransitPtr tmpPtr
=
937 getClassType().getPrototype()-> shallowCopyLocal(bFlags
);
939 fc
= dynamic_pointer_cast
<MaterialChunk
>(tmpPtr
);
945 //! create a new instance of the class, copy the container flags
946 MaterialChunkTransitPtr
MaterialChunkBase::createDependent(BitVector bFlags
)
948 MaterialChunkTransitPtr fc
;
950 if(getClassType().getPrototype() != NULL
)
952 FieldContainerTransitPtr tmpPtr
=
953 getClassType().getPrototype()-> shallowCopyDependent(bFlags
);
955 fc
= dynamic_pointer_cast
<MaterialChunk
>(tmpPtr
);
961 //! create a new instance of the class
962 MaterialChunkTransitPtr
MaterialChunkBase::create(void)
964 MaterialChunkTransitPtr fc
;
966 if(getClassType().getPrototype() != NULL
)
968 FieldContainerTransitPtr tmpPtr
=
969 getClassType().getPrototype()-> shallowCopy();
971 fc
= dynamic_pointer_cast
<MaterialChunk
>(tmpPtr
);
977 MaterialChunk
*MaterialChunkBase::createEmptyLocal(BitVector bFlags
)
979 MaterialChunk
*returnValue
;
981 newPtr
<MaterialChunk
>(returnValue
, bFlags
);
983 returnValue
->_pFieldFlags
->_bNamespaceMask
&= ~bFlags
;
988 //! create an empty new instance of the class, do not copy the prototype
989 MaterialChunk
*MaterialChunkBase::createEmpty(void)
991 MaterialChunk
*returnValue
;
993 newPtr
<MaterialChunk
>(returnValue
, Thread::getCurrentLocalFlags());
995 returnValue
->_pFieldFlags
->_bNamespaceMask
&=
996 ~Thread::getCurrentLocalFlags();
1002 FieldContainerTransitPtr
MaterialChunkBase::shallowCopyLocal(
1003 BitVector bFlags
) const
1005 MaterialChunk
*tmpPtr
;
1007 newPtr(tmpPtr
, dynamic_cast<const MaterialChunk
*>(this), bFlags
);
1009 FieldContainerTransitPtr
returnValue(tmpPtr
);
1011 tmpPtr
->_pFieldFlags
->_bNamespaceMask
&= ~bFlags
;
1016 FieldContainerTransitPtr
MaterialChunkBase::shallowCopyDependent(
1017 BitVector bFlags
) const
1019 MaterialChunk
*tmpPtr
;
1021 newPtr(tmpPtr
, dynamic_cast<const MaterialChunk
*>(this), ~bFlags
);
1023 FieldContainerTransitPtr
returnValue(tmpPtr
);
1025 tmpPtr
->_pFieldFlags
->_bNamespaceMask
= bFlags
;
1030 FieldContainerTransitPtr
MaterialChunkBase::shallowCopy(void) const
1032 MaterialChunk
*tmpPtr
;
1035 dynamic_cast<const MaterialChunk
*>(this),
1036 Thread::getCurrentLocalFlags());
1038 tmpPtr
->_pFieldFlags
->_bNamespaceMask
&= ~Thread::getCurrentLocalFlags();
1040 FieldContainerTransitPtr
returnValue(tmpPtr
);
1048 /*------------------------- constructors ----------------------------------*/
1050 MaterialChunkBase::MaterialChunkBase(void) :
1052 _sfDiffuse (Color4f(1.f
,1.f
,1.f
,1.f
)),
1053 _sfAmbient (Color4f(.2f
,.2f
,.2f
,1.f
)),
1054 _sfSpecular (Color4f(.5f
,.5f
,.5f
,1.f
)),
1055 _sfEmission (Color4f(0.f
,0.f
,0.f
,1.f
)),
1056 _sfShininess (Real32(10.f
)),
1057 _sfLit (bool(true)),
1058 _sfColorMaterial (GLenum(GL_DIFFUSE
)),
1059 _sfBackMaterial (bool(false)),
1060 _sfBackDiffuse (Color4f(1.f
,1.f
,1.f
,0.f
)),
1061 _sfBackAmbient (Color4f(.2f
,.2f
,.2f
,0.f
)),
1062 _sfBackSpecular (Color4f(.5f
,.5f
,.5f
,0.f
)),
1063 _sfBackEmission (Color4f(0.f
,0.f
,0.f
,0.f
)),
1064 _sfBackShininess (Real32(10.f
)),
1065 _sfBackColorMaterial (GLenum(GL_DIFFUSE
))
1069 MaterialChunkBase::MaterialChunkBase(const MaterialChunkBase
&source
) :
1071 _sfDiffuse (source
._sfDiffuse
),
1072 _sfAmbient (source
._sfAmbient
),
1073 _sfSpecular (source
._sfSpecular
),
1074 _sfEmission (source
._sfEmission
),
1075 _sfShininess (source
._sfShininess
),
1076 _sfLit (source
._sfLit
),
1077 _sfColorMaterial (source
._sfColorMaterial
),
1078 _sfBackMaterial (source
._sfBackMaterial
),
1079 _sfBackDiffuse (source
._sfBackDiffuse
),
1080 _sfBackAmbient (source
._sfBackAmbient
),
1081 _sfBackSpecular (source
._sfBackSpecular
),
1082 _sfBackEmission (source
._sfBackEmission
),
1083 _sfBackShininess (source
._sfBackShininess
),
1084 _sfBackColorMaterial (source
._sfBackColorMaterial
)
1089 /*-------------------------- destructors ----------------------------------*/
1091 MaterialChunkBase::~MaterialChunkBase(void)
1096 GetFieldHandlePtr
MaterialChunkBase::getHandleDiffuse (void) const
1098 SFColor4f::GetHandlePtr
returnValue(
1099 new SFColor4f::GetHandle(
1101 this->getType().getFieldDesc(DiffuseFieldId
),
1102 const_cast<MaterialChunkBase
*>(this)));
1107 EditFieldHandlePtr
MaterialChunkBase::editHandleDiffuse (void)
1109 SFColor4f::EditHandlePtr
returnValue(
1110 new SFColor4f::EditHandle(
1112 this->getType().getFieldDesc(DiffuseFieldId
),
1116 editSField(DiffuseFieldMask
);
1121 GetFieldHandlePtr
MaterialChunkBase::getHandleAmbient (void) const
1123 SFColor4f::GetHandlePtr
returnValue(
1124 new SFColor4f::GetHandle(
1126 this->getType().getFieldDesc(AmbientFieldId
),
1127 const_cast<MaterialChunkBase
*>(this)));
1132 EditFieldHandlePtr
MaterialChunkBase::editHandleAmbient (void)
1134 SFColor4f::EditHandlePtr
returnValue(
1135 new SFColor4f::EditHandle(
1137 this->getType().getFieldDesc(AmbientFieldId
),
1141 editSField(AmbientFieldMask
);
1146 GetFieldHandlePtr
MaterialChunkBase::getHandleSpecular (void) const
1148 SFColor4f::GetHandlePtr
returnValue(
1149 new SFColor4f::GetHandle(
1151 this->getType().getFieldDesc(SpecularFieldId
),
1152 const_cast<MaterialChunkBase
*>(this)));
1157 EditFieldHandlePtr
MaterialChunkBase::editHandleSpecular (void)
1159 SFColor4f::EditHandlePtr
returnValue(
1160 new SFColor4f::EditHandle(
1162 this->getType().getFieldDesc(SpecularFieldId
),
1166 editSField(SpecularFieldMask
);
1171 GetFieldHandlePtr
MaterialChunkBase::getHandleEmission (void) const
1173 SFColor4f::GetHandlePtr
returnValue(
1174 new SFColor4f::GetHandle(
1176 this->getType().getFieldDesc(EmissionFieldId
),
1177 const_cast<MaterialChunkBase
*>(this)));
1182 EditFieldHandlePtr
MaterialChunkBase::editHandleEmission (void)
1184 SFColor4f::EditHandlePtr
returnValue(
1185 new SFColor4f::EditHandle(
1187 this->getType().getFieldDesc(EmissionFieldId
),
1191 editSField(EmissionFieldMask
);
1196 GetFieldHandlePtr
MaterialChunkBase::getHandleShininess (void) const
1198 SFReal32::GetHandlePtr
returnValue(
1199 new SFReal32::GetHandle(
1201 this->getType().getFieldDesc(ShininessFieldId
),
1202 const_cast<MaterialChunkBase
*>(this)));
1207 EditFieldHandlePtr
MaterialChunkBase::editHandleShininess (void)
1209 SFReal32::EditHandlePtr
returnValue(
1210 new SFReal32::EditHandle(
1212 this->getType().getFieldDesc(ShininessFieldId
),
1216 editSField(ShininessFieldMask
);
1221 GetFieldHandlePtr
MaterialChunkBase::getHandleLit (void) const
1223 SFBool::GetHandlePtr
returnValue(
1224 new SFBool::GetHandle(
1226 this->getType().getFieldDesc(LitFieldId
),
1227 const_cast<MaterialChunkBase
*>(this)));
1232 EditFieldHandlePtr
MaterialChunkBase::editHandleLit (void)
1234 SFBool::EditHandlePtr
returnValue(
1235 new SFBool::EditHandle(
1237 this->getType().getFieldDesc(LitFieldId
),
1241 editSField(LitFieldMask
);
1246 GetFieldHandlePtr
MaterialChunkBase::getHandleColorMaterial (void) const
1248 SFGLenum::GetHandlePtr
returnValue(
1249 new SFGLenum::GetHandle(
1251 this->getType().getFieldDesc(ColorMaterialFieldId
),
1252 const_cast<MaterialChunkBase
*>(this)));
1257 EditFieldHandlePtr
MaterialChunkBase::editHandleColorMaterial (void)
1259 SFGLenum::EditHandlePtr
returnValue(
1260 new SFGLenum::EditHandle(
1262 this->getType().getFieldDesc(ColorMaterialFieldId
),
1266 editSField(ColorMaterialFieldMask
);
1271 GetFieldHandlePtr
MaterialChunkBase::getHandleBackMaterial (void) const
1273 SFBool::GetHandlePtr
returnValue(
1274 new SFBool::GetHandle(
1276 this->getType().getFieldDesc(BackMaterialFieldId
),
1277 const_cast<MaterialChunkBase
*>(this)));
1282 EditFieldHandlePtr
MaterialChunkBase::editHandleBackMaterial (void)
1284 SFBool::EditHandlePtr
returnValue(
1285 new SFBool::EditHandle(
1287 this->getType().getFieldDesc(BackMaterialFieldId
),
1291 editSField(BackMaterialFieldMask
);
1296 GetFieldHandlePtr
MaterialChunkBase::getHandleBackDiffuse (void) const
1298 SFColor4f::GetHandlePtr
returnValue(
1299 new SFColor4f::GetHandle(
1301 this->getType().getFieldDesc(BackDiffuseFieldId
),
1302 const_cast<MaterialChunkBase
*>(this)));
1307 EditFieldHandlePtr
MaterialChunkBase::editHandleBackDiffuse (void)
1309 SFColor4f::EditHandlePtr
returnValue(
1310 new SFColor4f::EditHandle(
1312 this->getType().getFieldDesc(BackDiffuseFieldId
),
1316 editSField(BackDiffuseFieldMask
);
1321 GetFieldHandlePtr
MaterialChunkBase::getHandleBackAmbient (void) const
1323 SFColor4f::GetHandlePtr
returnValue(
1324 new SFColor4f::GetHandle(
1326 this->getType().getFieldDesc(BackAmbientFieldId
),
1327 const_cast<MaterialChunkBase
*>(this)));
1332 EditFieldHandlePtr
MaterialChunkBase::editHandleBackAmbient (void)
1334 SFColor4f::EditHandlePtr
returnValue(
1335 new SFColor4f::EditHandle(
1337 this->getType().getFieldDesc(BackAmbientFieldId
),
1341 editSField(BackAmbientFieldMask
);
1346 GetFieldHandlePtr
MaterialChunkBase::getHandleBackSpecular (void) const
1348 SFColor4f::GetHandlePtr
returnValue(
1349 new SFColor4f::GetHandle(
1351 this->getType().getFieldDesc(BackSpecularFieldId
),
1352 const_cast<MaterialChunkBase
*>(this)));
1357 EditFieldHandlePtr
MaterialChunkBase::editHandleBackSpecular (void)
1359 SFColor4f::EditHandlePtr
returnValue(
1360 new SFColor4f::EditHandle(
1362 this->getType().getFieldDesc(BackSpecularFieldId
),
1366 editSField(BackSpecularFieldMask
);
1371 GetFieldHandlePtr
MaterialChunkBase::getHandleBackEmission (void) const
1373 SFColor4f::GetHandlePtr
returnValue(
1374 new SFColor4f::GetHandle(
1376 this->getType().getFieldDesc(BackEmissionFieldId
),
1377 const_cast<MaterialChunkBase
*>(this)));
1382 EditFieldHandlePtr
MaterialChunkBase::editHandleBackEmission (void)
1384 SFColor4f::EditHandlePtr
returnValue(
1385 new SFColor4f::EditHandle(
1387 this->getType().getFieldDesc(BackEmissionFieldId
),
1391 editSField(BackEmissionFieldMask
);
1396 GetFieldHandlePtr
MaterialChunkBase::getHandleBackShininess (void) const
1398 SFReal32::GetHandlePtr
returnValue(
1399 new SFReal32::GetHandle(
1401 this->getType().getFieldDesc(BackShininessFieldId
),
1402 const_cast<MaterialChunkBase
*>(this)));
1407 EditFieldHandlePtr
MaterialChunkBase::editHandleBackShininess (void)
1409 SFReal32::EditHandlePtr
returnValue(
1410 new SFReal32::EditHandle(
1412 this->getType().getFieldDesc(BackShininessFieldId
),
1416 editSField(BackShininessFieldMask
);
1421 GetFieldHandlePtr
MaterialChunkBase::getHandleBackColorMaterial (void) const
1423 SFGLenum::GetHandlePtr
returnValue(
1424 new SFGLenum::GetHandle(
1425 &_sfBackColorMaterial
,
1426 this->getType().getFieldDesc(BackColorMaterialFieldId
),
1427 const_cast<MaterialChunkBase
*>(this)));
1432 EditFieldHandlePtr
MaterialChunkBase::editHandleBackColorMaterial(void)
1434 SFGLenum::EditHandlePtr
returnValue(
1435 new SFGLenum::EditHandle(
1436 &_sfBackColorMaterial
,
1437 this->getType().getFieldDesc(BackColorMaterialFieldId
),
1441 editSField(BackColorMaterialFieldMask
);
1447 #ifdef OSG_MT_CPTR_ASPECT
1448 void MaterialChunkBase::execSyncV( FieldContainer
&oFrom
,
1449 ConstFieldMaskArg whichField
,
1450 AspectOffsetStore
&oOffsets
,
1451 ConstFieldMaskArg syncMode
,
1452 const UInt32 uiSyncInfo
)
1454 MaterialChunk
*pThis
= static_cast<MaterialChunk
*>(this);
1456 pThis
->execSync(static_cast<MaterialChunk
*>(&oFrom
),
1465 #ifdef OSG_MT_CPTR_ASPECT
1466 FieldContainer
*MaterialChunkBase::createAspectCopy(
1467 const FieldContainer
*pRefAspect
) const
1469 MaterialChunk
*returnValue
;
1471 newAspectCopy(returnValue
,
1472 dynamic_cast<const MaterialChunk
*>(pRefAspect
),
1473 dynamic_cast<const MaterialChunk
*>(this));
1479 void MaterialChunkBase::resolveLinks(void)
1481 Inherited::resolveLinks();