Commit 0904986669fb04c2dbfd26d7027ff59528ec9137

Authored by Pavel Govyadinov
1 parent 7f297fc6

fixed a drawing bug: unstable, still a segfault because an array is getting overwritten

Showing 2 changed files with 59 additions and 10 deletions   Show diff stats
stim/gl/gl_spider.h
... ... @@ -603,6 +603,36 @@ class gl_spider // : public virtual gl_texture<T>
603 603  
604 604 ///Method for controling the buffer and texture binding.
605 605 ///Clears the buffer upon binding.
  606 + void
  607 + Bind()
  608 + {
  609 + glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID);//set up GL buffer
  610 + glFramebufferTexture2D(
  611 + GL_FRAMEBUFFER,
  612 + GL_COLOR_ATTACHMENT0,
  613 + GL_TEXTURE_2D,
  614 + direction_texID,
  615 + 0);
  616 + glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID);
  617 + GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
  618 + glDrawBuffers(1, DrawBuffers);
  619 + glBindTexture(GL_TEXTURE_2D, direction_texID);
  620 + glClearColor(1,1,1,1);
  621 + glClear(GL_COLOR_BUFFER_BIT);
  622 + glMatrixMode(GL_PROJECTION);
  623 + glLoadIdentity();
  624 + glMatrixMode(GL_MODELVIEW);
  625 + glLoadIdentity();
  626 + glViewport(0,0,2.0*n_pixels, numSamples*n_pixels);
  627 + gluOrtho2D(0.0,2.0*n_pixels,0.0,numSamples*n_pixels);
  628 + glEnable(GL_TEXTURE_3D);
  629 + glBindTexture(GL_TEXTURE_3D, texID);
  630 +
  631 + CHECK_OPENGL_ERROR
  632 + }
  633 +
  634 + ///Method for controling the buffer and texture binding.
  635 + ///Clears the buffer upon binding.
606 636 ///@param GLuint &textureID, texture to be bound.
607 637 ///@param GLuint &framebufferID, framebuffer used for storage.
608 638 ///@param int nSamples, number of rectanges to create.
... ... @@ -800,7 +830,7 @@ class gl_spider // : public virtual gl_texture<T>
800 830 CHECK_OPENGL_ERROR
801 831 GenerateFBO(16, 216, cylinder_texID, cylinder_buffID);
802 832 CHECK_OPENGL_ERROR
803   - t_dir.MapCudaTexture(texbufferID, GL_TEXTURE_2D);
  833 + t_dir.MapCudaTexture(direction_texID, GL_TEXTURE_2D);
804 834 t_dir.Alloc(numSamples);
805 835 t_pos.MapCudaTexture(position_texID, GL_TEXTURE_2D);
806 836 t_pos.Alloc(numSamplesPos);
... ... @@ -819,7 +849,7 @@ class gl_spider // : public virtual gl_texture<T>
819 849 genMagnitudeVectors();
820 850 Unbind();
821 851 Bind(cylinder_texID, cylinder_buffID, 27);
822   - DrawCylinder();
  852 +// DrawCylinder();
823 853 Unbind();
824 854 }
825 855  
... ... @@ -841,7 +871,7 @@ class gl_spider // : public virtual gl_texture<T>
841 871 }
842 872  
843 873 ///Returns the m vector.
844   - stim::vec<float>
  874 + float
845 875 getMagnitude()
846 876 {
847 877 return m;
... ... @@ -1190,6 +1220,7 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1190 1220 int
1191 1221 Step()
1192 1222 {
  1223 + std::cerr << "Took a step" << std::endl;
1193 1224 Bind(direction_texID, direction_buffID, numSamples, n_pixels);
1194 1225 CHECK_OPENGL_ERROR
1195 1226 findOptimalDirection();
... ... @@ -1336,16 +1367,15 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1336 1367 seeds.pop();
1337 1368 seedsvecs.pop();
1338 1369 seedsmags.pop();
1339   -// std::cout << "The current seed Vector is " << curSeedVec << std::endl;
1340 1370 setPosition(curSeed);
1341 1371 setDirection(curSeedVec);
1342 1372 setMagnitude(curSeedMag);
1343   - std::cout << "This was done" << std::endl;
1344 1373 findOptimalScale();
1345 1374  
1346 1375 // cL.push_back(curSeed);
1347 1376 // cM.push_back(curSeedMag);
1348 1377 // cD.push_back(curSeedMag);
  1378 + std::cout << p << m << std::endl;
1349 1379 traceLine(p, m, min_cost);
1350 1380 }
1351 1381 }
... ... @@ -1504,14 +1534,14 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1504 1534 }
1505 1535 */
1506 1536 void
1507   - addToNetwork(std::vector<stim::vec3<float> > L, std::vector<stim::vec<float> > M)
  1537 + addToNetwork(std::vector<stim::vec3<float> > L, std::vector<float > M)
