nuclear@12: /* nuclear@12: glviewvol is an OpenGL 3D volume data viewer nuclear@12: Copyright (C) 2014 John Tsiombikas nuclear@12: nuclear@12: This program is free software: you can redistribute it and/or modify nuclear@12: it under the terms of the GNU General Public License as published by nuclear@12: the Free Software Foundation, either version 3 of the License, or nuclear@12: (at your option) any later version. nuclear@12: nuclear@12: This program is distributed in the hope that it will be useful, nuclear@12: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@12: GNU General Public License for more details. nuclear@12: nuclear@12: You should have received a copy of the GNU General Public License nuclear@12: along with this program. If not, see . nuclear@12: */ nuclear@0: // GLUT frontend nuclear@0: #ifdef USE_GLUT nuclear@0: nuclear@0: #include nuclear@0: #include "opengl.h" nuclear@0: nuclear@0: #ifdef __APPLE__ nuclear@0: #include nuclear@0: #else nuclear@0: #include nuclear@0: #endif nuclear@0: nuclear@11: #include "viewer.h" nuclear@3: #include "opt.h" nuclear@0: nuclear@0: static void display(); nuclear@0: static void reshape(int x, int y); nuclear@0: static void key_down(unsigned char key, int x, int y); nuclear@0: static void key_up(unsigned char key, int x, int y); nuclear@0: static void mouse(int bn, int state, int x, int y); nuclear@0: static void motion(int x, int y); nuclear@0: nuclear@4: static int win_width, win_height; nuclear@7: static unsigned int mod; nuclear@4: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@0: glutInit(&argc, argv); nuclear@3: nuclear@3: if(parse_args(argc, argv) == -1) { nuclear@3: return 1; nuclear@3: } nuclear@3: nuclear@6: glutInitWindowSize(opt.xsz, opt.ysz); nuclear@0: glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); nuclear@0: glutCreateWindow("dicom viewer"); nuclear@0: nuclear@0: glutDisplayFunc(display); nuclear@0: glutReshapeFunc(reshape); nuclear@1: glutKeyboardFunc(key_down); nuclear@1: glutKeyboardUpFunc(key_up); nuclear@0: glutMouseFunc(mouse); nuclear@0: glutMotionFunc(motion); nuclear@7: glutPassiveMotionFunc(motion); nuclear@0: nuclear@0: glewInit(); nuclear@0: nuclear@0: if(init() == -1) { nuclear@0: return 1; nuclear@0: } nuclear@0: nuclear@0: glutMainLoop(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void swap_buffers() nuclear@0: { nuclear@0: glutSwapBuffers(); nuclear@0: } nuclear@0: nuclear@0: void redisplay() nuclear@0: { nuclear@0: glutPostRedisplay(); nuclear@0: } nuclear@0: nuclear@0: void quit() nuclear@0: { nuclear@0: cleanup(); nuclear@0: exit(0); nuclear@0: } nuclear@0: nuclear@4: void get_window_size(int *xsz, int *ysz) nuclear@4: { nuclear@4: *xsz = win_width; nuclear@4: *ysz = win_height; nuclear@4: } nuclear@4: nuclear@7: unsigned int get_modifiers() nuclear@7: { nuclear@7: return mod; nuclear@7: } nuclear@7: nuclear@0: static void display() nuclear@0: { nuclear@0: ev_display(); nuclear@0: } nuclear@0: nuclear@0: static void reshape(int x, int y) nuclear@0: { nuclear@4: win_width = x; nuclear@4: win_height = y; nuclear@0: ev_reshape(x, y); nuclear@0: } nuclear@0: nuclear@0: static void key_down(unsigned char key, int x, int y) nuclear@0: { nuclear@7: mod = glutGetModifiers(); nuclear@8: nuclear@8: switch(key) { nuclear@8: case 'i': nuclear@8: { nuclear@8: static bool fullrate; nuclear@8: fullrate = !fullrate; nuclear@8: glutIdleFunc(fullrate ? glutPostRedisplay : 0); nuclear@8: } nuclear@8: break; nuclear@8: } nuclear@8: nuclear@0: ev_keyboard(key, 1, x, y); nuclear@0: } nuclear@0: nuclear@0: static void key_up(unsigned char key, int x, int y) nuclear@0: { nuclear@7: mod = glutGetModifiers(); nuclear@0: ev_keyboard(key, 0, x, y); nuclear@0: } nuclear@0: nuclear@0: static void mouse(int bn, int state, int x, int y) nuclear@0: { nuclear@7: mod = glutGetModifiers(); nuclear@0: ev_mouse_button(bn - GLUT_LEFT_BUTTON, state == GLUT_DOWN ? 1 : 0, x, y); nuclear@0: } nuclear@0: nuclear@0: static void motion(int x, int y) nuclear@0: { nuclear@0: ev_mouse_motion(x, y); nuclear@0: } nuclear@0: nuclear@0: #endif // USE_GLUT