Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

CgProgram Class Reference

A Cg program. More...

#include <Cg.h>

Inheritance diagram for CgProgram:

CgFragmentProgram CgVertexProgram List of all members.

Public Member Functions

 CgProgram ()
virtual ~CgProgram ()
void setFilename (const string &fn)
void initProfile (CGprofile p)
virtual void setup ()
 Setup, loads fragment program from harddrive.

virtual void enable ()
 Enable the fragment program.

virtual void disable ()
 Disable the fragment program.

virtual CGparameter parameter (const string &var)
 Read the handle of a parameter of the fragment program.

void setParameter (const CGparameter &p, int n, const float *v) const
void setParameter (const string &pname, int n, const float *v)

Private Attributes

CGprogram _Program
CGprofile _Profile
map< string, CGparameter > _parameters
string _filename

Detailed Description

A Cg program.

Base class for Cg fragment programs and vertex programs

Definition at line 107 of file Cg.h.


Constructor & Destructor Documentation

CgProgram::CgProgram  ) 
 

Definition at line 115 of file Cg.cpp.

References _Profile, and _Program.

00116 {
00117   // programs
00118   _Program = NULL;
00119   _Profile = (CGprofile)0xffff;
00120 }

CgProgram::~CgProgram  )  [virtual]
 

Definition at line 133 of file Cg.cpp.

References _Program.

00134 {
00135   if (_Program != NULL) {
00136     cgDestroyProgram(_Program);
00137   }
00138 }


Member Function Documentation

void CgProgram::disable  )  [virtual]
 

Disable the fragment program.

Reimplemented in CgFragmentProgram.

Definition at line 172 of file Cg.cpp.

References _Profile.

Referenced by CgFragmentProgram::disable(), and drawTorus().

00173 {
00174   // disable profile
00175   cgGLDisableProfile( _Profile );
00176 }

void CgProgram::enable  )  [virtual]
 

Enable the fragment program.

Reimplemented in CgFragmentProgram.

Definition at line 164 of file Cg.cpp.

References _Profile, and _Program.

Referenced by drawTorus(), and CgFragmentProgram::enable().

00165 {
00166   // Use fragment program
00167   cgGLEnableProfile(_Profile);
00168   cgGLBindProgram(_Program);
00169 }

void CgProgram::initProfile CGprofile  p  ) 
 

Definition at line 127 of file Cg.cpp.

References _Profile.

Referenced by CgFragmentProgram::setup(), and CgVertexProgram::setup().

00128 {
00129   _Profile = p;
00130 }

CGparameter CgProgram::parameter const string &  var  )  [virtual]
 

Read the handle of a parameter of the fragment program.

Definition at line 179 of file Cg.cpp.

References _parameters, and _Program.

Referenced by CgFragmentProgram::bindTexture(), setParameter(), and CgVertexProgram::setStateMatrixParameter().

00180 {
00181   // First try to find parameter in the map
00182   map<string, CGparameter>::const_iterator it = _parameters.find( var );
00183   if (it != _parameters.end()) {
00184     return (*it).second;
00185   }
00186   
00187   // Obtain parameter handle from Cg
00188   CGparameter p = cgGetNamedParameter(_Program, var.c_str() );
00189   if (!p) {
00190     printf( "Unable to retrieve program parameter %s, exiting.\n", var.c_str() );
00191     assert( false );
00192   }
00193   _parameters[var] = p;
00194   return p;
00195 }

void CgProgram::setFilename const string &  fn  ) 
 

Definition at line 122 of file Cg.cpp.

References _filename.

Referenced by initTorus().

00123 {
00124   _filename = fn;
00125 }

void CgProgram::setParameter const string &  pname,
int  n,
const float *  v
 

Definition at line 222 of file Cg.cpp.

References parameter(), and setParameter().

00223 {
00224   setParameter( parameter(pname), n,v );
00225 }

void CgProgram::setParameter const CGparameter &  p,
int  n,
const float *  v
const
 

Definition at line 197 of file Cg.cpp.

Referenced by drawTorus(), setParameter(), and setProgramMaterialColor().

00198 {
00199   switch( n ) {
00200   case 1:
00201     cgGLSetParameter1fv( p, v );
00202     break;
00203   case 2:
00204     cgGLSetParameter2fv( p, v );
00205     break;
00206   case 3:
00207     cgGLSetParameter3fv( p, v );
00208     break;
00209   case 4:
00210     cgGLSetParameter4fv( p, v );
00211     break;
00212   case 16:
00213     cgGLSetMatrixParameterfr( p, v );
00214     break;
00215   default:
00216     printf( "Illegal parameter length.\n" );
00217     assert( false );
00218   }
00219 }

void CgProgram::setup  )  [virtual]
 

Setup, loads fragment program from harddrive.

Also performs setup of global objects, if not already initialized

Reimplemented in CgFragmentProgram, and CgVertexProgram.

Definition at line 143 of file Cg.cpp.

References _filename, _parameters, _Profile, _Program, and Cg().

Referenced by CgFragmentProgram::setup(), and CgVertexProgram::setup().

00144 {
00145   if (_Program != NULL) {
00146     cgDestroyProgram(_Program);
00147     _Program = NULL;
00148   }
00149 
00150   _Program = cgCreateProgramFromFile(Cg()->shaderContext(),
00151                                      CG_SOURCE,
00152                                      _filename.c_str(),
00153                                      _Profile, NULL, NULL);
00154   if (_Program == NULL) {
00155     printf( "Could not create program %s\n", _filename.c_str() );
00156     assert( false );
00157   }
00158   cgGLLoadProgram(_Program);
00159   _parameters.erase( _parameters.begin(), _parameters.end() );
00160 }


Member Data Documentation

string CgProgram::_filename [private]
 

Definition at line 149 of file Cg.h.

Referenced by setFilename(), and setup().

map<string,CGparameter> CgProgram::_parameters [private]
 

Definition at line 147 of file Cg.h.

Referenced by parameter(), and setup().

CGprofile CgProgram::_Profile [private]
 

Definition at line 144 of file Cg.h.

Referenced by CgProgram(), disable(), enable(), initProfile(), and setup().

CGprogram CgProgram::_Program [private]
 

Definition at line 142 of file Cg.h.

Referenced by CgProgram(), enable(), parameter(), setup(), and ~CgProgram().


The documentation for this class was generated from the following files:
Generated on Thu Jan 20 02:47:13 2005 for Projective_Texture_Effect_Demo by doxygen 1.3.6