Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r476 - trunk/Engine/ImageTraversers


Chronological Thread 
  • From: bigler@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r476 - trunk/Engine/ImageTraversers
  • Date: Tue, 16 Aug 2005 16:33:16 -0600 (MDT)

Author: bigler
Date: Tue Aug 16 16:33:15 2005
New Revision: 476

Modified:
   trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
   trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h
Log:

DissolveTiledImageTraverser.cc

  Seed each thread with a random starting point to get rid of streaks
  caused by all the threads starting at the same point.

DissolveTiledImageTraverser.h

  More comments on the values suitable to next_tile.


Modified: trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
==============================================================================
--- trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc (original)
+++ trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc Tue Aug 16 
16:33:15 2005
@@ -1,5 +1,6 @@
 
 #include <Engine/ImageTraversers/DissolveTiledImageTraverser.h>
+#include <Core/Math/CheapRNG.h>
 #include <Core/Exceptions/IllegalArgument.h>
 #include <Core/Exceptions/InternalError.h>
 #include <Core/Util/Args.h>
@@ -106,6 +107,11 @@
   unsigned int numTiles = numAssignments/context.numProcs;
   unsigned int numTiles_leftover = numAssignments%context.numProcs;
 
+  // We need to seed each thread with a different seed point randomly
+  // to give it a more mixed up look.
+  CheapRNG rng;
+  rng.seed(1);
+  
   // Try an educated guess for the tiles per pass
   for(size_t i = 0; i < per_thread_data.size(); ++i) {
     ChannelContext& cdata = 
per_thread_data[i].channel_data[context.channelIndex];
@@ -114,8 +120,10 @@
     if (per_thread_data.size()-i >= numTiles_leftover)
       cdata.numTiles++;
     cdata.tiles_per_pass = cdata.numTiles/iters_per_frame;
-    // Inialize the random number stuff.
-    cdata.next_tile = 1;
+    // Inialize the random number stuff.  Since we are using the
+    // modulous we need to add 1 to get the range from [0,numTiles-1]
+    // to [1,numTiles].
+    cdata.next_tile = rng.randInt()%cdata.numTiles + 1;
     // Figure out the mask
     int num_bits = numBinaryDigits(cdata.numTiles);
     if (num_bits > 32)

Modified: trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h
==============================================================================
--- trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h  (original)
+++ trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h  Tue Aug 16 
16:33:15 2005
@@ -55,7 +55,10 @@
       // This is the mask for the random number generator.
       unsigned int rng_mask;
       // Which tile to start on next (since this is a framed
-      // implementation).
+      // implementation).  Remember this number is in the range of
+      // [1,numTiles], so you should subtract one when you want to use
+      // it.  The reason is that the computeNextSample doesn't work
+      // for 0 (and you want that value).
       unsigned int next_tile;
       // This tells us how many tiles to work on for a given thread/context
       unsigned int numTiles;




  • [MANTA] r476 - trunk/Engine/ImageTraversers, bigler, 08/16/2005

Archive powered by MHonArc 2.6.16.

Top of page