nuclear@11: /* foo bar */ nuclear@0: #include nuclear@0: #include nuclear@2: #include nuclear@0: #ifndef __APPLE__ nuclear@0: #include nuclear@0: #else nuclear@0: #include nuclear@0: #endif nuclear@0: #include "imtk.h" nuclear@0: nuclear@0: void disp(void); nuclear@1: void gui(void); nuclear@0: void reshape(int x, int y); nuclear@0: void keyb(unsigned char key, int x, int y); nuclear@0: void keyb_up(unsigned char key, int x, int y); nuclear@0: void skeyb(int key, int x, int y); nuclear@0: void skeyb_up(int key, int x, int y); nuclear@0: void mouse(int bn, int state, int x, int y); nuclear@0: void motion(int x, int y); nuclear@0: nuclear@2: int xsz, ysz; nuclear@3: float angle; nuclear@4: int objsel; nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@2: float lpos[] = {-1, 1, 1, 0}; nuclear@2: float white[] = {1, 1, 1, 1}; nuclear@2: float color[] = {0.9, 0.8, 0.73, 1}; nuclear@2: nuclear@0: glutInitWindowSize(800, 600); nuclear@0: glutInit(&argc, argv); nuclear@0: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); nuclear@0: glutCreateWindow("imgui test"); nuclear@0: nuclear@0: glutDisplayFunc(disp); nuclear@0: glutReshapeFunc(reshape); nuclear@0: glutKeyboardFunc(keyb); nuclear@0: glutKeyboardUpFunc(keyb_up); nuclear@0: glutSpecialFunc(skeyb); nuclear@0: glutSpecialUpFunc(skeyb_up); nuclear@0: glutMouseFunc(mouse); nuclear@0: glutMotionFunc(motion); nuclear@0: glutPassiveMotionFunc(motion); nuclear@0: nuclear@2: glEnable(GL_DEPTH_TEST); nuclear@2: glEnable(GL_CULL_FACE); nuclear@2: glEnable(GL_LIGHTING); nuclear@2: glEnable(GL_LIGHT0); nuclear@2: glLightfv(GL_LIGHT0, GL_POSITION, lpos); nuclear@2: nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white); nuclear@2: glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60.0); nuclear@2: nuclear@0: glutMainLoop(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void disp(void) nuclear@0: { nuclear@0: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); nuclear@0: nuclear@5: glPushAttrib(GL_ENABLE_BIT); nuclear@5: glDisable(GL_LIGHTING); nuclear@5: glDisable(GL_DEPTH_TEST); nuclear@2: nuclear@2: glMatrixMode(GL_MODELVIEW); nuclear@2: glLoadIdentity(); nuclear@5: nuclear@5: glMatrixMode(GL_PROJECTION); nuclear@5: glPushMatrix(); nuclear@5: glLoadIdentity(); nuclear@5: nuclear@5: glBegin(GL_QUADS); nuclear@5: glColor3f(0.2, 0.3, 0.7); nuclear@5: glVertex2f(1, 1); nuclear@5: glVertex2f(-1, 1); nuclear@5: glColor3f(0.7, 0.3, 0.2); nuclear@5: glVertex2f(-1, -1); nuclear@5: glVertex2f(1, -1); nuclear@5: glEnd(); nuclear@5: nuclear@5: glPopMatrix(); nuclear@5: glMatrixMode(GL_MODELVIEW); nuclear@5: nuclear@5: glPopAttrib(); nuclear@5: nuclear@2: glTranslatef(0, 0, -8); nuclear@2: glRotatef(25, 1, 0, 0); nuclear@3: glRotatef(angle, 0, 1, 0); nuclear@2: nuclear@4: switch(objsel) { nuclear@4: case 0: nuclear@4: glFrontFace(GL_CW); nuclear@4: glutSolidTeapot(1.0); nuclear@4: glFrontFace(GL_CCW); nuclear@4: break; nuclear@4: nuclear@4: case 1: nuclear@4: glutSolidTorus(0.5, 1, 12, 24); nuclear@4: break; nuclear@4: nuclear@4: case 2: nuclear@4: glutSolidSphere(1.0, 24, 12); nuclear@4: break; nuclear@4: nuclear@4: default: nuclear@4: break; nuclear@4: } nuclear@2: nuclear@2: nuclear@1: gui(); nuclear@1: nuclear@1: glutSwapBuffers(); nuclear@2: assert(glGetError() == GL_NO_ERROR); nuclear@1: } nuclear@1: nuclear@1: void gui(void) nuclear@1: { nuclear@8: static int bnshow = 1; nuclear@2: static char textbuf[256]; nuclear@2: static char textbuf2[256]; nuclear@3: static float val; nuclear@4: static int prev_sel; nuclear@4: char *itemlist; nuclear@1: nuclear@0: imtk_begin(); nuclear@0: nuclear@2: if(imtk_button(IMUID, "red", 30, 50)) { nuclear@2: float color[] = {1, 0.4, 0.3, 1}; nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); nuclear@2: glutPostRedisplay(); nuclear@0: } nuclear@4: if(imtk_button(IMUID, "blue", 30, 80)) { nuclear@2: float color[] = {0.3, 0.4, 1, 1}; nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); nuclear@2: glutPostRedisplay(); nuclear@1: } nuclear@1: nuclear@4: itemlist = imtk_create_list("teapot", "torus", "sphere", NULL); nuclear@4: if((objsel = imtk_listbox(IMUID, itemlist, prev_sel, 30, 120)) != prev_sel) { nuclear@4: prev_sel = objsel; nuclear@4: glutPostRedisplay(); nuclear@4: } nuclear@4: imtk_free_list(itemlist); nuclear@4: nuclear@2: imtk_textbox(IMUID, textbuf, sizeof textbuf, 30, 200); nuclear@2: imtk_textbox(IMUID, textbuf2, sizeof textbuf2, 30, 250); nuclear@2: nuclear@2: if((bnshow = imtk_checkbox(IMUID, "show hidden button", 30, 300, bnshow))) { nuclear@2: if(imtk_button(IMUID, "yellow", 50, 340)) { nuclear@2: float color[] = {0.8, 0.75, 0.3, 1}; nuclear@2: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); nuclear@2: glutPostRedisplay(); nuclear@1: } nuclear@1: } nuclear@0: nuclear@3: val = imtk_slider(IMUID, angle, 0.0, 360.0, 30, 390); nuclear@3: if(val != angle) { nuclear@3: angle = val; nuclear@3: glutPostRedisplay(); nuclear@3: } nuclear@3: nuclear@3: imtk_progress(IMUID, val / 360.0, 30, 420); nuclear@3: nuclear@2: if(imtk_button(IMUID, "Quit", 30, 500)) { nuclear@2: exit(0); nuclear@2: } nuclear@2: nuclear@0: imtk_end(); nuclear@0: } nuclear@0: nuclear@0: void reshape(int x, int y) nuclear@0: { nuclear@2: xsz = x; nuclear@2: ysz = y; nuclear@2: nuclear@0: glViewport(0, 0, x, y); nuclear@5: imtk_inp_reshape(x, y); nuclear@5: nuclear@5: glMatrixMode(GL_PROJECTION); nuclear@5: glLoadIdentity(); nuclear@5: gluPerspective(45.0, (float)x / (float)y, 1.0, 1000.0); nuclear@0: } nuclear@0: nuclear@0: void keyb(unsigned char key, int x, int y) nuclear@0: { nuclear@0: switch(key) { nuclear@0: case 27: nuclear@0: exit(0); nuclear@0: nuclear@0: default: nuclear@0: break; nuclear@0: } nuclear@0: nuclear@0: imtk_inp_key(key, IMTK_DOWN); nuclear@0: } nuclear@0: nuclear@0: void keyb_up(unsigned char key, int x, int y) nuclear@0: { nuclear@0: imtk_inp_key(key, IMTK_UP); nuclear@0: } nuclear@0: nuclear@0: void skeyb(int key, int x, int y) nuclear@0: { nuclear@0: imtk_inp_key(key, IMTK_DOWN); nuclear@0: } nuclear@0: nuclear@0: void skeyb_up(int key, int x, int y) nuclear@0: { nuclear@0: imtk_inp_key(key, IMTK_UP); nuclear@0: } nuclear@0: nuclear@0: void mouse(int bn, int state, int x, int y) nuclear@0: { nuclear@0: imtk_inp_mouse(bn, state == GLUT_DOWN ? IMTK_DOWN : IMTK_UP); nuclear@0: } nuclear@0: nuclear@0: void motion(int x, int y) nuclear@0: { nuclear@0: imtk_inp_motion(x, y); nuclear@0: }