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 __SHADERPROGRAM_H__
00030 #define __SHADERPROGRAM_H__
00031
00032 #include "X3DNode.h"
00033 #include "X3DUrlObject.h"
00034 #include "X3DProgrammableShaderObject.h"
00035 #include "H3DDisplayListObject.h"
00036 #include "SFString.h"
00037
00038 #ifdef HAVE_CG
00039 #include <GL/glew.h>
00040 #include <Cg/cg.h>
00041 #include <Cg/cgGL.h>
00042 #endif
00043
00044 namespace H3D {
00045
00060 class H3DAPI_API ShaderProgram :
00061 public X3DNode,
00062 public X3DUrlObject,
00063 public X3DProgrammableShaderObject,
00064 public H3DDisplayListObject {
00065 public:
00066
00068 ShaderProgram( Inst< SFNode > _metadata = 0,
00069 Inst< DisplayList > _displayList = 0,
00070 Inst< MFString > _url = 0,
00071 Inst< SFString > _type = 0 );
00072
00073 #ifdef HAVE_CG
00074
00075 virtual ~ShaderProgram();
00076
00078 virtual void enableCGShaderProgram();
00079
00081 virtual void disableCGShaderProgram();
00082
00084 virtual void initCGShaderProgram();
00085
00087 virtual void destroyCGShaderProgram();
00088
00092 virtual void setCGProfile( const string &profile );
00093
00095 virtual void render();
00096
00099 virtual bool addField( const string &name,
00100 const Field::AccessType &access,
00101 Field *field );
00102 #endif
00103
00106 virtual string defaultXMLContainerField() {
00107 return "programs";
00108 }
00109
00116 auto_ptr< SFString > type;
00117
00119 static H3DNodeDatabase database;
00120
00121 protected:
00122 #ifdef HAVE_CG
00123 CGprofile cg_profile;
00124 CGcontext cg_context;
00125 CGprogram cg_program;
00126 string cg_profile_string;
00127 string source_url;
00128 #endif
00129 };
00130 }
00131
00132 #endif
00133