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 _OSGMULTIPASSMATERIALBASE_H_
00055 #define _OSGMULTIPASSMATERIALBASE_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 <OSGMaterial.h>
00069
00070 #include <OSGMaterialFields.h>
00071
00072 #include <OSGMultiPassMaterialFields.h>
00073
00074 OSG_BEGIN_NAMESPACE
00075
00076 class MultiPassMaterial;
00077 class BinaryDataHandler;
00078
00080
00081 class OSG_SYSTEMLIB_DLLMAPPING MultiPassMaterialBase : public Material
00082 {
00083 private:
00084
00085 typedef Material Inherited;
00086
00087
00088 public:
00089
00090 typedef MultiPassMaterialPtr 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
00125 MFMaterialPtr *getMFMaterials (void);
00126
00127 MaterialPtr &getMaterials (const UInt32 index);
00128 MFMaterialPtr &getMaterials (void);
00129 const MFMaterialPtr &getMaterials (void) const;
00130
00132
00138
00143
00147 virtual UInt32 getBinSize (const BitVector &whichField);
00148 virtual void copyToBin ( BinaryDataHandler &pMem,
00149 const BitVector &whichField);
00150 virtual void copyFromBin( BinaryDataHandler &pMem,
00151 const BitVector &whichField);
00152
00153
00155
00159 static MultiPassMaterialPtr create (void);
00160 static MultiPassMaterialPtr createEmpty (void);
00161
00164
00168 virtual FieldContainerPtr shallowCopy (void) const;
00169
00171
00172 protected:
00173
00174
00178 MFMaterialPtr _mfMaterials;
00179
00181
00185 MultiPassMaterialBase(void);
00186 MultiPassMaterialBase(const MultiPassMaterialBase &source);
00187
00189
00193 virtual ~MultiPassMaterialBase(void);
00194
00196
00200 #if !defined(OSG_FIXED_MFIELDSYNC)
00201 void executeSyncImpl( MultiPassMaterialBase *pOther,
00202 const BitVector &whichField);
00203
00204 virtual void executeSync( FieldContainer &other,
00205 const BitVector &whichField);
00206 #else
00207 void executeSyncImpl( MultiPassMaterialBase *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 MultiPassMaterialBase &source);
00238 };
00239
00240
00241
00242
00243
00244
00245 typedef MultiPassMaterialBase *MultiPassMaterialBaseP;
00246
00247 typedef osgIF<MultiPassMaterialBase::isNodeCore,
00248 CoredNodePtr<MultiPassMaterial>,
00249 FieldContainer::attempt_to_create_CoredNodePtr_on_non_NodeCore_FC
00250 >::_IRet MultiPassMaterialNodePtr;
00251
00252 typedef RefPtr<MultiPassMaterialPtr> MultiPassMaterialRefPtr;
00253
00254 OSG_END_NAMESPACE
00255
00256 #define OSGMULTIPASSMATERIALBASE_HEADER_CVSID "@(#)$Id: OSGMultiPassMaterialBase.h,v 1.5 2005/07/20 00:09:24 vossg Exp $"
00257
00258 #endif