Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1950 - trunk/Engine/ImageTraversers


Chronological Thread 
  • From: arobison@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1950 - trunk/Engine/ImageTraversers
  • Date: Thu, 27 Dec 2007 15:28:12 -0700 (MST)

Author: arobison
Date: Thu Dec 27 15:28:10 2007
New Revision: 1950

Modified:
   trunk/Engine/ImageTraversers/DeadlineImageTraverser.cc
   trunk/Engine/ImageTraversers/DeadlineImageTraverser.h
Log:
Adding a center-weighted priority mode.


Modified: trunk/Engine/ImageTraversers/DeadlineImageTraverser.cc
==============================================================================
--- trunk/Engine/ImageTraversers/DeadlineImageTraverser.cc      (original)
+++ trunk/Engine/ImageTraversers/DeadlineImageTraverser.cc      Thu Dec 27 
15:28:10 2007
@@ -114,6 +114,8 @@
         priority = Contrast;
       else if(priorityString == "FIFOluminance")
         priority = FIFO_to_LumVar;
+      else if(priorityString == "center")
+        priority = Center;
       else
         throw IllegalArgument("DeadlineImageTraverser -priority, bad 
priority", i, args);
     } else if(arg == "-FIFOCutoff") {
@@ -205,6 +207,11 @@
   int xres, yres;
   context.getResolution(stereo, xres, yres);
 
+  // render region defaults to entire image
+  // TODO(arobison): this means that on resizes we will lose
+  // a user selected region, so we need to save it and scale it
+  setRenderRegion(0,0,xres-1,yres-1);
+
   // Determine how many coarse tiles are needed.
   int coarse_xres = (xres + xcoarsepixelsize-1)/xcoarsepixelsize;
   int coarse_yres = (yres + ycoarsepixelsize-1)/ycoarsepixelsize;
@@ -672,6 +679,25 @@
   return tile->xmag * tile->ymag;
 }
 
+float DeadlineImageTraverser::computeCenterPriority(Tile* tile, const 
Fragment& frag) const
+{
+  int tile_x_center = (tile->xend - tile->xstart)/2 + tile->xstart;
+  int tile_y_center = (tile->yend - tile->ystart)/2 + tile->ystart;
+
+#if 0
+  // manhattan distance
+  int dist = Abs(tile_x_center - render_region.xcenter) +
+    Abs(tile_y_center - render_region.ycenter) ;
+#else
+  // euclidean distance
+  int dx = Abs(tile_x_center - render_region.xcenter);
+  int dy = Abs(tile_y_center - render_region.ycenter);
+  int dist = Sqrt(dx*dx + dy*dy);
+#endif
+
+  return (1/static_cast<Real>(dist)) * tile->xmag * tile->ymag;
+}
+
 void DeadlineImageTraverser::computePriority(Tile* tile, const Fragment& 
frag) const
 {
   // set the priority of tiles outside the render region to zero
@@ -703,6 +729,10 @@
       tile->priority = computeLuminancePriority(tile, frag);
     else
       tile->priority = computeFIFOPriority(tile, frag);
+    break;
+
+  case Center:
+    tile->priority = computeCenterPriority(tile, frag);
     break;
 
   default:

Modified: trunk/Engine/ImageTraversers/DeadlineImageTraverser.h
==============================================================================
--- trunk/Engine/ImageTraversers/DeadlineImageTraverser.h       (original)
+++ trunk/Engine/ImageTraversers/DeadlineImageTraverser.h       Thu Dec 27 
15:28:10 2007
@@ -70,6 +70,8 @@
       render_region.ystart = ystart;
       render_region.xend = xend;
       render_region.yend = yend;
+      render_region.xcenter = (xend-xstart)/2 + xstart;
+      render_region.ycenter = (yend-ystart)/2 + ystart;
     }
     void useRenderRegion(bool use) { use_render_region = use; }
 
@@ -112,7 +114,7 @@
     bool converged;
     double StartFrameTime;
     enum PriorityScheme {
-      FIFO, LuminanceVariance, Contrast, FIFO_to_LumVar
+      FIFO, LuminanceVariance, Contrast, FIFO_to_LumVar, Center
     };
     PriorityScheme priority;
     float FIFO_cutoff;
@@ -123,6 +125,8 @@
       int ystart;
       int xend;
       int yend;
+      int xcenter;
+      int ycenter;
     };
     bool use_render_region;
     Region render_region;
@@ -134,6 +138,7 @@
     float computeLuminancePriority(Tile* tile, const Fragment& frag) const;
     float computeContrastPriority(Tile* tile, const Fragment& frag) const;
     float computeFIFOPriority(Tile* tile, const Fragment& frag) const;
+    float computeCenterPriority(Tile* tile, const Fragment& frag) const;
     void computePriority(Tile* tile, const Fragment& frag) const;
   };
 }




  • [Manta] r1950 - trunk/Engine/ImageTraversers, arobison, 12/27/2007

Archive powered by MHonArc 2.6.16.

Top of page