int main(int argc, char** argv) { /* Initialize GLUT and GLEW */ kuhl_ogl_init(&argc, argv, 512, 512, 32, GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE, 4); // setup callbacks glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* Compile and link a GLSL program composed of a vertex shader and * a fragment shader. */ program = kuhl_create_program("triangle.vert", "triangle.frag"); glUseProgram(program); kuhl_errorcheck(); /* Set the uniform variable in the shader that is named "red" to the value 1. */ glUniform1i(kuhl_get_uniform("red"), 1); kuhl_errorcheck(); /* Good practice: Unbind objects until we really need them. */ glUseProgram(0); /* Create kuhl_geometry structs for the objects that we want to * draw. */ init_geometryTriangle(&triangle, program); init_geometryQuad(&quad, program); prerendProgram = kuhl_create_program("prerend.vert", "prerend.frag"); init_geometryQuadPrerender(&prerendQuad, prerendProgram); dgr_init(); /* Initialize DGR based on environment variables. */ projmat_init(); /* Figure out which projection matrix we should use based on environment variables */ float initCamPos[3] = {0,0,3}; // location of camera float initCamLook[3] = {0,0,0}; // a point the camera is facing at float initCamUp[3] = {0,1,0}; // a vector indicating which direction is up viewmat_init(initCamPos, initCamLook, initCamUp); /* Tell GLUT to start running the main loop and to call display(), * keyboard(), etc callback methods as needed. */ glutMainLoop(); /* // An alternative approach: while(1) glutMainLoopEvent(); */ exit(EXIT_SUCCESS); }
int main(int argc, char** argv) { /* set up our GLUT window */ glutInit(&argc, argv); glutInitWindowSize(512, 512); /* Ask GLUT to for a double buffered, full color window that * includes a depth buffer */ #ifdef __APPLE__ glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); #else glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitContextVersion(3,2); glutInitContextProfile(GLUT_CORE_PROFILE); #endif glutCreateWindow(argv[0]); // set window title to executable name /* Initialize GLEW */ glewExperimental = GL_TRUE; GLenum glewError = glewInit(); if(glewError != GLEW_OK) { fprintf(stderr, "Error initializing GLEW: %s\n", glewGetErrorString(glewError)); exit(EXIT_FAILURE); } /* When experimental features are turned on in GLEW, the first * call to glGetError() or kuhl_errorcheck() may incorrectly * report an error. So, we call glGetError() to ensure that a * later call to glGetError() will only see correct errors. For * details, see: * http://www.opengl.org/wiki/OpenGL_Loading_Library */ glGetError(); // setup callbacks glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* Compile and link a GLSL program composed of a vertex shader and * a fragment shader. */ program = kuhl_create_program("ogl3-triangle.vert", "ogl3-triangle.frag"); glUseProgram(program); kuhl_errorcheck(); /* Set the uniform variable in the shader that is named "red" to the value 1. */ glUniform1i(kuhl_get_uniform("red"), 1); kuhl_errorcheck(); /* Good practice: Unbind objects until we really need them. */ glUseProgram(0); /* Create kuhl_geometry structs for the objects that we want to * draw. */ init_geometryTriangle(&triangle, program); init_geometryQuad(&quad, program); dgr_init(); /* Initialize DGR based on environment variables. */ projmat_init(); /* Figure out which projection matrix we should use based on environment variables */ float initCamPos[3] = {0,0,10}; // location of camera float initCamLook[3] = {0,0,0}; // a point the camera is facing at float initCamUp[3] = {0,1,0}; // a vector indicating which direction is up viewmat_init(initCamPos, initCamLook, initCamUp); /* Tell GLUT to start running the main loop and to call display(), * keyboard(), etc callback methods as needed. */ glutMainLoop(); /* // An alternative approach: while(1) glutMainLoopEvent(); */ exit(EXIT_SUCCESS); }