//Called after the window and OpenGL are initialized. Called exactly once, before the main loop. void init() { tasks.push_back(new TaskOne()); tasks.push_back(new TaskTwo()); tasks.push_back(new TaskThree()); tasks.push_back(new TaskFour()); tasks.push_back(new BonusTask()); // initialize all our new tasks for (TaskVector::iterator it = tasks.begin(); it != tasks.end(); it++) { ITask* task = (*it); task->InitializeProgram(); task->Initialize(); } currentTaskNumber = 0; ITask* currentTask = tasks[currentTaskNumber]; if (currentTask != NULL) { currentTask->InitializeProgram(); } glCullFace(GL_BACK); // only back faces will be culled, if enabled glClearColor(0.3f, 0.3f, 0.3f, 1.0f); // color for cleaning the screen }
//Called whenever a key on the keyboard was pressed. //The key is given by the ''key'' parameter, which is in ASCII. //It's often a good idea to have the escape key (ASCII value 27) call glutLeaveMainLoop() to //exit the program. void myKeyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; case ' ': currentTaskNumber = (currentTaskNumber + 1) % tasks.size(); ITask* currentTask = tasks[currentTaskNumber]; if (currentTask != NULL) { currentTask->InitializeProgram(); printf("Current Task = %s\n", currentTask->ToString()); } break; } glutPostRedisplay(); // Nutno, kdybychom nevolali prekresleni casovacem ci Idle }
void myMenu(int item) { switch (item) { case 1: case 2: case 3: case 4: case 5: { currentTaskNumber = item - 1; ITask* currentTask = tasks[currentTaskNumber]; if (currentTask != NULL) { currentTask->InitializeProgram(); printf("Current Task = %s\n", currentTask->ToString()); } } break; case 10: spinFlag = !spinFlag; if (spinFlag) { glutTimerFunc(TIMER_STEP, FuncTimerCallback, 0); } break; case 11: cullFlag = !cullFlag; glutPostRedisplay(); break; case 12: lineModeFlag = !lineModeFlag; glutPostRedisplay(); break; case 99: exit(0); break; // never reached } glutPostRedisplay(); // Nutno, kdybychom nevolali prekresleni casovacem ci Idle }