Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r554 - in branches/AFR: Engine/Control Engine/ImageTraversers StandAlone


Chronological Thread 
  • From: abe@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r554 - in branches/AFR: Engine/Control Engine/ImageTraversers StandAlone
  • Date: Sat, 17 Sep 2005 18:56:33 -0600 (MDT)

Author: abe
Date: Sat Sep 17 18:56:32 2005
New Revision: 554

Added:
   branches/AFR/StandAlone/afr.cc
      - copied, changed from r553, branches/AFR/StandAlone/manta.cc
Removed:
   branches/AFR/Engine/ImageTraversers/AFRImageTraverser.cc
Modified:
   branches/AFR/Engine/Control/AFRPipeline.cc
   branches/AFR/Engine/Control/AFRPipeline.h
   branches/AFR/Engine/Control/RTRT_register.cc
   branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
   branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
   branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h
   branches/AFR/Engine/ImageTraversers/CMakeLists.txt
   branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc
   branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h
   branches/AFR/StandAlone/CMakeLists.txt
   branches/AFR/StandAlone/combinestreams.cpp
Log:

Modified as necessary to make previous checkin compile.

M    StandAlone/combinestreams.cpp
A    StandAlone/afr.cc
M    StandAlone/CMakeLists.txt

Added bin/afr to invoke the afr renderer from this branch. Running bin/manta 
will run the
original framed version of the pipeline.

Fixed AFRImageTraverser interface so that all of the necessary virtual method 
were defined.

M    Engine/Control/AFRPipeline.cc
M    Engine/Control/RTRT_register.cc
M    Engine/Control/AFRPipeline.h
D    Engine/ImageTraversers/AFRImageTraverser.cc
M    Engine/ImageTraversers/AFRImageTraverser.h
M    Engine/ImageTraversers/AFImageTraverser.cc
M    Engine/ImageTraversers/GSTAFRImageTraverser.cc
M    Engine/ImageTraversers/AFImageTraverser.h
M    Engine/ImageTraversers/CMakeLists.txt
M    Engine/ImageTraversers/GSTAFRImageTraverser.h

After this, the original code, AFImageTraverser, is performing several orders 
of magnitude
slower then in previous versions of the code. What changes were made on 
performance critical
paths? Maybe there is some case where a virtual function is being called (a 
whole lot) where something
was inline before? We did make a lot of things virtual.

We'll need to make the old code at least as fast as it was, before 
continuing. More tomorrow.

Abe




Modified: branches/AFR/Engine/Control/AFRPipeline.cc
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.cc  (original)
+++ branches/AFR/Engine/Control/AFRPipeline.cc  Sat Sep 17 18:56:32 2005
@@ -42,8 +42,11 @@
 #include <Interface/IdleMode.h>
 #include <Interface/Image.h>
 #include <Interface/ImageDisplay.h>
-#include <Engine/ImageTraversers/AFImageTraverser.h>
-//#include <Interface/ImageTraverser.h>
+
+#include <Engine/ImageTraversers/AFRImageTraverser.h>
+
+
+
 #include <Interface/Light.h>
 #include <Interface/LightSet.h>
 #include <Interface/LoadBalancer.h>
@@ -295,6 +298,8 @@
   //  firstFrame = false;
   //  goto skipToRendering;
   //}
+
+  unsigned int inner_loop_time = currentImageTraverser->getInnerLoopTime();
  
        // Begin the outer rendering loop.
        // This updates renderer state and then 
