nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: nuclear@2: #ifndef __APPLE__ nuclear@2: #include nuclear@2: #else nuclear@2: #include nuclear@2: #endif nuclear@2: nuclear@2: #include "dsys2.h" nuclear@2: nuclear@2: void disp(void); nuclear@2: void draw_teapot(float sec); nuclear@2: void reshape(int x, int y); nuclear@2: void keyb(unsigned char key, int x, int y); nuclear@2: unsigned int get_ticks(void); nuclear@2: nuclear@2: struct dsys_demo *demo; nuclear@2: nuclear@2: int main(int argc, char **argv) nuclear@2: { nuclear@2: float lpos[] = {-100, 100, 100, 1}; nuclear@2: nuclear@2: glutInit(&argc, argv); nuclear@2: glutInitWindowSize(800, 600); nuclear@2: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); nuclear@2: glutCreateWindow("foo"); nuclear@2: nuclear@2: glutDisplayFunc(disp); nuclear@2: glutReshapeFunc(reshape); nuclear@2: glutKeyboardFunc(keyb); nuclear@2: glutIdleFunc(glutPostRedisplay); nuclear@2: nuclear@2: glEnable(GL_LIGHTING); nuclear@2: glEnable(GL_LIGHT0); nuclear@2: glLightfv(GL_LIGHT0, GL_POSITION, lpos); nuclear@2: nuclear@2: glEnable(GL_CULL_FACE); nuclear@2: glEnable(GL_DEPTH_TEST); nuclear@2: nuclear@2: if(!(demo = dsys_open("/dev/null"))) { nuclear@2: return 1; nuclear@2: } nuclear@2: nuclear@2: glutMainLoop(); nuclear@2: return 0; nuclear@2: } nuclear@2: nuclear@2: nuclear@2: void disp(void) nuclear@2: { nuclear@2: float sec; nuclear@2: nuclear@2: dsys_update(demo, dsys_msec_to_dtime(get_ticks())); nuclear@2: sec = dsys_dtime_to_sec(dsys_time(demo)); nuclear@2: nuclear@2: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); nuclear@2: nuclear@2: glMatrixMode(GL_MODELVIEW); nuclear@2: glLoadIdentity(); nuclear@2: glTranslatef(0, 0, -8); nuclear@2: glRotatef(30.0, 1, 0, 0); nuclear@2: nuclear@2: draw_teapot(sec); nuclear@2: nuclear@2: glutSwapBuffers(); nuclear@2: } nuclear@2: nuclear@2: void draw_teapot(float sec) nuclear@2: { nuclear@2: float dcol[] = {0.2, 0.4, 0.8, 1.0}; nuclear@2: float scol[] = {0.8, 0.8, 0.8, 1.0}; nuclear@2: nuclear@2: glPushMatrix(); nuclear@2: glRotatef(sec * 100.0, 0, 1, 0); nuclear@2: nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, dcol); nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, scol); nuclear@2: glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60.0); nuclear@2: nuclear@2: glFrontFace(GL_CW); nuclear@2: glutSolidTeapot(1.0); nuclear@2: glFrontFace(GL_CCW); nuclear@2: nuclear@2: glPopMatrix(); nuclear@2: } nuclear@2: nuclear@2: void reshape(int x, int y) nuclear@2: { nuclear@2: glViewport(0, 0, x, y); nuclear@2: nuclear@2: glMatrixMode(GL_PROJECTION); nuclear@2: glLoadIdentity(); nuclear@2: gluPerspective(45.0, (float)x / (float)y, 1.0, 1000.0); nuclear@2: } nuclear@2: nuclear@2: void keyb(unsigned char key, int x, int y) nuclear@2: { nuclear@2: switch(key) { nuclear@2: case 27: nuclear@2: exit(0); nuclear@2: nuclear@2: case ' ': nuclear@2: if(dsys_is_running(demo)) { nuclear@2: dsys_stop(demo); nuclear@2: } else { nuclear@2: dsys_start(demo); nuclear@2: } nuclear@2: break; nuclear@2: nuclear@2: default: nuclear@2: break; nuclear@2: } nuclear@2: } nuclear@2: nuclear@2: unsigned int get_ticks(void) nuclear@2: { nuclear@2: static struct timeval tv0; nuclear@2: struct timeval tv; nuclear@2: nuclear@2: gettimeofday(&tv, 0); nuclear@2: nuclear@2: if(tv0.tv_sec == 0 && tv0.tv_usec == 0) { nuclear@2: tv0 = tv; nuclear@2: } nuclear@2: return (tv.tv_sec - tv0.tv_sec) * 1000 + (tv.tv_usec - tv0.tv_usec) / 1000; nuclear@2: }