Text archives Help
- 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.