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 _OSGSHADERCHUNKBASE_H_
00055 #define _OSGSHADERCHUNKBASE_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 <OSGShaderParameterChunk.h>
00069
00070 #include <OSGStringFields.h>
00071 #include <OSGStringFields.h>
00072
00073 #include <OSGShaderChunkFields.h>
00074
00075 OSG_BEGIN_NAMESPACE
00076
00077 class ShaderChunk;
00078 class BinaryDataHandler;
00079
00081
00082 class OSG_SYSTEMLIB_DLLMAPPING ShaderChunkBase : public ShaderParameterChunk
00083 {
00084 private:
00085
00086 typedef ShaderParameterChunk Inherited;
00087
00088
00089 public:
00090
00091 typedef ShaderChunkPtr Ptr;
00092
00093 enum
00094 {
00095 VertexProgramFieldId = Inherited::NextFieldId,
00096 FragmentProgramFieldId = VertexProgramFieldId + 1,
00097 NextFieldId = FragmentProgramFieldId + 1
00098 };
00099
00100 static const OSG::BitVector VertexProgramFieldMask;
00101 static const OSG::BitVector FragmentProgramFieldMask;
00102
00103
00104 static const OSG::BitVector MTInfluenceMask;
00105
00106
00110 static FieldContainerType &getClassType (void);
00111 static UInt32 getClassTypeId (void);
00112
00114
00118 virtual FieldContainerType &getType (void);
00119 virtual const FieldContainerType &getType (void) const;
00120
00121 virtual UInt32 getContainerSize(void) const;
00122
00124
00128 SFString *getSFVertexProgram (void);
00129 SFString *getSFFragmentProgram(void);
00130
00131 std::string &getVertexProgram (void);
00132 const std::string &getVertexProgram (void) const;
00133 std::string &getFragmentProgram(void);
00134 const std::string &getFragmentProgram(void) const;
00135
00137
00141 void setVertexProgram ( const std::string &value );
00142 void setFragmentProgram( const std::string &value );
00143
00145
00150
00154 virtual UInt32 getBinSize (const BitVector &whichField);
00155 virtual void copyToBin ( BinaryDataHandler &pMem,
00156 const BitVector &whichField);
00157 virtual void copyFromBin( BinaryDataHandler &pMem,
00158 const BitVector &whichField);
00159
00160
00162
00163 protected:
00164
00165
00169 SFString _sfVertexProgram;
00170 SFString _sfFragmentProgram;
00171
00173
00177 ShaderChunkBase(void);
00178 ShaderChunkBase(const ShaderChunkBase &source);
00179
00181
00185 virtual ~ShaderChunkBase(void);
00186
00188
00192 #if !defined(OSG_FIXED_MFIELDSYNC)
00193 void executeSyncImpl( ShaderChunkBase *pOther,
00194 const BitVector &whichField);
00195
00196 virtual void executeSync( FieldContainer &other,
00197 const BitVector &whichField);
00198 #else
00199 void executeSyncImpl( ShaderChunkBase *pOther,
00200 const BitVector &whichField,
00201 const SyncInfo &sInfo );
00202
00203 virtual void executeSync( FieldContainer &other,
00204 const BitVector &whichField,
00205 const SyncInfo &sInfo);
00206
00207 virtual void execBeginEdit (const BitVector &whichField,
00208 UInt32 uiAspect,
00209 UInt32 uiContainerSize);
00210
00211 void execBeginEditImpl (const BitVector &whichField,
00212 UInt32 uiAspect,
00213 UInt32 uiContainerSize);
00214
00215 virtual void onDestroyAspect(UInt32 uiId, UInt32 uiAspect);
00216 #endif
00217
00219
00220 private:
00221
00222 friend class FieldContainer;
00223
00224 static FieldDescription *_desc[];
00225 static FieldContainerType _type;
00226
00227
00228
00229 void operator =(const ShaderChunkBase &source);
00230 };
00231
00232
00233
00234
00235
00236
00237 typedef ShaderChunkBase *ShaderChunkBaseP;
00238
00239 typedef osgIF<ShaderChunkBase::isNodeCore,
00240 CoredNodePtr<ShaderChunk>,
00241 FieldContainer::attempt_to_create_CoredNodePtr_on_non_NodeCore_FC
00242 >::_IRet ShaderChunkNodePtr;
00243
00244 typedef RefPtr<ShaderChunkPtr> ShaderChunkRefPtr;
00245
00246 OSG_END_NAMESPACE
00247
00248 #define OSGSHADERCHUNKBASE_HEADER_CVSID "@(#)$Id: OSGShaderChunkBase.h,v 1.6 2005/07/20 00:08:58 vossg Exp $"
00249
00250 #endif