@@ -409,20 +414,22 @@
       Image* image = channel->images[displayFrame];
                        
       if(image && image->isValid()){
-        // Compute the current sampling rate.
-         Real current_samples = currentImageTraverser->getSamplesDone();
+        // Compute the current sampling rate.
+
+        Real current_samples = currentImageTraverser->getSamplesDone();
 
-         Real delta_samples = (current_samples-last_samples);
-         Real currenttime = SCIRun::Time::currentSeconds();
-         Real delta_time = currenttime - last_display_time;
-         last_display_time = currenttime;
-
-         Real sampling_rate = delta_samples / delta_time;
-
-         currentImageTraverser->setSamplingRate( (unsigned int)sampling_rate 
);
-          DisplayContext myContext(proc, workersAnimAndImage);
-          channel->display->displayImage(myContext, image, 
(current_samples-last_samples));
-          last_samples = current_samples;
+        Real delta_samples = (current_samples-last_samples);
+        Real currenttime = SCIRun::Time::currentSeconds();
+        Real delta_time = currenttime - last_display_time;
+        last_display_time = currenttime;
+
+        Real sampling_rate = delta_samples / delta_time;
+
+        currentImageTraverser->setSamplingRate( (unsigned int)sampling_rate 
);
+        
+        DisplayContext myContext(proc, workersAnimAndImage);
+        channel->display->displayImage(myContext, image, 
(current_samples-last_samples));
+        last_samples = current_samples;
         
       }
       
@@ -442,7 +449,7 @@
     /////////////////////////////////////////////////////////////////////////
     int inner_iterations = 0;
     for (double begin_time=SCIRun::Time::currentSeconds();
-         
(SCIRun::Time::currentSeconds()-begin_time)<currentImageTraverser->inner_loop_time;)
 
+         (SCIRun::Time::currentSeconds()-begin_time)<inner_loop_time;) 
     {
       ++inner_iterations;
 
@@ -486,7 +493,7 @@
     } // End of inner loop.
     if(proc==0)
     {
-      if (currentImageTraverser->debug_window) 
+      if (currentImageTraverser->hasDebugWindow()) 
              // do the display stuff here
              currentImageTraverser->display_stats();
     }
@@ -832,14 +839,14 @@
   vector<string> args;
   parseSpec(spec, name, args);
 
-  // ImageTraverserMapType::iterator iter = imageTraversers.find(name);
-  // if(iter == imageTraversers.end())
-  //   return false;
+  ImageTraverserMapType::iterator iter = imageTraversers.find(name);
+  if(iter == imageTraversers.end())
+    return false;
 
-  // Only create an AFImageTraverser
-  currentImageTraverser = new AFImageTraverser( args );
+  // Only create an AFRImageTraverser
+  currentImageTraverser = dynamic_cast<AFRImageTraverser *>((*iter->second)( 
args ));
   
-  return true;
+  return (currentImageTraverser != 0);
 }
 
 void AFRPipeline::registerComponent(const string& name, 
ImageTraverserCreator fun)

Modified: branches/AFR/Engine/Control/AFRPipeline.h
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.h   (original)
+++ branches/AFR/Engine/Control/AFRPipeline.h   Sat Sep 17 18:56:32 2005
@@ -235,7 +235,7 @@
                        typedef map<string, ImageTraverserCreator> 
ImageTraverserMapType;
                        ImageTraverserMapType imageTraversers;
 
-                        AFRImageTraverser* currentImageTraverser;
+      AFRImageTraverser* currentImageTraverser;
                        
                        typedef map<string, LoadBalancerCreator> 
LoadBalancerMapType;
                        LoadBalancerMapType loadBalancers;

Modified: branches/AFR/Engine/Control/RTRT_register.cc
==============================================================================
--- branches/AFR/Engine/Control/RTRT_register.cc        (original)
+++ branches/AFR/Engine/Control/RTRT_register.cc        Sat Sep 17 18:56:32 
2005
@@ -6,7 +6,13 @@
 #include <Engine/ImageTraversers/NullImageTraverser.h>
 #include <Engine/ImageTraversers/TiledImageTraverser.h>
 #include <Engine/ImageTraversers/FramelessImageTraverser.h>
+
 #include <Engine/ImageTraversers/AFRImageTraverser.h>
+#include <Engine/ImageTraversers/AFImageTraverser.h>
+#include <Engine/ImageTraversers/GSTAFRImageTraverser.h>
+// #include <Engine/ImageTraversers/STAFRImageTraverser.h>
+
+
 #include <Engine/ImageTraversers/DissolveImageTraverser.h>
 #include <Engine/ImageTraversers/DissolveTiledImageTraverser.h>
 #include <Engine/LoadBalancers/CyclicLoadBalancer.h>
