Commit 649a5e3459e07375283e53fc4ba9221e81acf199

Authored by David Mayerich
1 parent c184655c

implemented display lists for interactive rendering of stim::gl_network

Showing 1 changed file with 21 additions and 9 deletions   Show diff stats
stim/visualization/gl_network.h
... ... @@ -13,13 +13,19 @@ protected:
13 13 using stim::network<T>::E;
14 14 using stim::network<T>::V;
15 15  
  16 + GLuint dlist;
  17 +
16 18 public:
17 19  
18 20 /// Default constructor
19   - gl_network() : stim::network<T>(){}
  21 + gl_network() : stim::network<T>(){
  22 + dlist = 0;
  23 + }
20 24  
21 25 /// Constructor creates a gl_network from a stim::network
22   - gl_network(stim::network<T> N) : stim::network<T>(N){}
  26 + gl_network(stim::network<T> N) : stim::network<T>(N){
  27 + dlist = 0;
  28 + }
23 29  
24 30 /// Fills the parameters with the minimum and maximum spatial positions in the network,
25 31 /// specifying a bounding box for the network geometry
... ... @@ -40,14 +46,20 @@ public:
40 46 /// Render the network centerline as a series of line strips.
41 47 void glCenterline(){
42 48  
43   - for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network
44   - glBegin(GL_LINE_STRIP);
45   - for(unsigned p = 0; p < E[e].size(); p++){ //for each point on that edge
46   - glVertex3f(E[e][p][0], E[e][p][1], E[e][p][2]);
47   - glTexCoord1f(E[e].ri(p));
  49 + if(!glIsList(dlist)){ //if dlist isn't a display list, create it
  50 + dlist = glGenLists(1); //generate a display list
  51 + glNewList(dlist, GL_COMPILE); //start a new display list
  52 + for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network
  53 + glBegin(GL_LINE_STRIP);
  54 + for(unsigned p = 0; p < E[e].size(); p++){ //for each point on that edge
  55 + glVertex3f(E[e][p][0], E[e][p][1], E[e][p][2]);
  56 + glTexCoord1f(E[e].ri(p));
  57 + }
  58 + glEnd();
48 59 }
49   - glEnd();
50   - }
  60 + glEndList(); //end the display list
  61 + }
  62 + glCallList(dlist); // render the display list
51 63  
52 64 }
53 65  
... ...