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 #ifndef _OSGMATERIALPOOLBASE_H_
00055 #define _OSGMATERIALPOOLBASE_H_
00056 #ifdef __sgi
00057 #pragma once
00058 #endif
00059
00060
00061 #include <OSGConfig.h>
00062 #include <OSGSystemDef.h>
00063
00064 #include <OSGBaseTypes.h>
00065 #include <OSGRefPtr.h>
00066 #include <OSGCoredNodePtr.h>
00067
00068 #include <OSGGroup.h>
00069
00070 #include <OSGMaterial.h>
00071
00072 #include <OSGMaterialPoolFields.h>
00073
00074 OSG_BEGIN_NAMESPACE
00075
00076 class MaterialPool;
00077 class BinaryDataHandler;
00078
00080
00081 class OSG_SYSTEMLIB_DLLMAPPING MaterialPoolBase : public Group
00082 {
00083 private:
00084
00085 typedef Group Inherited;
00086
00087
00088 public:
00089
00090 typedef MaterialPoolPtr Ptr;
00091
00092 enum
00093 {
00094 MaterialsFieldId = Inherited::NextFieldId,
00095 NextFieldId = MaterialsFieldId + 1
00096 };
00097
00098 static const OSG::BitVector MaterialsFieldMask;
00099
00100
00101 static const OSG::BitVector MTInfluenceMask;
00102
00103
00107 static FieldContainerType &getClassType (void);
00108 static UInt32 getClassTypeId (void);
00109
00111
00115 virtual FieldContainerType &getType (void);
00116 virtual const FieldContainerType &getType (void) const;
00117
00118 virtual UInt32 getContainerSize(void) const;
00119
00121
00126
00130 virtual UInt32 getBinSize (const BitVector &whichField);
00131 virtual void copyToBin ( BinaryDataHandler &pMem,
00132 const BitVector &whichField);
00133 virtual void copyFromBin( BinaryDataHandler &pMem,
00134 const BitVector &whichField);
00135
00136
00138
00142 static MaterialPoolPtr create (void);
00143 static MaterialPoolPtr createEmpty (void);
00144
00147
00151 virtual FieldContainerPtr shallowCopy (void) const;
00152
00154
00155 protected:
00156
00157
00161 MFMaterialPtr _mfMaterials;
00162
00164
00168 MaterialPoolBase(void);
00169 MaterialPoolBase(const MaterialPoolBase &source);
00170
00172
00176 virtual ~MaterialPoolBase(void);
00177
00179
00183 MFMaterialPtr *getMFMaterials (void);
00184
00185 MaterialPtr &getMaterials (UInt32 index);
00186 MFMaterialPtr &getMaterials (void);
00187 const MFMaterialPtr &getMaterials (void) const;
00188
00190
00196
00200 #if !defined(OSG_FIXED_MFIELDSYNC)
00201 void executeSyncImpl( MaterialPoolBase *pOther,
00202 const BitVector &whichField);
00203
00204 virtual void executeSync( FieldContainer &other,
00205 const BitVector &whichField);
00206 #else
00207 void executeSyncImpl( MaterialPoolBase *pOther,
00208 const BitVector &whichField,
00209 const SyncInfo &sInfo );
00210
00211 virtual void executeSync( FieldContainer &other,
00212 const BitVector &whichField,
00213 const SyncInfo &sInfo);
00214
00215 virtual void execBeginEdit (const BitVector &whichField,
00216 UInt32 uiAspect,
00217 UInt32 uiContainerSize);
00218
00219 void execBeginEditImpl (const BitVector &whichField,
00220 UInt32 uiAspect,
00221 UInt32 uiContainerSize);
00222
00223 virtual void onDestroyAspect(UInt32 uiId, UInt32 uiAspect);
00224 #endif
00225
00227
00228 private:
00229
00230 friend class FieldContainer;
00231
00232 static FieldDescription *_desc[];
00233 static FieldContainerType _type;
00234
00235
00236
00237 void operator =(const MaterialPoolBase &source);
00238 };
00239
00240
00241
00242
00243
00244
00245 typedef MaterialPoolBase *MaterialPoolBaseP;
00246
00247 typedef osgIF<MaterialPoolBase::isNodeCore,
00248 CoredNodePtr<MaterialPool>,
00249 FieldContainer::attempt_to_create_CoredNodePtr_on_non_NodeCore_FC
00250 >::_IRet MaterialPoolNodePtr;
00251
00252 typedef RefPtr<MaterialPoolPtr> MaterialPoolRefPtr;
00253
00254 OSG_END_NAMESPACE
00255
00256 #define OSGMATERIALPOOLBASE_HEADER_CVSID "@(#)$Id: OSGMaterialPoolBase.h,v 1.6 2006/02/20 16:54:24 dirk Exp $"
00257
00258 #endif