@@ -45,6 +51,7 @@
 namespace Manta {
   void registerKnownComponents(RTRTInterface* rtrt)
   {
+    
     // Register display components
     rtrt->registerComponent("null", &NullDisplay::create);
     rtrt->registerComponent("opengl", &OpenGLDisplay::create);
@@ -54,11 +61,13 @@
     rtrt->registerComponent("null", &NullImageTraverser::create);
     rtrt->registerComponent("tiled", &TiledImageTraverser::create);
     rtrt->registerComponent("frameless", &FramelessImageTraverser::create);
-    rtrt->registerComponent("afr", &Afr::AFRImageTraverser::create);
-    rtrt->registerComponent("gstafr", &Afr::AFRImageTraverser::create);
-    rtrt->registerComponent("stafr", &Afr::AFRImageTraverser::create);
     rtrt->registerComponent("dissolve", &DissolveImageTraverser::create);
     rtrt->registerComponent("dissolvetiled", 
&DissolveTiledImageTraverser::create);
+    
+    rtrt->registerComponent("afr",    &Afr::AFImageTraverser::create);
+    rtrt->registerComponent("gstafr", &Afr::GSTAFRImageTraverser::create);
+    // rtrt->registerComponent("stafr",  &Afr::STAFRImageTraverser::create);
+
 
     // Register image types
     rtrt->registerComponent("null", &NullImage::create);

Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc     (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc     Sat Sep 17 
18:56:32 2005
@@ -431,7 +431,7 @@
     int numlevels = kdtree[i].init(xres, yres, samplingrate);  // initialize 
the tree
   
     // set a mean number of tiles, i.e. cut at middle of tree
-    kdtree[i].resetPseudoRandomSeed();
+    kdtree[i].resetPseudoRandomSeed(myRandomNumber[i]);
   }
   
   // chunk_size = 256; // this is a fixed number as of now
@@ -881,7 +881,7 @@
 // If all of the threads have initialized start the benchmark.
 void BenchHelper::tryStart( int, int ) {
   
-  AFImageTraverser *traverser = (AFImageTraverser 
*)rtrt->getImageTraverser();
+  AFRImageTraverser *traverser = (AFRImageTraverser 
*)rtrt->getImageTraverser();
   
   // Check to see if all threads initialized.
   if (!traverser->allThreadsInitialized()) {
@@ -904,7 +904,7 @@
 // Take the final measurement.
 void BenchHelper::stop (int, int) {
   
-  AFImageTraverser *traverser = (AFImageTraverser 
*)rtrt->getImageTraverser();
+  AFRImageTraverser *traverser = (AFRImageTraverser 
*)rtrt->getImageTraverser();
   
   double end_time = SCIRun::Time::currentSeconds();
   unsigned int end_samples = traverser->getSamplesDone();

Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h      Sat Sep 17 
18:56:32 2005
@@ -5,7 +5,7 @@
 #include <SCIRun/Core/Thread/Time.h>
 #include <SCIRun/Core/Thread/Thread.h>
 
-#include <Interface/ImageTraverser.h>
+#include <Engine/ImageTraversers/AFRImageTraverser.h>
 #include <Interface/Fragment.h>
 #include <sgi_stl_warnings_off.h>
 #include <string>
@@ -31,7 +31,7 @@
        namespace Afr {
 
                enum FrameType { EVEN_FRAME, ODD_FRAME };
-               class AFImageTraverser : public ImageTraverser {
+               class AFImageTraverser : public AFRImageTraverser {
     
       friend class AFRPipeline;
     
@@ -46,7 +46,10 @@
                        
                        void renderChunk(const RenderContext& context, Image* 
image, int xres, int yres);
                        int renderCrossHair(const RenderContext& context, int 
myID, Image *image, const int xres, const int yres, Sample *s, const int 
sscount, bool endChunk=false);
-                       
+
+      // All AFImageTraversers are both master and client.
+      virtual bool isMaster( int id ) { return true; };
+      
                        // Master thread task.
                        void masterTask(const RenderContext& context, Image* 
image);
                        
@@ -78,7 +81,11 @@
                            if(qSize>maxQSize) qSize = maxQSize;
                          }  
                        }
-                       static ImageTraverser* create(const vector<string>& 
args);
+
+      // Accessors.
+      
+
+      static ImageTraverser* create(const vector<string>& args);
                        
     private:
       AFImageTraverser(const AFImageTraverser&);
@@ -150,6 +157,8 @@
       
/////////////////////////////////////////////////////////////////////////
       // Arguments.
       Real inner_loop_time;
+
+      
       
     public:
     
@@ -170,8 +179,10 @@
 
         return all;
       }
-               };
 
+      virtual double getInnerLoopTime() { return inner_loop_time; };
+      virtual bool   hasDebugWindow() { return debug_window != 0; };
+               };
 
     
///////////////////////////////////////////////////////////////////////////
     
///////////////////////////////////////////////////////////////////////////
@@ -182,7 +193,7 @@
     private:
       RTRTInterface *rtrt;
       long outer_loops;
-
+    
       double start_time;
       unsigned int start_samples;
 
@@ -190,14 +201,14 @@
     public:
       BenchHelper( RTRTInterface *rtrt_, long outer_loops_ ) :
         rtrt( rtrt_ ), outer_loops( outer_loops_ ) { };
-
+      
       void tryStart( int, int );
       void stop( int, int );
-
-    };
-
     
-       };
+    }; 
+    
+  };
+
 };
 
 #endif

