public static void Run()
{
string filePath = Path.Combine("..", "..");
string fileDirectory = "Data";
string vertexFileName = "C3E4v_twist.cg";
string fragmentFileName = "C2E2f_passthru.cg";
if (File.Exists(vertexFileName))
{
filePath = "";
fileDirectory = "";
}
else if (File.Exists(Path.Combine(fileDirectory, vertexFileName)))
{
filePath = "";
}
string myVertexProgramFileName = Path.Combine(Path.Combine(filePath, fileDirectory), vertexFileName);
string myFragmentProgramFileName = Path.Combine(Path.Combine(filePath, fileDirectory), fragmentFileName);
// Callback Delegates
keyboardDelegate += keyboard;
menuDelegate += menu;
idleDelegate += idle;
Glut.glutInitWindowSize(400, 400);
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH );
Glut.glutInit();
Glut.glutCreateWindow(myProgramName);
Glut.glutDisplayFunc(display);
Glut.glutKeyboardFunc(keyboardDelegate);
Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* White background */
myCgContext = Cg.cgCreateContext();
checkForCgError("creating context");
myCgVertexProfile = CgGl.cgGLGetLatestProfile(CgGl.CG_GL_VERTEX);
CgGl.cgGLSetOptimalOptions(myCgVertexProfile);
checkForCgError("selecting vertex profile");
myCgVertexProgram =
Cg.cgCreateProgramFromFile(
myCgContext, /* Cg runtime context */
Cg.CG_SOURCE, /* Program in human-readable form */
myVertexProgramFileName, /* Name of file containing program */
myCgVertexProfile, /* Profile: OpenGL ARB vertex program */
myVertexProgramName, /* Entry function name */
null); /* No extra compiler options */
checkForCgError("creating vertex program from file");
CgGl.cgGLLoadProgram(myCgVertexProgram);
checkForCgError("loading vertex program");
myCgVertexParam_twisting =
Cg.cgGetNamedParameter(myCgVertexProgram, "twisting");
checkForCgError("could not get twisting parameter");
myCgFragmentProfile = CgGl.cgGLGetLatestProfile(CgGl.CG_GL_FRAGMENT);
CgGl.cgGLSetOptimalOptions(myCgFragmentProfile);
checkForCgError("selecting fragment profile");
myCgFragmentProgram =
Cg.cgCreateProgramFromFile(
myCgContext, /* Cg runtime context */
Cg.CG_SOURCE, /* Program in human-readable form */
myFragmentProgramFileName, /* Name of file containing program */
myCgFragmentProfile, /* Profile: OpenGL ARB vertex program */
myFragmentProgramName, /* Entry function name */
null); /* No extra compiler options */
checkForCgError("creating fragment program from file");
CgGl.cgGLLoadProgram(myCgFragmentProgram);
checkForCgError("loading fragment program");
/* No uniform fragment program parameters expected. */
Glut.glutCreateMenu(menuDelegate);
Glut.glutAddMenuEntry("[ ] Animate", ' ');
Glut.glutAddMenuEntry("[w] Wireframe", 'w');
Glut.glutAttachMenu(Glut.GLUT_RIGHT_BUTTON);
// Change Animation to true, so that it starts with action ;-)
keyboard((byte)' ', 0, 0);
Glut.glutMainLoop();
}
#endregion Run())