nuclear@3: #include nuclear@0: #include "opengl.h" nuclear@0: #include "dicomview.h" nuclear@1: #include "rend_fast.h" nuclear@3: #include "opt.h" nuclear@3: #include "volume.h" nuclear@0: nuclear@1: static int win_width, win_height; nuclear@0: static float cam_theta, cam_phi, cam_dist = 6; nuclear@0: nuclear@1: static Renderer *rend; nuclear@3: static Volume *vol; nuclear@1: nuclear@0: extern "C" { nuclear@0: nuclear@0: int init() nuclear@0: { nuclear@3: if(!opt.fname) { nuclear@3: fprintf(stderr, "you must specify the volume data filename\n"); nuclear@1: return -1; nuclear@1: } nuclear@1: nuclear@3: switch(opt.rend_type) { nuclear@3: case REND_FAST: nuclear@3: rend = new RendererFast; nuclear@3: break; nuclear@3: default: nuclear@3: return -1; nuclear@3: } nuclear@3: nuclear@3: if(!rend->init()) { nuclear@3: fprintf(stderr, "renderer initialization failed\n"); nuclear@3: return -1; nuclear@3: } nuclear@3: nuclear@3: VoxelVolume *voxvol = new VoxelVolume; nuclear@3: if(!voxvol->load(opt.fname)) { nuclear@3: fprintf(stderr, "failed to load volume data from: %s\n", opt.fname); nuclear@3: return -1; nuclear@3: } nuclear@3: vol = voxvol; nuclear@3: rend->set_volume(vol); nuclear@3: nuclear@1: return 0; nuclear@0: } nuclear@0: nuclear@0: void cleanup() nuclear@0: { nuclear@1: rend->destroy(); nuclear@1: delete rend; nuclear@3: delete vol; nuclear@0: } nuclear@0: nuclear@0: void ev_display() nuclear@0: { nuclear@0: glClear(GL_COLOR_BUFFER_BIT); nuclear@1: nuclear@1: rend->update(0); nuclear@1: rend->render(); nuclear@0: } nuclear@0: nuclear@0: void ev_reshape(int x, int y) nuclear@0: { nuclear@0: win_width = x; nuclear@0: win_height = y; nuclear@0: nuclear@1: glViewport(0, 0, x, y); nuclear@0: } nuclear@0: nuclear@1: void ev_keyboard(int key, int press, int x, int y) nuclear@1: { nuclear@1: if(press) { nuclear@1: switch(key) { nuclear@1: case 27: nuclear@1: quit(); nuclear@1: } nuclear@1: } nuclear@1: } nuclear@1: nuclear@1: void ev_mouse_button(int bn, int press, int x, int y) nuclear@1: { nuclear@1: } nuclear@1: nuclear@1: void ev_mouse_motion(int x, int y) nuclear@1: { nuclear@1: } nuclear@0: nuclear@0: } // extern "C"