Modified: branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h     (original)
+++ branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h     Sat Sep 17 
18:56:32 2005
@@ -1,6 +1,6 @@
 
-#ifndef Manta_Engine_AFImageTraverser_h
-#define Manta_Engine_AFImageTraverser_h
+#ifndef Manta_Engine_AFRImageTraverser_h
+#define Manta_Engine_AFRImageTraverser_h
 
 #include <SCIRun/Core/Thread/Time.h>
 #include <SCIRun/Core/Thread/Thread.h>
@@ -30,24 +30,27 @@
   
        namespace Afr {
 
-               class AFImageTraverser : public ImageTraverser {
+               class AFRImageTraverser : public ImageTraverser {
     
       friend class AFRPipeline;
     
-               public:
-    
-                       AFImageTraverser(const vector<string>& args);
-                       virtual ~AFImageTraverser();
-                       virtual void setupBegin(SetupContext&, int 
numChannels);
-                       virtual void setupDisplayChannel(SetupContext&);
+               public:    
+                       // AFRImageTraverser(const vector<string>& args);
+                       virtual ~AFRImageTraverser() {  };
+      
+                       virtual void setupBegin(SetupContext&, int 
numChannels) = 0;
+                       virtual void setupDisplayChannel(SetupContext&) = 0;
                        virtual void setupFrame(const RenderContext& context) 
{ /*Undefined for AFRPipeline.*/ };
                        virtual void renderImage(const RenderContext& 
context, Image* image) { /*Undefined for AFRPipeline. */ };
-                       
+
+#if 0
+      // Do these need to be part of the virtual interface?
                        virtual void renderChunk(const RenderContext& 
context, Image* image, int xres, int yres);
                        virtual int renderCrossHair(const RenderContext& 
context, int myID, 
                           Image *image, const int xres, const int yres, 
                           PartialSampleSet *sampleset, const int sscount,
                           bool endChunk=false)=0;
+#endif
                        
                        // Master thread task.
                        virtual void masterTask(const RenderContext& context, 
Image* image)=0;
@@ -55,6 +58,7 @@
                        // Sampler/Renderer task.
                        virtual void clientTask(const RenderContext& context, 
Image* image)=0;
                        virtual inline bool isMaster(int id)=0;
+      
                        // Update kdtree-cut.
                        virtual void adjustTiles(int id, Timestamp 
currenttime)=0;
                        virtual void createStatsWin()=0;
@@ -63,7 +67,21 @@
                        virtual void initStreams(int xres, int yres)=0;
                        virtual void write_Tile_and_Camera(RenderContext& 
context)=0;
                        virtual int setSamplingRate(unsigned int srate)=0;
-                       static ImageTraverser* create(const vector<string>& 
args);
+
+      // Accessors.
+      virtual unsigned int getSamplesDone() = 0;
+      virtual double getInnerLoopTime() = 0;
+      virtual bool hasDebugWindow() = 0;
+      
+      virtual bool allThreadsInitialized() = 0;
+                       // static ImageTraverser* create(const 
vector<string>& args);
+    };
+
+
+
+
+  };  
 };
 
 #endif
