Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r927 - in trunk/fox/afr_demo/Engine: Control ImageTraversers/AFR


Chronological Thread 
  • From: abhinav@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r927 - in trunk/fox/afr_demo/Engine: Control ImageTraversers/AFR
  • Date: Sat, 11 Feb 2006 11:52:44 -0700 (MST)

Author: abhinav
Date: Sat Feb 11 11:52:42 2006
New Revision: 927

Modified:
   trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
   trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.cc
   trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.h
Log:
added threadsafe version of finding a tile for a sample for the stafr 
sampler. 




Modified: trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc    (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc    Sat Feb 11 11:52:42 
2006
@@ -586,6 +586,7 @@
       wait_for_transactions = false;
 
       // Wait for all of the other processors to finish setup.
+      cout << "syncing in thread " << proc << endl;
       //pipeline_setup_barrier.wait(numProcs);
       outer_loop_barrier.wait(numProcs);
     }
@@ -688,6 +689,7 @@
       }
     } // End of inner loop.
     while(getCurrentTime()<end_time);
+    //cout << "tread " << proc << "finished loop " << innerloopcalls << " at 
time " << getCurrentTime() << endl;
     for(int index = 0;index < static_cast<int>(channels.size());index++)
     {
       Channel* channel = channels[index];

Modified: trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.cc     (original)
+++ trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.cc     Sat Feb 11 
11:52:42 2006
@@ -234,7 +234,7 @@
   int top = rootheight;
   int right = rootwidth;
   int level = 0;
-  while(!treenode[index].type==VALID_TILE)
+  while(!(treenode[index].type==VALID_TILE))
   {
     if(index>totalNodes)
     {
@@ -275,6 +275,63 @@
   return index;
 }
 
+int KDTree::getTileforXYSafely(float x, float y)
+{
+  int index = 1;
+  int left = 0;
+  int bottom = 0;
+  int top = rootheight;
+  int right = rootwidth;
+  int level = 0;
+  bool done = false;
+  while(!done)
+  {
+    if(!treenode[index].beingUpdated && treenode[index].trylock())
+      done = (treenode[index].type==VALID_TILE);
+    else
+       return -1;
+    treenode[index].unlock();
+    if(done) break;
+    
+    if(index>totalNodes)
+    {
+      cerr << "error: no valid tile found" << endl;
+      // I guess we should exit here
+      exit(1);
+      return 1;
+    }
+    if(level%2==0)
+    {
+      if(x<left+(right-left)/2)
+      {
+        right = left + (right-left)/2;
+        index *= 2;
+      }
+      else
+      {
+        left = left + (right-left)/2;
+        index = index*2 + 1;
+      }
+    }
+    else
+    {
+      if(y<bottom+(top-bottom)/2)
+      {
+        top = bottom + (top-bottom)/2;
+        index *= 2;
+      }
+      else
+      {
+        bottom = bottom + (top-bottom)/2;
+        index = index*2 + 1;
+      }
+    }
+    level++;
+  }
+
+  return index;
+}
+
 // swap in an array, element pos1 with element pos2
 void KDTree::swap_tiles(Tile *arrayptr, int pos1, int pos2)
 {
@@ -1341,7 +1398,9 @@
     }
     if(!doingMasterTask)
     {
-      newsampleset->tileindex = getTileforXY(newsampleset->oldviewX, 
newsampleset->oldviewY);
+      int tindex = getTileforXYSafely(newsampleset->oldviewX, 
newsampleset->oldviewY);
+      if(tindex==-1) return 0;
+      newsampleset->tileindex = tindex;
       if(!treenode[newsampleset->tileindex].beingUpdated
           && treenode[newsampleset->tileindex].trylock())
       {
@@ -1366,7 +1425,9 @@
   
   if(doingMasterTask) return 0;
   // add to the valid tile containing the sampleset
-  newsampleset->tileindex = getTileforXY(newsampleset->viewX, 
newsampleset->viewY);
+  int tindex = getTileforXYSafely(newsampleset->viewX, newsampleset->viewY);
+  if(tindex==-1) return 0;
+  newsampleset->tileindex = tindex;
   if (treenode[newsampleset->tileindex].type != VALID_TILE)
   {
     //cerr << "error: could not locate a valid tile for this sample set " << 
endl;
@@ -1416,7 +1477,9 @@
     }
     if(!doingMasterTask)
     {
-      newsampleset->tileindex = getTileforXY(newsampleset->oldviewX, 
newsampleset->oldviewY);
+      int tindex = getTileforXYSafely(newsampleset->oldviewX, 
newsampleset->oldviewY);
+      if(tindex==-1) return 0;
+      newsampleset->tileindex = getTileforXYSafely(newsampleset->oldviewX, 
newsampleset->oldviewY);
       if(!treenode[newsampleset->tileindex].beingUpdated
           && treenode[newsampleset->tileindex].trylock())
       {
@@ -1441,7 +1504,9 @@
   
   if(doingMasterTask) return 0;
   // add to the valid tile containing the sampleset
-  newsampleset->tileindex = getTileforXY(newsampleset->viewX, 
newsampleset->viewY);
+  int tindex = getTileforXYSafely(newsampleset->viewX, newsampleset->viewY);
+  if(tindex==-1) return 0;
+  newsampleset->tileindex = tindex;
   if (treenode[newsampleset->tileindex].type != VALID_TILE)
   {
     //cerr << "error: could not locate a valid tile for this sample set " << 
endl;

Modified: trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.h
==============================================================================
--- trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.h      (original)
+++ trunk/fox/afr_demo/Engine/ImageTraversers/AFR/kdtree.h      Sat Feb 11 
11:52:42 2006
@@ -63,6 +63,7 @@
       void updateMinMax(int index, float tilearea, unsigned int 
samplingrate, Timestamp currenttime); // update the min/max when some tile 
changes
       inline int number_of_tiles() { return numVTarrayElems; }
       int getTileforXY(float x, float y);
+      int getTileforXYSafely(float x, float y);
       int writeToFile(FILE *fp, Timestamp currenttime, int samplingrate);
       inline int getNumLevels()
       {




  • [MANTA] r927 - in trunk/fox/afr_demo/Engine: Control ImageTraversers/AFR, abhinav, 02/11/2006

Archive powered by MHonArc 2.6.16.

Top of page