1508 1538 {
1509 1539 if(L.size() > 3)
1510 1540 {
1511 1541 sk.Begin(stim::OBJ_LINE);
1512 1542 for(int i = 0; i < L.size(); i++)
1513 1543 {
1514   - sk.TexCoord(M[i][0]);
  1544 + sk.TexCoord(M[i]);
1515 1545 sk.Vertex(L[i][0], L[i][1], L[i][2]);
1516 1546 }
1517 1547 sk.End();
... ... @@ -1530,13 +1560,14 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1530 1560 }
1531 1561  
1532 1562 void
1533   - traceLine(stim::vec3<float> pos, stim::vec<float> mag, int min_cost)
  1563 + traceLine(stim::vec3<float> pos, float mag, int min_cost)
1534 1564 {
1535 1565 //starting (seed) position and magnitude.
1536 1566 stim::vec3<float> spos = getPosition();
1537 1567 stim::vec<float> smag = getMagnitude();
1538 1568 stim::vec3<float> sdir = getDirection();
1539 1569  
  1570 + Bind();
1540 1571 // sk.Begin(stim::OBJ_LINE);
1541 1572  
1542 1573  
... ... @@ -1583,7 +1614,7 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1583 1614 }
1584 1615 //Has the template size gotten unreasonable?
1585 1616 mag = getMagnitude();
1586   - if(mag[0] > 75 || mag[0] < 1){
  1617 + if(mag > 75 || mag < 1){
1587 1618 running = false;
1588 1619 branchDetection2();
1589 1620 addToNetwork(cL, cM);
... ... @@ -1604,6 +1635,7 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1604 1635 else {
1605 1636 cL.push_back(stim::vec3<float>(p[0], p[1],p[2]));
1606 1637 cM.push_back(m);
  1638 + Unbind();
1607 1639 CHECK_OPENGL_ERROR
1608 1640 }
1609 1641 }
... ...
stim/visualization/cylinder.h
... ... @@ -214,13 +214,30 @@ class cylinder
214 214 init(inP, inM);
215 215 }
216 216  
  217 + ///constructor to create a cylinder from a set of points, radii, and the number of sides for the cylinder.
  218 + ///@param inP: Vector of stim vec3 composing the points of the centerline.
  219 + ///@param inM: Vector of stim vecs composing the radii of the centerline.
  220 + cylinder(std::vector<stim::vec3<T> > inP, std::vector< T > inM)
  221 + : centerline<T>(inP)
  222 + {
  223 + std::vector<stim::vec<T> > temp;
  224 + stim::vec<T> zero;
  225 + temp.resize(inM.size(), zero);
  226 + for(int i = 0; i < inM.size(); i++)
  227 + {
  228 + std::cerr << inP[i] << " " << inM[i] << std::endl;
  229 + temp[i][0] = inM[i];
  230 + }
  231 + init(inP, temp);
  232 + }
  233 +
217 234  
218 235 ///Constructor defines a cylinder with centerline inP and magnitudes of zero
219 236 ///@param inP: Vector of stim vec3 composing the points of the centerline
220 237 cylinder(std::vector< stim::vec3<T> > inP)
221 238 : centerline<T>(inP)
222 239 {
223   - std::vector< stim::vec<T> > inM; //create an array of arbitrary magnitudes
  240 + std::vector< T > inM; //create an array of arbitrary magnitudes
224 241  
225 242 stim::vec<T> zero;
226 243 zero.push_back(0);
... ...