Commit 4166e97375f81aae2bdd5b74c039317b6f1f930a
1 parent
47fe6300
Added debug tags to everything that compile only when the debug option is done, …
…fixed the instability as well as some other issue that came out later
Showing
2 changed files
with
117 additions
and
82 deletions
Show diff stats
stim/cuda/testKernel.cuh
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | #include <stim/cuda/cudatools/devices.h> | 8 | #include <stim/cuda/cudatools/devices.h> |
9 | #include <stim/cuda/cudatools/threads.h> | 9 | #include <stim/cuda/cudatools/threads.h> |
10 | #include <stim/cuda/cuda_texture.cuh> | 10 | #include <stim/cuda/cuda_texture.cuh> |
11 | - stim::cuda::cuda_texture tx; //texture object. | 11 | + |
12 | float* print; | 12 | float* print; |
13 | 13 | ||
14 | ///Initialization function, allocates the memory and passes the necessary | 14 | ///Initialization function, allocates the memory and passes the necessary |
@@ -26,16 +26,16 @@ | @@ -26,16 +26,16 @@ | ||
26 | cudaFree(print); ///temporary | 26 | cudaFree(print); ///temporary |
27 | } | 27 | } |
28 | 28 | ||
29 | - __device__ | ||
30 | - float templ(int x) | ||
31 | - { | ||
32 | - if(x < 32/6 || x > 32*5/6 || (x > 32*2/6 && x < 32*4/6)){ | ||
33 | - return 1.0; | ||
34 | - }else{ | ||
35 | - return 0.0; | ||
36 | - } | ||
37 | - | ||
38 | - } | 29 | + __device__ |
30 | + float templ(int x, int max_x) | ||
31 | + { | ||
32 | + if(x < max_x/6 || x > max_x*5/6 || (x > max_x*2/6 && x < max_x*4/6)) | ||
33 | + { | ||
34 | + return 1.0; | ||
35 | + }else{ | ||
36 | + return 0.0; | ||
37 | + } | ||
38 | + } | ||
39 | 39 | ||
40 | ///Find the difference of the given set of samples and the template | 40 | ///Find the difference of the given set of samples and the template |
41 | ///using cuda acceleration. | 41 | ///using cuda acceleration. |
@@ -44,33 +44,24 @@ | @@ -44,33 +44,24 @@ | ||
44 | ///@param float* result --a pointer to the memory that stores the result. | 44 | ///@param float* result --a pointer to the memory that stores the result. |
45 | __global__ | 45 | __global__ |
46 | //void get_diff (float *result) | 46 | //void get_diff (float *result) |
47 | - void get_diff (cudaTextureObject_t texIn, float *print) | 47 | + void get_diff (cudaTextureObject_t texIn, float *print, int dx) |
48 | { | 48 | { |
49 | int x = threadIdx.x + blockIdx.x * blockDim.x; | 49 | int x = threadIdx.x + blockIdx.x * blockDim.x; |
50 | int y = threadIdx.y + blockIdx.y * blockDim.y; | 50 | int y = threadIdx.y + blockIdx.y * blockDim.y; |
51 | -// int idx = y*64+x; | ||
52 | - int idx = y*32+x; | 51 | + int idx = y*dx+x; |
53 | // int idx = y*16+x; | 52 | // int idx = y*16+x; |
54 | 53 | ||
55 | float valIn = tex2D<unsigned char>(texIn, x, y); | 54 | float valIn = tex2D<unsigned char>(texIn, x, y); |
56 | - float templa = templ(x); | ||
57 | - print[idx] = valIn; ///temporary | 55 | + float templa = templ(x, 32)*255.0; |
56 | + print[idx] = abs(valIn-templa); ///temporary | ||
58 | //print[idx] = abs(templa); ///temporary | 57 | //print[idx] = abs(templa); ///temporary |
59 | 58 | ||
60 | } | 59 | } |
61 | 60 | ||
62 | - | ||
63 | - ///External access-point to the cuda function | ||
64 | - ///@param GLuint texbufferID --GLtexture (most be contained in a framebuffer object) | ||
65 | - /// that holds the data that will be handed to cuda. | ||
66 | - ///@param GLenum texType --either GL_TEXTURE_1D, GL_TEXTURE_2D or GL_TEXTURE_3D | ||
67 | - /// may work with other gl texture types, but untested. | ||
68 | - ///@param DIM_Y, the number of samples in the template. | ||
69 | - void test(GLint texbufferID, GLenum texType, int x, int y) | 61 | + void test(cudaTextureObject_t tObj, int x, int y, std::string nam) |
70 | { | 62 | { |
71 | 63 | ||
72 | //Bind the Texture in GL and allow access to cuda. | 64 | //Bind the Texture in GL and allow access to cuda. |
73 | - tx.MapCudaTexture(texbufferID, texType); | ||
74 | 65 | ||
75 | //initialize the return arrays. | 66 | //initialize the return arrays. |
76 | 67 | ||
@@ -85,44 +76,13 @@ | @@ -85,44 +76,13 @@ | ||
85 | 76 | ||
86 | 77 | ||
87 | // get_diff <<< blocks, threads >>> (tx.getTexture(), print); | 78 | // get_diff <<< blocks, threads >>> (tx.getTexture(), print); |
88 | - get_diff <<< numBlocks, threadsPerBlock >>> (tx.getTexture(), print); | ||
89 | - | ||
90 | - cudaDeviceSynchronize(); | ||
91 | - stringstream name; //for debugging | ||
92 | - name << "FromTex.bmp"; | ||
93 | - stim::gpu2image<float>(print, name.str(),x,y,0,255); | ||
94 | - | ||
95 | - tx.UnmapCudaTexture(); | ||
96 | - cleanUP(); | ||
97 | - } | ||
98 | - | ||
99 | - void test(GLint texbufferID, GLenum texType, int x, int y, std::string nam) | ||
100 | - { | ||
101 | - | ||
102 | - //Bind the Texture in GL and allow access to cuda. | ||
103 | - tx.MapCudaTexture(texbufferID, texType); | ||
104 | - | ||
105 | - //initialize the return arrays. | ||
106 | - | ||
107 | - initArray(x,y); | ||
108 | - dim3 numBlocks(1, y); | ||
109 | - dim3 threadsPerBlock(x, 1); | ||
110 | - int max_threads = stim::maxThreadsPerBlock(); | ||
111 | - //dim3 threads(max_threads, 1); | ||
112 | - //dim3 blocks(x / threads.x + 1, y); | ||
113 | - //dim3 numBlocks(2, 2); | ||
114 | - //dim3 threadsPerBlock(8, 108); | ||
115 | - | ||
116 | - | ||
117 | -// get_diff <<< blocks, threads >>> (tx.getTexture(), print); | ||
118 | - get_diff <<< numBlocks, threadsPerBlock >>> (tx.getTexture(), print); | 79 | + get_diff <<< numBlocks, threadsPerBlock >>> (tObj, print, x); |
119 | 80 | ||
120 | cudaDeviceSynchronize(); | 81 | cudaDeviceSynchronize(); |
121 | stringstream name; //for debugging | 82 | stringstream name; //for debugging |
122 | name << nam.c_str(); | 83 | name << nam.c_str(); |
123 | - //stim::gpu2image<float>(print, name.str(),x,y,0,255); | 84 | + stim::gpu2image<float>(print, name.str(),x,y,0,255); |
124 | 85 | ||
125 | - tx.UnmapCudaTexture(); | ||
126 | cleanUP(); | 86 | cleanUP(); |
127 | } | 87 | } |
128 | 88 |
stim/gl/gl_spider.h
@@ -134,7 +134,13 @@ class gl_spider // : public virtual gl_texture<T> | @@ -134,7 +134,13 @@ class gl_spider // : public virtual gl_texture<T> | ||
134 | stim::cuda::cuda_texture t_mag; //cuda_texture object used as an interface between OpenGL and cuda for size vectors. | 134 | stim::cuda::cuda_texture t_mag; //cuda_texture object used as an interface between OpenGL and cuda for size vectors. |
135 | 135 | ||
136 | 136 | ||
137 | - int iter; | 137 | + #ifdef DEBUG |
138 | + stringstream name; | ||
139 | + int iter; | ||
140 | + int iter_pos; | ||
141 | + int iter_dir; | ||
142 | + int iter_siz; | ||
143 | + #endif | ||
138 | 144 | ||
139 | //--------------------------------------------------------------------------// | 145 | //--------------------------------------------------------------------------// |
140 | //-------------------------------PRIVATE METHODS----------------------------// | 146 | //-------------------------------PRIVATE METHODS----------------------------// |
@@ -155,11 +161,14 @@ class gl_spider // : public virtual gl_texture<T> | @@ -155,11 +161,14 @@ class gl_spider // : public virtual gl_texture<T> | ||
155 | #ifdef TIMING | 161 | #ifdef TIMING |
156 | direction_time += gpuStopTimer(); //profiling | 162 | direction_time += gpuStopTimer(); //profiling |
157 | #endif | 163 | #endif |
158 | - #ifdef TESTING | ||
159 | -// test(texbufferID, GL_TEXTURE_2D,2*n_pixels,numSamples*n_pixels, "Final_Cost_Direction.bmp"); | ||
160 | - #endif | ||
161 | 164 | ||
162 | int best = getCost(t_dir.getTexture(), t_dir.getAuxArray() ,numSamples); //find min cost. | 165 | int best = getCost(t_dir.getTexture(), t_dir.getAuxArray() ,numSamples); //find min cost. |
166 | + #ifdef DEBUG | ||
167 | + name.str(""); | ||
168 | + name << "Final_Cost_Direction_fiber_"<< iter << "_" << iter_dir << ".bmp"; | ||
169 | + test(t_dir.getTexture(), n_pixels*2.0, numSamples*n_pixels, name.str()); | ||
170 | + iter_dir++; | ||
171 | + #endif | ||
163 | stim::vec<float> next( ///calculate the next vector. | 172 | stim::vec<float> next( ///calculate the next vector. |
164 | dV[best][0]*S[0]*R[0], | 173 | dV[best][0]*S[0]*R[0], |
165 | dV[best][1]*S[1]*R[1], | 174 | dV[best][1]*S[1]*R[1], |
@@ -189,10 +198,13 @@ class gl_spider // : public virtual gl_texture<T> | @@ -189,10 +198,13 @@ class gl_spider // : public virtual gl_texture<T> | ||
189 | position_time += gpuStopTimer(); ///timer for profiling | 198 | position_time += gpuStopTimer(); ///timer for profiling |
190 | #endif | 199 | #endif |
191 | 200 | ||
192 | - #ifdef TESTING | ||
193 | -// test(texbufferID, GL_TEXTURE_2D,2*n_pixels,numSamples*n_pixels, "Final_Cost_Direction.bmp"); | ||
194 | - #endif | ||
195 | int best = getCost(t_pos.getTexture(), t_pos.getAuxArray(), numSamplesPos); //find min cost. | 201 | int best = getCost(t_pos.getTexture(), t_pos.getAuxArray(), numSamplesPos); //find min cost. |
202 | + #ifdef DEBUG | ||
203 | + name.str(""); | ||
204 | + name << "Final_Cost_Position_" << iter << "_" << iter_pos << ".bmp"; | ||
205 | + test(t_pos.getTexture(), n_pixels*2.0, numSamplesPos*n_pixels, name.str()); | ||
206 | + iter_pos++; | ||
207 | + #endif | ||
196 | stim::vec<float> next( //find next position. | 208 | stim::vec<float> next( //find next position. |
197 | pV[best][0], | 209 | pV[best][0], |
198 | pV[best][1], | 210 | pV[best][1], |
@@ -221,9 +233,13 @@ class gl_spider // : public virtual gl_texture<T> | @@ -221,9 +233,13 @@ class gl_spider // : public virtual gl_texture<T> | ||
221 | #ifdef TIMING | 233 | #ifdef TIMING |
222 | size_time += gpuStopTimer(); | 234 | size_time += gpuStopTimer(); |
223 | #endif | 235 | #endif |
224 | - #ifdef TESTING | ||
225 | - #endif | ||
226 | int best = getCost(t_mag.getTexture(), t_mag.getAuxArray(), numSamplesMag); //get best cost. | 236 | int best = getCost(t_mag.getTexture(), t_mag.getAuxArray(), numSamplesMag); //get best cost. |
237 | + #ifdef DEBUG | ||
238 | + name.str(""); | ||
239 | + name << "Final_Cost_Size_" << iter << "_" << iter_siz << ".bmp"; | ||
240 | + test(t_mag.getTexture(), n_pixels*2.0, numSamplesMag*n_pixels, name.str()); | ||
241 | + iter_siz++; | ||
242 | + #endif | ||
227 | setMagnitude(m*mV[best]); //adjust the magnitude. | 243 | setMagnitude(m*mV[best]); //adjust the magnitude. |
228 | } | 244 | } |
229 | 245 | ||
@@ -242,7 +258,6 @@ class gl_spider // : public virtual gl_texture<T> | @@ -242,7 +258,6 @@ class gl_spider // : public virtual gl_texture<T> | ||
242 | if(cL.size() < 4){} ///if the size of the fiber is less then 4 we do nothing. | 258 | if(cL.size() < 4){} ///if the size of the fiber is less then 4 we do nothing. |
243 | else{ | 259 | else{ |
244 | setMatrix(1); ///finds the current transformation matrix | 260 | setMatrix(1); ///finds the current transformation matrix |
245 | - | ||
246 | DrawLongCylinder(n, l_template, l_square); ///Draw the cylinder. | 261 | DrawLongCylinder(n, l_template, l_square); ///Draw the cylinder. |
247 | stim::cylinder<float> cyl(cL, cM); | 262 | stim::cylinder<float> cyl(cL, cM); |
248 | std::vector< stim::vec<float> > result = find_branch(cylinder_texID, GL_TEXTURE_2D, n*l_square, (cL.size()-1)*l_template); ///find all the centers in cuda | 263 | std::vector< stim::vec<float> > result = find_branch(cylinder_texID, GL_TEXTURE_2D, n*l_square, (cL.size()-1)*l_template); ///find all the centers in cuda |
@@ -269,8 +284,7 @@ class gl_spider // : public virtual gl_texture<T> | @@ -269,8 +284,7 @@ class gl_spider // : public virtual gl_texture<T> | ||
269 | } | 284 | } |
270 | stim::vec3<float> v = cyl.surf(pval, result[i][0]); ///find the coordinates of the point at pval on the surface in tissue space. | 285 | stim::vec3<float> v = cyl.surf(pval, result[i][0]); ///find the coordinates of the point at pval on the surface in tissue space. |
271 | stim::vec3<float> di = cyl.p(pval); ///find the coord of v in tissue space projected on the centerline. | 286 | stim::vec3<float> di = cyl.p(pval); ///find the coord of v in tissue space projected on the centerline. |
272 | - float rad = cyl.r(pval); ///find the radius at the pvalue's location | ||
273 | - std::cout << v << rad << std::endl; | 287 | + float rad = cyl.r(pval)/2; ///find the radius at the pvalue's location |
274 | if( | 288 | if( |
275 | !(v[0] > size[0] || v[1] > size[1] | 289 | !(v[0] > size[0] || v[1] > size[1] |
276 | || v[2] > size[2] || v[0] < 0 | 290 | || v[2] > size[2] || v[0] < 0 |
@@ -355,15 +369,23 @@ class gl_spider // : public virtual gl_texture<T> | @@ -355,15 +369,23 @@ class gl_spider // : public virtual gl_texture<T> | ||
355 | stim::vec3<float> sph(1, theta, phi); ///combine into a vector in spherical coordinates. | 369 | stim::vec3<float> sph(1, theta, phi); ///combine into a vector in spherical coordinates. |
356 | stim::vec3<float> cart = sph.sph2cart();///convert to cartesian. | 370 | stim::vec3<float> cart = sph.sph2cart();///convert to cartesian. |
357 | dV.push_back(cart); ///save the generated vector for further use. | 371 | dV.push_back(cart); ///save the generated vector for further use. |
372 | + #ifdef DEBUG | ||
373 | +// std::cout << cart << std::endl; | ||
374 | + #endif | ||
358 | if(cos(Y.dot(cart)) < 0.087) ///make sure that the Y is not parallel to the new vector. | 375 | if(cos(Y.dot(cart)) < 0.087) ///make sure that the Y is not parallel to the new vector. |
359 | { | 376 | { |
360 | Y[0] = 0.0; Y[1] = 1.0; | 377 | Y[0] = 0.0; Y[1] = 1.0; |
361 | }else{ | 378 | }else{ |
362 | Y[0] = 1.0; Y[1] = 0.0; | 379 | Y[0] = 1.0; Y[1] = 0.0; |
363 | } | 380 | } |
381 | + | ||
364 | hor = stim::rect<float>(mag, ///generate a rectangle with the new vectro as a normal. | 382 | hor = stim::rect<float>(mag, ///generate a rectangle with the new vectro as a normal. |
365 | pos, cart, | 383 | pos, cart, |
366 | ((Y.cross(cart)).cross(cart)).norm()); | 384 | ((Y.cross(cart)).cross(cart)).norm()); |
385 | + | ||
386 | + #ifdef DEBUG | ||
387 | + // std::cout << hor.n() << std::endl; | ||
388 | + #endif | ||
367 | ver = stim::rect<float>(mag, ///generate another rectangle that's perpendicular the first but parallel to the cart vector. | 389 | ver = stim::rect<float>(mag, ///generate another rectangle that's perpendicular the first but parallel to the cart vector. |
368 | pos, cart, | 390 | pos, cart, |
369 | hor.n()); | 391 | hor.n()); |
@@ -389,10 +411,19 @@ class gl_spider // : public virtual gl_texture<T> | @@ -389,10 +411,19 @@ class gl_spider // : public virtual gl_texture<T> | ||
389 | 411 | ||
390 | //Set up the variable necessary for vector creation. | 412 | //Set up the variable necessary for vector creation. |
391 | glNewList(dList+1, GL_COMPILE); ///generate a new display list. | 413 | glNewList(dList+1, GL_COMPILE); ///generate a new display list. |
392 | - for(int i = 0; i < numSamplesPos; i++) ///for the number of position samples | 414 | + pV.push_back(pos); |
415 | + hor = stim::rect<float>(mag, ///generate a rec tangle with the new vector as a normal. | ||
416 | + pos, dir, | ||
417 | + ((Y.cross(d)).cross(d)) | ||
418 | + .norm()); | ||
419 | + ver = stim::rect<float>(mag, ///generate anoth er rectangle that's perpendicular the first but parallel to the cart vector. | ||
420 | + pos, dir, | ||
421 | + hor.n()); | ||
422 | + UpdateBuffer(0.0, 0.0+0*n_pixels); | ||
423 | + for(int i = 1; i < numSamplesPos; i++) ///for the number of position samples | ||
393 | { | 424 | { |
394 | stim::vec3<float> temp = uniformRandVector(); ///generate a random point on a plane. | 425 | stim::vec3<float> temp = uniformRandVector(); ///generate a random point on a plane. |
395 | - temp = temp*delta*2.0 - delta/2.0; ///scale the point | 426 | + temp = temp*delta*2.0 - delta; ///scale the point and center it around 0.0 |
396 | temp[2] = 0.0; | 427 | temp[2] = 0.0; |
397 | pV.push_back(temp); ///save the point for further use. | 428 | pV.push_back(temp); ///save the point for further use. |
398 | hor = stim::rect<float>(mag, ///generate a rectangle with the new vector as a normal. | 429 | hor = stim::rect<float>(mag, ///generate a rectangle with the new vector as a normal. |
@@ -405,6 +436,10 @@ class gl_spider // : public virtual gl_texture<T> | @@ -405,6 +436,10 @@ class gl_spider // : public virtual gl_texture<T> | ||
405 | UpdateBuffer(0.0, 0.0+i*n_pixels); ///sample the necessary points and put them into a display list. | 436 | UpdateBuffer(0.0, 0.0+i*n_pixels); ///sample the necessary points and put them into a display list. |
406 | } | 437 | } |
407 | glEndList(); ///finilize the display list. | 438 | glEndList(); ///finilize the display list. |
439 | + #ifdef DEBUG | ||
440 | + for(int i = 0; i < numSamplesPos; i++) | ||
441 | + std::cout << pV[i] << std::endl; | ||
442 | + #endif | ||
408 | } | 443 | } |
409 | 444 | ||
410 | ///@param float delta, How much the rectangles are allowed to expand. | 445 | ///@param float delta, How much the rectangles are allowed to expand. |
@@ -428,7 +463,6 @@ class gl_spider // : public virtual gl_texture<T> | @@ -428,7 +463,6 @@ class gl_spider // : public virtual gl_texture<T> | ||
428 | float max = 1.0+delta; ///largers size. | 463 | float max = 1.0+delta; ///largers size. |
429 | float step = (max-min)/(numSamplesMag-1); ///the size variation from one rect to the next. | 464 | float step = (max-min)/(numSamplesMag-1); ///the size variation from one rect to the next. |
430 | float factor; | 465 | float factor; |
431 | - | ||
432 | glNewList(dList+2, GL_COMPILE); | 466 | glNewList(dList+2, GL_COMPILE); |
433 | for(int i = 0; i < numSamplesMag; i++){ ///for the number of position samples | 467 | for(int i = 0; i < numSamplesMag; i++){ ///for the number of position samples |
434 | //Create linear index | 468 | //Create linear index |
@@ -545,8 +579,8 @@ class gl_spider // : public virtual gl_texture<T> | @@ -545,8 +579,8 @@ class gl_spider // : public virtual gl_texture<T> | ||
545 | glBindTexture(GL_TEXTURE_2D, textureID); | 579 | glBindTexture(GL_TEXTURE_2D, textureID); |
546 | 580 | ||
547 | //Textures repeat and use linear interpolation, luminance format. | 581 | //Textures repeat and use linear interpolation, luminance format. |
548 | - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); ///Set up the texture to repeat at edges. | ||
549 | - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); | 582 | + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); ///Set up the texture to repeat at edges. |
583 | + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); | ||
550 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); ///Set up the texture to use Linear interpolation | 584 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); ///Set up the texture to use Linear interpolation |
551 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | 585 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
552 | glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, ///Create the texture with no data. | 586 | glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, ///Create the texture with no data. |
@@ -746,7 +780,12 @@ class gl_spider // : public virtual gl_texture<T> | @@ -746,7 +780,12 @@ class gl_spider // : public virtual gl_texture<T> | ||
746 | numSamples = samples; | 780 | numSamples = samples; |
747 | numSamplesPos = samplespos; | 781 | numSamplesPos = samplespos; |
748 | numSamplesMag = samplesmag; | 782 | numSamplesMag = samplesmag; |
783 | + #ifdef DEBUG | ||
749 | iter = 0; | 784 | iter = 0; |
785 | + iter_pos = 0; | ||
786 | + iter_dir = 0; | ||
787 | + iter_siz = 0; | ||
788 | + #endif | ||
750 | } | 789 | } |
751 | 790 | ||
752 | ///Position constructor: floats. | 791 | ///Position constructor: floats. |
@@ -770,7 +809,12 @@ class gl_spider // : public virtual gl_texture<T> | @@ -770,7 +809,12 @@ class gl_spider // : public virtual gl_texture<T> | ||
770 | numSamples = numsamples; | 809 | numSamples = numsamples; |
771 | numSamplesPos = numsamplespos; | 810 | numSamplesPos = numsamplespos; |
772 | numSamplesMag = numsamplesmag; | 811 | numSamplesMag = numsamplesmag; |
812 | + #ifdef DEBUG | ||
773 | iter = 0; | 813 | iter = 0; |
814 | + iter_pos = 0; | ||
815 | + iter_dir = 0; | ||
816 | + iter_siz = 0; | ||
817 | + #endif | ||
774 | } | 818 | } |
775 | 819 | ||
776 | ///Position constructor: vecs of floats. | 820 | ///Position constructor: vecs of floats. |
@@ -789,7 +833,12 @@ class gl_spider // : public virtual gl_texture<T> | @@ -789,7 +833,12 @@ class gl_spider // : public virtual gl_texture<T> | ||
789 | numSamples = samples; | 833 | numSamples = samples; |
790 | numSamplesPos = samplesPos; | 834 | numSamplesPos = samplesPos; |
791 | numSamplesMag = samplesMag; | 835 | numSamplesMag = samplesMag; |
836 | + #ifdef DEBUG | ||
792 | iter = 0; | 837 | iter = 0; |
838 | + iter_pos = 0; | ||
839 | + iter_dir = 0; | ||
840 | + iter_siz = 0; | ||
841 | + #endif | ||
793 | } | 842 | } |
794 | 843 | ||
795 | ///destructor | 844 | ///destructor |
@@ -825,6 +874,9 @@ class gl_spider // : public virtual gl_texture<T> | @@ -825,6 +874,9 @@ class gl_spider // : public virtual gl_texture<T> | ||
825 | #endif | 874 | #endif |
826 | #ifdef DEBUG | 875 | #ifdef DEBUG |
827 | iter = 0; | 876 | iter = 0; |
877 | + iter_pos = 0; | ||
878 | + iter_dir = 0; | ||
879 | + iter_siz = 0; | ||
828 | #endif | 880 | #endif |
829 | stepsize = 3.0; | 881 | stepsize = 3.0; |
830 | n_pixels = 16.0; | 882 | n_pixels = 16.0; |
@@ -852,7 +904,7 @@ class gl_spider // : public virtual gl_texture<T> | @@ -852,7 +904,7 @@ class gl_spider // : public virtual gl_texture<T> | ||
852 | genDirectionVectors(5*stim::PI/4); | 904 | genDirectionVectors(5*stim::PI/4); |
853 | Unbind(); | 905 | Unbind(); |
854 | Bind(position_texID, position_buffID, numSamplesPos, n_pixels); | 906 | Bind(position_texID, position_buffID, numSamplesPos, n_pixels); |
855 | - genPositionVectors(); | 907 | + genPositionVectors(0.2); |
856 | Unbind(); | 908 | Unbind(); |
857 | Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels); | 909 | Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels); |
858 | genMagnitudeVectors(); | 910 | genMagnitudeVectors(); |
@@ -983,17 +1035,20 @@ class gl_spider // : public virtual gl_texture<T> | @@ -983,17 +1035,20 @@ class gl_spider // : public virtual gl_texture<T> | ||
983 | getRotation(stim::vec3<float> dir) | 1035 | getRotation(stim::vec3<float> dir) |
984 | { | 1036 | { |
985 | stim::vec<float> out(0.0,0.0,0.0,0.0); | 1037 | stim::vec<float> out(0.0,0.0,0.0,0.0); |
986 | - stim::vec<float> from(0.0,0.0,1.0); | 1038 | + stim::vec3<float> from(0.0,0.0,1.0); |
987 | out[0] = acos(dir.dot(from))*180/stim::PI; | 1039 | out[0] = acos(dir.dot(from))*180/stim::PI; |
988 | - if(out[0] < 1.0){ | 1040 | + #ifdef DEBUG |
1041 | + std::cout << "out is " << out << std::endl; | ||
1042 | + std::cout << "when rotating from " << from << " to " << dir << std::endl; | ||
1043 | + #endif | ||
1044 | + if(out[0] < 0.01){ | ||
989 | out[0] = 0.0; | 1045 | out[0] = 0.0; |
990 | out[1] = 0.0; | 1046 | out[1] = 0.0; |
991 | out[2] = 0.0; | 1047 | out[2] = 0.0; |
992 | out[3] = 1.0; | 1048 | out[3] = 1.0; |
993 | } else { | 1049 | } else { |
994 | - stim::vec<float> temp(0.0, 0.0, 0.0);; | ||
995 | - stim::vec<float> dir1(dir[0], dir[1], dir[2]); | ||
996 | - temp = (from.cross(dir1)).norm(); | 1050 | + stim::vec3<float> temp(0.0, 0.0, 0.0);; |
1051 | + temp = (from.cross(dir)).norm(); | ||
997 | out[1] = temp[0]; | 1052 | out[1] = temp[0]; |
998 | out[2] = temp[1]; | 1053 | out[2] = temp[1]; |
999 | out[3] = temp[2]; | 1054 | out[3] = temp[2]; |
@@ -1226,7 +1281,9 @@ class gl_spider // : public virtual gl_texture<T> | @@ -1226,7 +1281,9 @@ class gl_spider // : public virtual gl_texture<T> | ||
1226 | int | 1281 | int |
1227 | Step() | 1282 | Step() |
1228 | { | 1283 | { |
1284 | + #ifdef DEBUG | ||
1229 | std::cerr << "Took a step" << std::endl; | 1285 | std::cerr << "Took a step" << std::endl; |
1286 | + #endif | ||
1230 | Bind(direction_texID, direction_buffID, numSamples, n_pixels); | 1287 | Bind(direction_texID, direction_buffID, numSamples, n_pixels); |
1231 | CHECK_OPENGL_ERROR | 1288 | CHECK_OPENGL_ERROR |
1232 | findOptimalDirection(); | 1289 | findOptimalDirection(); |
@@ -1376,7 +1433,19 @@ class gl_spider // : public virtual gl_texture<T> | @@ -1376,7 +1433,19 @@ class gl_spider // : public virtual gl_texture<T> | ||
1376 | setPosition(curSeed); | 1433 | setPosition(curSeed); |
1377 | setDirection(curSeedVec); | 1434 | setDirection(curSeedVec); |
1378 | setMagnitude(curSeedMag); | 1435 | setMagnitude(curSeedMag); |
1379 | - findOptimalScale(); | 1436 | + |
1437 | + #ifdef DEBUG | ||
1438 | + std::cout << "The new seed " << curSeed << curSeedVec << curSeedMag << std::endl; | ||
1439 | + #endif | ||
1440 | + | ||
1441 | +// Bind(direction_texID, direction_buffID, numSamples, n_pixels); | ||
1442 | +// CHECK_OPENGL_ERROR | ||
1443 | +// findOptimalDirection(); | ||
1444 | +// Unbind(); | ||
1445 | + | ||
1446 | +// Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels); | ||
1447 | +// findOptimalScale(); | ||
1448 | +// Unbind(); | ||
1380 | 1449 | ||
1381 | // cL.push_back(curSeed); | 1450 | // cL.push_back(curSeed); |
1382 | // cM.push_back(curSeedMag); | 1451 | // cM.push_back(curSeedMag); |
@@ -1552,6 +1621,9 @@ class gl_spider // : public virtual gl_texture<T> | @@ -1552,6 +1621,9 @@ class gl_spider // : public virtual gl_texture<T> | ||
1552 | sk.End(); | 1621 | sk.End(); |
1553 | 1622 | ||
1554 | nt.addEdge(L,M); | 1623 | nt.addEdge(L,M); |
1624 | + #ifdef DEBUG | ||
1625 | + iter++; | ||
1626 | + #endif | ||
1555 | } | 1627 | } |
1556 | } | 1628 | } |
1557 | 1629 | ||
@@ -1646,6 +1718,9 @@ class gl_spider // : public virtual gl_texture<T> | @@ -1646,6 +1718,9 @@ class gl_spider // : public virtual gl_texture<T> | ||
1646 | } | 1718 | } |
1647 | } | 1719 | } |
1648 | } | 1720 | } |
1721 | + #ifdef DEBUG | ||
1722 | + std::cout << "I broke out!" << std::endl; | ||
1723 | + #endif | ||
1649 | } | 1724 | } |
1650 | }; | 1725 | }; |
1651 | } | 1726 | } |