Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r531 - branches/AFR/Engine/ImageTraversers


Chronological Thread 
  • From: abhinav@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r531 - branches/AFR/Engine/ImageTraversers
  • Date: Mon, 5 Sep 2005 12:16:44 -0600 (MDT)

Author: abhinav
Date: Mon Sep  5 12:16:43 2005
New Revision: 531

Modified:
   branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
   branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
Log:
fixed small bug where grouping ofxhairs into raypackets had broken the streams



Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc     (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc     Mon Sep  5 
12:16:43 2005
@@ -359,13 +359,13 @@
   else
   // print the total samples done in this chunk in the space reserved for 
that before
   {
-        int samplesDoneThisChunk = samples_done[myID].load() - 
last_samples_done[myID];
-       last_samples_done[myID] = samples_done[myID].load();
-        fpos_t tpos;
-       fgetpos(streamfile[myID], &tpos);
-       fsetpos(streamfile[myID],&numsamples_pos[myID]);
-       fprintf(streamfile[myID],"%d",samplesDoneThisChunk);
-       fsetpos(streamfile[myID], &tpos);
+    int samplesDoneThisChunk = samples_done[myID].load() - 
last_samples_done[myID];
+         last_samples_done[myID] = samples_done[myID].load();
+    fpos_t tpos;
+         fgetpos(streamfile[myID], &tpos);
+         fsetpos(streamfile[myID],&numsamples_pos[myID]);
+         fprintf(streamfile[myID],"%d",samplesDoneThisChunk);
+         fsetpos(streamfile[myID], &tpos);
   }
   
   // reserve space for total samples in this chunk
@@ -465,18 +465,21 @@
   }
 }
 
-void AFImageTraverser::renderCrossHair(const RenderContext& context, int 
myID, 
+int AFImageTraverser::renderCrossHair(const RenderContext& context, int 
myID, 
                                        Image *image, const int xres, const 
int yres, Sample *s, const int sscount, bool endChunk)
 {
  //cout << "now rendering xhair" << endl;
-  newSampleSet[myID][sscount].set(TEMPORAL_SAMPLE, s->viewCoord[0], 
s->viewCoord[1], s->t, 
-         s->worldCoord[0], s->worldCoord[1], s->worldCoord[2],
-         s->c[0], s->c[1], s->c[2]);
-  newSampleSet[myID][sscount].tileindex = 
kdtree[context.proc].getTileforXY(s->viewCoord[0], s->viewCoord[1]);
-  //cout << "checking ...sscount = " << sscount << ", blockstart = " << 
xhairBlockStart[myID] << endl;
-  
-  if(!endChunk && (sscount - xhairBlockStart[myID])<xhairBlockSize) return;
+  if(!endChunk)
+  {
+    newSampleSet[myID][sscount].set(TEMPORAL_SAMPLE, s->viewCoord[0], 
s->viewCoord[1], s->t, 
+           s->worldCoord[0], s->worldCoord[1], s->worldCoord[2],
+           s->c[0], s->c[1], s->c[2]);
+    newSampleSet[myID][sscount].tileindex = 
kdtree[context.proc].getTileforXY(s->viewCoord[0], s->viewCoord[1]);
+    //cout << "checking ...sscount = " << sscount << ", blockstart = " << 
xhairBlockStart[myID] << endl;
+  }
+  if(!endChunk && (sscount - xhairBlockStart[myID])<xhairBlockSize) return 0;
   int size = (sscount - xhairBlockStart[myID])*5;  
+  if(size==0) return 0;
   float t = (float)chunkTimeStamp[context.proc];
   int flags = RayPacket::HaveImageCoordinates | RayPacket::ConstantEye;
   int depth = 0;
@@ -539,6 +542,7 @@
   }
   //cout << "done one xhairBlock" << endl;
   xhairBlockStart[myID] = sscount;
+  return size/5;
 }
 
 
@@ -749,7 +753,7 @@
   kdtree[myID].setAB(samplingrate);
   // render the chunk
   renderChunk(context, image, xres, yres);
-  
+  int xhairRendered = 0;
   
   if(initpass[myID]) {
 
@@ -793,24 +797,25 @@
                && sp->viewCoord[1]<yres && sp->viewCoord[1]>=0
                && sp->viewCoord[2]<=1.0)
           {
-            renderCrossHair(context, myID, image, xres, yres, sp, sscount, 
(i==(chunk_size-1)));
+            xhairRendered += renderCrossHair(context, myID, image, xres, 
yres, sp, sscount);
             sscount++;
           }
         }
         else
         {
-          renderCrossHair(context, myID, image, xres, yres, sp, sscount, 
(i==(chunk_size-1)));
+          xhairRendered += renderCrossHair(context, myID, image, xres, yres, 
sp, sscount);
           sscount++;
         }
       }
       else break;
     }
+  xhairRendered += renderCrossHair(context, myID, image, xres, yres, sp, 
sscount-1, true);
        // write to file
        if(outputStreams)
        {
          // lock
          //streamlock.lock();
-         for(i=0; i<sscount; i++)
+         for(i=0; i<xhairRendered; i++)
          {
                // write each sample one by one
                newSampleSet[myID][i].writeToFile(streamfile[myID]);

Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      Mon Sep  5 
12:16:43 2005
@@ -45,7 +45,7 @@
                        virtual void renderImage(const RenderContext& 
context, Image* image) { /*Undefined for AFRPipeline. */ };
                        
                        void renderChunk(const RenderContext& context, Image* 
image, int xres, int yres);
-                       void renderCrossHair(const RenderContext& context, 
int myID, Image *image, const int xres, const int yres, Sample *s, const int 
sscount, bool endChunk=false);
+                       int renderCrossHair(const RenderContext& context, int 
myID, Image *image, const int xres, const int yres, Sample *s, const int 
sscount, bool endChunk=false);
                        
                        // Master thread task.
                        void masterTask(const RenderContext& context, Image* 
image);




  • [MANTA] r531 - branches/AFR/Engine/ImageTraversers, abhinav, 09/05/2005

Archive powered by MHonArc 2.6.16.

Top of page