+

Modified: branches/AFR/Engine/ImageTraversers/CMakeLists.txt
==============================================================================
--- branches/AFR/Engine/ImageTraversers/CMakeLists.txt  (original)
+++ branches/AFR/Engine/ImageTraversers/CMakeLists.txt  Sat Sep 17 18:56:32 
2005
@@ -7,10 +7,12 @@
      ImageTraversers/DissolveTiledImageTraverser.cc
 
      ImageTraversers/AFRImageTraverser.h
+
      ImageTraversers/AFImageTraverser.h
      ImageTraversers/AFImageTraverser.cc
      ImageTraversers/GSTAFRImageTraverser.h
      ImageTraversers/GSTAFRImageTraverser.cc
+
      ImageTraversers/AFR/CQ.h
      ImageTraversers/AFR/evil.h
      ImageTraversers/AFR/kdtree.cc

Modified: branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc (original)
+++ branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc Sat Sep 17 
18:56:32 2005
@@ -889,48 +889,3 @@
   }
 }
 
-#include <Interface/RTRTInterface.h>
-#include <Interface/Callback.h>
-
-
-// If all of the threads have initialized start the benchmark.
-void BenchHelper::tryStart( int, int ) {
-  
-  GSTAFRImageTraverser *traverser = (GSTAFRImageTraverser 
*)rtrt->getImageTraverser();
-  
-  // Check to see if all threads initialized.
-  if (!traverser->allThreadsInitialized()) {
-    // std::cout << "Try setup failed" << std::endl;
-    rtrt->addOneShotCallback(RTRTInterface::Relative, 10,
-                             Callback::create(this, &BenchHelper::tryStart));
-    return;
-  }
-
-  // std::cout << "Beginning benchmark" << std::endl;
-  
-  // Otherwise
-  start_time = SCIRun::Time::currentSeconds();
-  start_samples = traverser->getSamplesDone();
-  
-  rtrt->addOneShotCallback(RTRTInterface::Relative, outer_loops,
-                           Callback::create(this, &BenchHelper::stop));
-}
-
-// Take the final measurement.
-void BenchHelper::stop (int, int) {
-  
-  GSTAFRImageTraverser *traverser = (GSTAFRImageTraverser 
*)rtrt->getImageTraverser();
-  
-  double end_time = SCIRun::Time::currentSeconds();
-  unsigned int end_samples = traverser->getSamplesDone();
-
-  // Determine samples per second.
-  double sps = (double)(end_samples - start_samples) / (end_time - 
start_time);
-  
-  // Output performance.
-  std::cout << sps << std::endl;
-  
-  delete this;
-  
-  SCIRun::Thread::exitAll(0);
-}

Modified: branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h  (original)
+++ branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h  Sat Sep 17 
18:56:32 2005
@@ -38,6 +38,7 @@
                public:
     
                        GSTAFRImageTraverser(const vector<string>& args);
+    
                        virtual ~GSTAFRImageTraverser();
                        virtual void setupBegin(SetupContext&, int 
numChannels);
                        virtual void setupDisplayChannel(SetupContext&);
@@ -132,8 +133,6 @@
       int samplingrate;
       int *lastxhairindex, *updatecount;
       
-      // Arguments.
-      Real inner_loop_time;
       
/////////////////////////////////////////////////////////////////////////
       // Samples done.
       struct SamplesDone {
@@ -152,7 +151,16 @@
         inline unsigned int load()    { return value; };
 #endif
       };
-      
+    SamplesDone *samples_done;
+
+      // Arguments.
+      Real inner_loop_time;
+
+    int *last_samples_done;
+    // ??????????????
+    double *chunkTimeStamp;
+    bool   *initpass;
+
     public:
     
       // Sum up all of the samples done by all of the threads.
