glviewvol

annotate src/dicomview.cc @ 3:32c4a7160350

den kanei kryo stin ellada
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 28 Dec 2014 21:48:15 +0200
parents cc9e0d8590e2
children 04330eb80b36
rev   line source
nuclear@3 1 #include <stdio.h>
nuclear@0 2 #include "opengl.h"
nuclear@0 3 #include "dicomview.h"
nuclear@1 4 #include "rend_fast.h"
nuclear@3 5 #include "opt.h"
nuclear@3 6 #include "volume.h"
nuclear@0 7
nuclear@1 8 static int win_width, win_height;
nuclear@0 9 static float cam_theta, cam_phi, cam_dist = 6;
nuclear@0 10
nuclear@1 11 static Renderer *rend;
nuclear@3 12 static Volume *vol;
nuclear@1 13
nuclear@0 14 extern "C" {
nuclear@0 15
nuclear@0 16 int init()
nuclear@0 17 {
nuclear@3 18 if(!opt.fname) {
nuclear@3 19 fprintf(stderr, "you must specify the volume data filename\n");
nuclear@1 20 return -1;
nuclear@1 21 }
nuclear@1 22
nuclear@3 23 switch(opt.rend_type) {
nuclear@3 24 case REND_FAST:
nuclear@3 25 rend = new RendererFast;
nuclear@3 26 break;
nuclear@3 27 default:
nuclear@3 28 return -1;
nuclear@3 29 }
nuclear@3 30
nuclear@3 31 if(!rend->init()) {
nuclear@3 32 fprintf(stderr, "renderer initialization failed\n");
nuclear@3 33 return -1;
nuclear@3 34 }
nuclear@3 35
nuclear@3 36 VoxelVolume *voxvol = new VoxelVolume;
nuclear@3 37 if(!voxvol->load(opt.fname)) {
nuclear@3 38 fprintf(stderr, "failed to load volume data from: %s\n", opt.fname);
nuclear@3 39 return -1;
nuclear@3 40 }
nuclear@3 41 vol = voxvol;
nuclear@3 42 rend->set_volume(vol);
nuclear@3 43
nuclear@1 44 return 0;
nuclear@0 45 }
nuclear@0 46
nuclear@0 47 void cleanup()
nuclear@0 48 {
nuclear@1 49 rend->destroy();
nuclear@1 50 delete rend;
nuclear@3 51 delete vol;
nuclear@0 52 }
nuclear@0 53
nuclear@0 54 void ev_display()
nuclear@0 55 {
nuclear@0 56 glClear(GL_COLOR_BUFFER_BIT);
nuclear@1 57
nuclear@1 58 rend->update(0);
nuclear@1 59 rend->render();
nuclear@0 60 }
nuclear@0 61
nuclear@0 62 void ev_reshape(int x, int y)
nuclear@0 63 {
nuclear@0 64 win_width = x;
nuclear@0 65 win_height = y;
nuclear@0 66
nuclear@1 67 glViewport(0, 0, x, y);
nuclear@0 68 }
nuclear@0 69
nuclear@1 70 void ev_keyboard(int key, int press, int x, int y)
nuclear@1 71 {
nuclear@1 72 if(press) {
nuclear@1 73 switch(key) {
nuclear@1 74 case 27:
nuclear@1 75 quit();
nuclear@1 76 }
nuclear@1 77 }
nuclear@1 78 }
nuclear@1 79
nuclear@1 80 void ev_mouse_button(int bn, int press, int x, int y)
nuclear@1 81 {
nuclear@1 82 }
nuclear@1 83
nuclear@1 84 void ev_mouse_motion(int x, int y)
nuclear@1 85 {
nuclear@1 86 }
nuclear@0 87
nuclear@0 88 } // extern "C"