CrtInt CrtRender::LoadCgProgram( CrtChar * fileName, const CrtInt programType ) { CrtChar fullFileName[CRT_MAX_NAME_SIZE]; sprintf(fullFileName, "%s%s", ShaderFilePrefix, fileName ); //CrtCpy( fullFileName, fileName ); CrtPrint("CrtRender::LoadCgProgram: Loading %s Shader From File \n", fileName ); // Load And Compile The Vertex Shader From File if ( programType == CrtFragmentProgram ) cgPrograms[NumCgPrograms] = cgCreateProgramFromFile(cgContext, CG_SOURCE, fullFileName, cgFragmentProfile, "main", 0); else 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[100]; sprintf(buff,"CrtRender::LoadCgProgram: Failed Compile CgFile %s \n", fileName ); MessageBox(NULL, buff, "Cg Compile Error", MB_OK ); return -1; } cgGLLoadProgram(cgPrograms[NumCgPrograms]); NumCgPrograms ++; return NumCgPrograms - 1; }
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; }
CrtBool CrtInitCg() { // Create a context for the CG programs we are going to load and validate it was successful CrtPrint("Creating CG context\n"); cgContext = cgCreateContext(); if (cgContext == NULL) { // BLahhh exit here MessageBox(NULL, "Failed To Create Cg Context", "Error", MB_OK); return CrtFalse; } // cgSetAutoCompile(cgContext, CG_COMPILE_MANUAL); // Register GL states (ugly crashes if you don't do this) cgGLRegisterStates(cgContext); // Get The Latest GL Vertex Profile cgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX); cgFragmentProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); // Validate Our Profile Determination Was Successful if (cgVertexProfile == CG_PROFILE_UNKNOWN || cgFragmentProfile == CG_PROFILE_UNKNOWN) { MessageBox(NULL, "Invalid profile type", "Error", MB_OK); return CrtFalse; } // Set The Current Profile cgGLSetOptimalOptions(cgVertexProfile); cgGLSetOptimalOptions(cgFragmentProfile); // Check for errors if(!CrtCheckForCgError()) return CrtFalse; return CrtTrue; }
CrtBool CrtInitCg() { CrtPrint("creating CG context\n"); cgContext = cgCreateContext(); if(cgContext == NULL) { printf("Failed to create CG context\n"); return CrtFalse; } // Register GL states cgGLRegisterStates(cgContext); // Get the latest GL Vertex Profile cgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX); // Was hardcoded to CG_PROFILE_SCE_VP_TYPEB cgFragmentProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); // Was hardcoded to CG_PROFILE_SCE_FP_TYPEB // Make sure the profiles came back valid if(cgVertexProfile == CG_PROFILE_UNKNOWN || cgFragmentProfile == CG_PROFILE_UNKNOWN) { CrtPrint("Invalid profile type returned from cgGLGetLatestProfile\n"); return CrtFalse; } // Set Optimal Options for this profile cgGLSetOptimalOptions(cgVertexProfile); cgGLSetOptimalOptions(cgFragmentProfile); // Check for Cg errors if ( !CrtCheckForCgError() ) return CrtFalse; CrtPrint("CG context created\n"); return CrtTrue; }