00001
00024 #ifndef __GOV_CG_PROGRAMS
00025 #define __GOV_CG_PROGRAMS
00026
00027 #include <string>
00028 #include <map>
00029
00030 #include <Cg/cgGL.h>
00031
00032 using namespace std;
00033
00034
00036
00042 class CgObjects* Cg();
00043
00045
00046 char* fragmentProgramDir();
00048
00049 char* vertexProgramDir();
00050
00051
00052
00053
00055
00058 void releaseCg();
00059
00061
00066 class CgObjects
00067 {
00068 public:
00069
00070
00071 CgObjects();
00072
00073 virtual ~CgObjects();
00074
00075
00076 CGprofile fragmentProfile();
00077 const CGprofile fragmentProfile() const;
00078
00079
00080 CGprofile vertexProfile();
00081 const CGprofile vertexProfile() const;
00082
00083
00084 CGcontext shaderContext();
00085 const CGcontext shaderContext() const;
00086
00087
00088 private:
00089
00090
00091 static void cgErrorCallback(void);
00092
00093
00094 CGprofile _fragmentProfile;
00095
00096 CGprofile _vertexProfile;
00097
00098 CGcontext _shaderContext;
00099 };
00100
00101
00103
00107 class CgProgram
00108 {
00109 public:
00110
00111
00112 CgProgram();
00113
00114 virtual ~CgProgram();
00115
00116
00117 void setFilename( const string &fn );
00118
00119 void initProfile( CGprofile p );
00120
00121
00123 virtual void setup();
00124
00125
00126 virtual void enable();
00127
00128 virtual void disable();
00129
00130
00131 virtual CGparameter parameter( const string &var );
00132
00133
00134 void setParameter( const CGparameter &p, int n, const float *v ) const;
00135
00136 void setParameter( const string &pname, int n, const float *v );
00137
00138
00139 private:
00140
00141
00142 CGprogram _Program;
00143
00144 CGprofile _Profile;
00145
00146
00147 map<string,CGparameter> _parameters;
00148
00149 string _filename;
00150 };
00151
00152
00153
00155 class CgFragmentProgram : public CgProgram
00156 {
00157 public:
00158
00159 CgFragmentProgram();
00160
00161 virtual ~CgFragmentProgram();
00162
00163
00165 virtual void setup();
00166
00167
00168 virtual void enable();
00169
00170 virtual void disable();
00171
00172
00173 virtual void bindTexture( const string &var, GLuint T );
00174
00175 virtual void bindTexture( const CGparameter &p, GLuint T );
00176
00177
00178 private:
00179
00180
00181 map<CGparameter,GLuint> _textures;
00182 };
00183
00184
00185
00186
00188
00189 class CgVertexProgram : public CgProgram
00190 {
00191 public:
00192
00193 CgVertexProgram();
00194
00195 virtual ~CgVertexProgram();
00196
00197
00198 virtual void setup();
00199
00200
00207 void setStateMatrixParameter( const CGparameter &p,
00208 const CGGLenum matrix,
00209 const CGGLenum transform=CG_GL_MATRIX_IDENTITY ) const;
00210
00211
00218 void setStateMatrixParameter( const string &pname,
00219 const CGGLenum matrix,
00220 const CGGLenum transform=CG_GL_MATRIX_IDENTITY );
00221 };
00222
00223
00224 #endif