/************************************ ** cg_init.cpp ** ** ---------- ** ** ** ** Initializes and sets up various ** ** CG shader stuff for OpenGL... ** ** ** ** Chris Wyman (1/6/2003) ** ************************************/ #include "cg_init.h" /* initialize the program structures */ /* --------------------------------- */ /* If you want to change the files storing your shaders, change them here. */ /* If you want to add more CG programs, change the number in the template header, add them here. */ shader cgProgram[NUM_CG_PROGRAMS] = { /* 0 */ { "testVertexShader.cg", GL_VERTEX_PROGRAM_ARB, 0, 0, NULL }, /* 1 */ { "testFragmentShader.cg", GL_FRAGMENT_PROGRAM_ARB, 0, 0, NULL }, /* 2 */ { "displayDepth.Frag.cg", GL_FRAGMENT_PROGRAM_ARB, 0, 0, NULL }, }; CGData cgData; int SetCGParameterv( int progNum, char *paramName, int arraySize, float *array ) { CGparameter paramPtr = cgGetNamedParameter( cgData.programs[progNum], paramName ); if (paramPtr==0) return 0; switch( arraySize ) { case 1: cgGLSetParameter1fv( paramPtr, array ); break; case 2: cgGLSetParameter2fv( paramPtr, array ); break; case 3: cgGLSetParameter3fv( paramPtr, array ); break; case 4: cgGLSetParameter4fv( paramPtr, array ); break; default: printf("Error: SetCGParameterv should have an arraySize in the range [1-4]!"); return 0; } return 1; } int SetCGParameter( int progNum, char *paramName, float x, float y, float z, float w ) { float tmp[4] = {x, y, z, w}; return SetCGParameterv( progNum, paramName, 4, tmp ); } /* call before using a program to set the GL state */ void BindCGProgram( int progNum ) { cgGLEnableProfile( cgData.programType[progNum] ); cgGLBindProgram( cgData.programs[progNum] ); } /* call after finishing with a program to unset GL state */ void UnbindCGProgram( int progNum ) { cgGLDisableProfile( cgData.programType[progNum] ); } /* double-check required extensions, load shaders, and double check that */ /* they're valid and we have sufficient resources */ int ReloadCGShaders( void ) { int i; int readError = 0; for (i=0;i 0 ? 1 : 0); } /* double-check required extensions, load shaders, and double check that */ /* they're valid and we have sufficient resources */ void InitCGPrograms( void ) { int i; int readErrors=0; cgData.shaderContext = cgCreateContext(); cgData.vertProfile = cgGLGetLatestProfile( CG_GL_VERTEX ); cgData.fragProfile = cgGLGetLatestProfile( CG_GL_FRAGMENT ); cgGLSetOptimalOptions( cgData.vertProfile ); cgGLSetOptimalOptions( cgData.fragProfile ); for (i=0;i