00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __COMPOSEDSHADER_H__
00030 #define __COMPOSEDSHADER_H__
00031
00032 #include "X3DShaderNode.h"
00033 #include "ShaderPart.h"
00034 #include "X3DProgrammableShaderObject.h"
00035 #include "DependentNodeFields.h"
00036
00037 namespace H3D {
00038
00059 class H3DAPI_API ComposedShader :
00060 public X3DShaderNode,
00061 public X3DProgrammableShaderObject {
00062 public:
00063
00066 typedef DependentMFNode< ShaderPart,
00067 FieldRef< X3DUrlObject,
00068 MFString,
00069 &ShaderPart::url >,
00070 true >
00071 MFShaderPart;
00072
00074 ComposedShader( Inst< DisplayList > _displayList = 0,
00075 Inst< SFNode > _metadata = 0,
00076 Inst< SFBool > _isSelected = 0,
00077 Inst< SFBool > _isValid = 0,
00078 Inst< SFBool > _activate = 0,
00079 Inst< SFString > _language = 0,
00080 Inst< MFShaderPart > _parts = 0 );
00081
00084 virtual bool addField( const string &name,
00085 const Field::AccessType &access,
00086 Field *field );
00087
00089 virtual void render();
00090
00092 virtual void preRender();
00093
00095 virtual void postRender();
00096
00102 auto_ptr< MFShaderPart > parts;
00103
00105 static H3DNodeDatabase database;
00106 protected:
00107 static bool shader_support_checked;
00108
00110 GLhandleARB program_handle;
00111
00114 vector< GLhandleARB > current_shaders;
00115 };
00116 }
00117
00118 #endif