CrtInt CrtRender::LoadCgProgram( CrtChar * fileName, const CrtInt programType ) { CrtChar fullFileName[CRT_MAX_NAME_SIZE]; CrtCpy( fullFileName, ShaderFilePrefix ); CrtCat( fullFileName, fileName ); CrtPrint(" Loading %s Shader From Binary \n", fullFileName ); // get the name extention CrtChar * ext = CrtGetExtention( fullFileName ); if ( !CrtCmpIn( ext, ".cg" ) && !CrtCmpIn( ext, ".CG" ) ) { CrtPrint("CrtRender::LoadCgProgram: Invalid File Name %s \n", fullFileName ); return -1; } // Load And Compile The Vertex Shader From File if ( programType == CrtFragmentProgram ) { CrtCpy( ext, ".cg" ); cgPrograms[NumCgPrograms] = cgCreateProgramFromFile(cgContext, CG_SOURCE, fullFileName, cgFragmentProfile, NULL, NULL); } else { CrtCpy( ext, ".cg" ); cgPrograms[NumCgPrograms] = cgCreateProgramFromFile(cgContext, CG_SOURCE, fullFileName, cgVertexProfile, "main", 0); } // Validate Success if (cgPrograms[NumCgPrograms] == NULL) { // Check for a Cg Error, If So switch to FixedFunction if ( ! CrtCheckForCgError() ) return -1; // failed to load CgShader CrtChar buff[CRT_MAX_NAME_SIZE]; sprintf(buff," Shader Load Failed %s \n", fileName ); return -1; } CrtPrint(" Shader ID %d \n", cgPrograms[NumCgPrograms] ); cgGLLoadProgram(cgPrograms[NumCgPrograms]); NumCgPrograms ++; return NumCgPrograms - 1; }
CrtVoid CrtInitPaths() { CrtCpy( ShaderFilePrefix, "shaders/advanced/" ); CrtCpy( TextureFilePrefix, "images/" ); }