@@ -172,31 +180,11 @@
 
         return all;
       }
-               };
 
-
-    
///////////////////////////////////////////////////////////////////////////
-    
///////////////////////////////////////////////////////////////////////////
-    // SAMPLES PER SECOND BENCH  SAMPLES PER SECOND BENCH  SAMPLES PER SECOND
-    
///////////////////////////////////////////////////////////////////////////
-    
///////////////////////////////////////////////////////////////////////////
-    class BenchHelper {
-    private:
-      RTRTInterface *rtrt;
-      long outer_loops;
-
-      double start_time;
-      unsigned int start_samples;
-
-      
-    public:
-      BenchHelper( RTRTInterface *rtrt_, long outer_loops_ ) :
-        rtrt( rtrt_ ), outer_loops( outer_loops_ ) { };
-
-      void tryStart( int, int );
-      void stop( int, int );
-
-    };
+    // Accessors.
+    virtual double getInnerLoopTime() { return inner_loop_time; };
+    virtual bool hasDebugWindow() { return debug_window != 0; };
+               };
 
     
        };

Modified: branches/AFR/StandAlone/CMakeLists.txt
==============================================================================
--- branches/AFR/StandAlone/CMakeLists.txt      (original)
+++ branches/AFR/StandAlone/CMakeLists.txt      Sat Sep 17 18:56:32 2005
@@ -9,7 +9,22 @@
                             Manta_Core_XUtils
                             SCIRun_Core)
 
- TARGET_LINK_LIBRARIES(manta ${CMAKE_THREAD_LIBS_INIT}
+TARGET_LINK_LIBRARIES(manta ${CMAKE_THREAD_LIBS_INIT}
+                            ${OPENGL_LIBRARIES} 
+                            ${X11_LIBRARIES} 
+                            -lm)
+
+ADD_EXECUTABLE(afr afr.cc)
+TARGET_LINK_LIBRARIES(afr Manta_Engine
+                            Manta_UserInterface
+                            Manta_Model
+                            Manta_Image
+                            Manta_Interface
+                            Manta_Core
+                            Manta_Core_XUtils
+                            SCIRun_Core)
+
+TARGET_LINK_LIBRARIES(afr ${CMAKE_THREAD_LIBS_INIT}
                             ${OPENGL_LIBRARIES} 
                             ${X11_LIBRARIES} 
                             -lm)

Copied: branches/AFR/StandAlone/afr.cc (from r553, 
branches/AFR/StandAlone/manta.cc)
==============================================================================
--- branches/AFR/StandAlone/manta.cc    (original)
+++ branches/AFR/StandAlone/afr.cc      Sat Sep 17 18:56:32 2005
@@ -154,7 +154,7 @@
       throw InternalError("default image not found", __FILE__, __LINE__ );
     if(!rtrt->selectLoadBalancer("workqueue"))
       throw InternalError("default load balancer not found", __FILE__, 
__LINE__ );
-    if(!rtrt->selectImageTraverser("tiled"))
+    if(!rtrt->selectImageTraverser("afr"))
       throw InternalError("default image traverser not found", __FILE__, 
__LINE__ );
     if(!rtrt->selectPixelSampler("singlesample"))
       throw InternalError("default pixel sampler not found", __FILE__, 
__LINE__ );

Modified: branches/AFR/StandAlone/combinestreams.cpp
==============================================================================
--- branches/AFR/StandAlone/combinestreams.cpp  (original)
+++ branches/AFR/StandAlone/combinestreams.cpp  Sat Sep 17 18:56:32 2005
@@ -775,7 +775,7 @@
 
     glutInitWindowSize(globals.width,globals.height);
     char windowname[255];
-    sprintf(windowname,"Sample Stream %3.1f viewer", STREAM_VERSION);
+    sprintf(windowname,"Sample Stream %s viewer", STREAM_VERSION);
     glutCreateWindow(windowname);
     glutDisplayFunc(display);
     glutReshapeFunc(myReshape);




  • [MANTA] r554 - in branches/AFR: Engine/Control Engine/ImageTraversers StandAlone, abe, 09/17/2005

Archive powered by MHonArc 2.6.16.

Top of page