Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1972 - in trunk: Engine/ImageTraversers SwigInterface


Chronological Thread 
  • From: abe@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1972 - in trunk: Engine/ImageTraversers SwigInterface
  • Date: Mon, 7 Jan 2008 00:15:46 -0700 (MST)

Author: abe
Date: Mon Jan  7 00:15:44 2008
New Revision: 1972

Added:
   trunk/SwigInterface/ThreadsFrame.py
Modified:
   trunk/Engine/ImageTraversers/DissolveImageTraverser.h
   trunk/Engine/ImageTraversers/TiledImageTraverser.h
   trunk/SwigInterface/runwxmanta.py
   trunk/SwigInterface/wxManta.py
Log:

Added command line options for pixelsampler, imagetraverser, etc. to
runwxmanta.py script. This enables most options of bin/manta on the
command line for example if you wanted to record a camera path with
the GUI and a specific rendering stack component and the play it back
(either in wxmanta or in bin/manta)

Moved all of the command line parsing into runwxmanta (some was
replicated inside wxManta.py and now it's all in the same place).

M    SwigInterface/runwxmanta.py
M    SwigInterface/wxManta.py

Added a dialog to view and change the number of worker threads.
A    SwigInterface/ThreadsFrame.py

Added accessor methods.
M    Engine/ImageTraversers/DissolveImageTraverser.h
M    Engine/ImageTraversers/TiledImageTraverser.h


Modified: trunk/Engine/ImageTraversers/DissolveImageTraverser.h
==============================================================================
--- trunk/Engine/ImageTraversers/DissolveImageTraverser.h       (original)
+++ trunk/Engine/ImageTraversers/DissolveImageTraverser.h       Mon Jan  7 
00:15:44 2008
@@ -33,6 +33,9 @@
   class DissolveImageTraverser : public ImageTraverser {
   public:
     DissolveImageTraverser(const vector<string>& args);
+    DissolveImageTraverser(const unsigned iters_per_frame_) :
+      iters_per_frame( iters_per_frame_ ) { }
+    
     virtual ~DissolveImageTraverser();
     virtual void setupBegin(SetupContext&, int numChannels);
     virtual void setupDisplayChannel(SetupContext&);
@@ -40,6 +43,10 @@
     virtual void renderImage(const RenderContext& context, Image* image);
 
     static ImageTraverser* create(const vector<string>& args);
+
+    // Accessors.
+    unsigned getItersPerFrame() const { return iters_per_frame; };
+    
   private:
     DissolveImageTraverser(const DissolveImageTraverser&);
     DissolveImageTraverser& operator=(const DissolveImageTraverser&);

Modified: trunk/Engine/ImageTraversers/TiledImageTraverser.h
==============================================================================
--- trunk/Engine/ImageTraversers/TiledImageTraverser.h  (original)
+++ trunk/Engine/ImageTraversers/TiledImageTraverser.h  Mon Jan  7 00:15:44 
2008
@@ -50,6 +50,11 @@
     virtual void renderImage(const RenderContext& context, Image* image);
 
     static ImageTraverser* create(const vector<string>& args);
+
+    // Accessors.
+    int getXTileSize() const { return xtilesize; }
+    int getYTileSize() const { return ytilesize; }
+    
   private:
     TiledImageTraverser(const TiledImageTraverser&);
     TiledImageTraverser& operator=(const TiledImageTraverser&);

Added: trunk/SwigInterface/ThreadsFrame.py
==============================================================================
--- (empty file)
+++ trunk/SwigInterface/ThreadsFrame.py Mon Jan  7 00:15:44 2008
@@ -0,0 +1,39 @@
+import wx;
+import re;
+
+from manta import *
+from pycallback import *
+from wx.lib.evtmgr import eventManager as EventManager;
+
+import FloatSpin as FS
+
+class ThreadsFrame(wx.Frame):
+    def __init__(self, parent, engine):
+        wx.Frame.__init__(self, parent=parent, title="Threads")
+
+        self.engine = engine;
+        self.parent = parent;
+
+        vsizer = wx.BoxSizer(wx.VERTICAL);
+
+        # Rendering threads.
+        hsizer = wx.BoxSizer(wx.HORIZONTAL);
+        hsizer.Add(wx.StaticText(self,-1,"Rendering threads: "), 0, 
wx.ALIGN_CENTER);
+        spin = wx.SpinCtrl(self,-1, "", (30,50));
+        spin.SetRange(1,1024);
+        spin.SetValue(engine.numWorkers().value)
+        self.Bind(wx.EVT_SPINCTRL, self.OnThreadsSpin, spin )
+        hsizer.Add(spin, 0, wx.ALIGN_CENTER );
+        hsizer.Add(wx.StaticText(self,-1,"(%d cores)" % 
Thread.numProcessors()), 0, wx.ALIGN_CENTER);
+        vsizer.Add(hsizer);
+
+        # Rendering time.
+        
+        
+        self.SetSizerAndFit( vsizer );
+
+    # Change the number of workers.
+    def OnThreadsSpin(self,event):
+        np = event.GetInt()
+        self.engine.addTransaction("processor count change",
+                                   
manta_new(createMantaTransaction(self.engine.changeNumWorkers, (np,)) ))      
  

Modified: trunk/SwigInterface/runwxmanta.py
==============================================================================
--- trunk/SwigInterface/runwxmanta.py   (original)
+++ trunk/SwigInterface/runwxmanta.py   Mon Jan  7 00:15:44 2008
@@ -3,12 +3,22 @@
 import getopt, sys
 import re
 
+from manta import *
+
 def usage():
     print "Usage: python test.py [options]"
     print "Where options contains one or more of:"
     print "-n --np=<threads>"
     print "-s --scene=\"<scene name>( <scene args > )\""
     print "-r --res=<width>x<height>"
+    print "-h --help"
+    print "bin/manta compatibility options:"
+    print "   --imagetype      <spec>"
+    print "   --shadows        <spec>"    
+    print "   --imagetraverser <spec>"    
+    print "   --loadbalancer   <spec>"
+    print "   --pixelsampler   <spec>"    
+    print "   --renderer       <spec>"
 
 def main():
 
@@ -17,26 +27,67 @@
     size = (512, 512)
     sceneCreator = wxManta.createDefaultScenePython
 
+    # Value of None indicates that a default will be used.
+    imagetype      = None;
+    shadows        = None;
+    imagetraverser = None;
+    loadbalancer   = None;
+    pixelsampler   = None;
+    renderer       = None;
+
     # Parse command line options. Note these have to conform to getopt
     # So -np would be parsed as -n <space> p. Use --np=<threads> instead.
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "n:s:r:", 
["np=","scene=","res="] )
+        opts, args = getopt.getopt(sys.argv[1:],
+                                   "n:s:r:",
+                                   ["np=",
+                                    "scene=",
+                                    "imagetype=",
+                                    "shadows=",
+                                    "imagetraverser=",
+                                    "loadbalancer=",
+                                    "pixelsampler=",
+                                    "renderer=",
+                                    "res=",
+                                    ] )
 
     except getopt.GetoptError:
         usage()
         sys.exit(2)
-        
+
     for o, a in opts:
         if o in ("-n", "--np"):
-            try:
-                num_workers = int(a)
-            except ValueError:
-                usage()
-                sys.exit(2)
-        if o in ("-s", "--scene"):
-            sceneArg = str(a)
-            sceneCreator = lambda frame,engine: 
wxManta.createPluginScene(frame, engine, sceneArg)
-        if o in ("-r", "--res"):
+            if (a == "nprocs"):
+                num_workers = Thread.numProcessors(),
+            else:
+                try:
+                    num_workers = int(a)
+                except ValueError:
+                    usage()
+                    sys.exit(2)
+
+        elif o in ("--imagetype"):
+            imagetype = str(a)
+            
+        elif o in ("--shadows"):
+            shadows = str(a)            
+
+        elif o in ("--imagetraverser"):
+            imagetraverser = str(a)
+
+        elif o in ("--loadbalancer"):
+            loadbalancer = str(a)
+
+        elif o in ("--imagetraverser"):
+            imagetraverser = str(a)
+
+        elif o in ("--pixelsampler"):
+            pixelsampler = str(a)            
+
+        elif o in ("--renderer"):
+            renderer = str(a)
+
+        elif o in ("-r", "--res"):
             m = re.match("^(\d+)x(\d+)$", a );
             if (m):
                 size = (int(m.group(1)), int(m.group(2)))
@@ -44,29 +95,80 @@
                 print "Bad resolution string"
                 usage()
                 sys.exit(2)
-            
+                    
+        elif o in ("-s", "--scene"):
+            sceneArg = str(a)
+            sceneCreator = lambda frame,engine: 
wxManta.createPluginScene(frame, engine, sceneArg)
+        elif o in ("-h", "--help"):
+            usage();
+            sys.exit(0)
 
         # Add additional command line args here.
-        
 
     
###########################################################################
     # Create the application.
-    print "num_workers = "
-    print num_workers
-
     try:            
-        app = wxManta.MantaApp( sceneCreator, num_workers, renderSize=size )
+        app = wxManta.MantaApp( sceneCreator,
+                                num_workers=1,
+                                renderSize=size,
+                                begin_rendering=False
+                                )
         
     except Exception, e:
         print e.type() + " occurred initializing Manta."
         print e.message()
         sys.exit(1)
-        
 
     
###########################################################################
-    # Perform any additional setup
+    # Setup manta factory options before starting the renderer.
+    factory = Factory(app.frame.engine,True)
+
+    if (imagetype):
+        if (not factory.selectImageType( imagetype )):
+            print "Invalid image type, choices:"
+            for key in factory.listImageTypes():
+                print key
+            sys.exit(2)
+        
+    if (shadows):
+        if (not factory.selectShadowAlgorithm( shadows )):
+            print "Invalid shadow algorithm, choices:"
+            for key in factory.listShadowAlgorithms():
+                print key
+            sys.exit(2)
+    
+    if (imagetraverser):
+        if (not factory.selectImageTraverser( imagetraverser )):
+            print "Invalid image traverser, choices:"
+            for key in factory.listImageTraversers():
+                print key
+            sys.exit(2)
+            
+    if (loadbalancer):
+        if (not factory.selectLoadBalancer( loadbalancer )):
+            print "Invalid load balancer, choices:"
+            for key in factory.listLoadBalancers():
+                print key
+            sys.exit(2)
+            
+    if (pixelsampler):
+        if (not factory.selectPixelSampler( pixelsampler )):
+            print "Invalid pixel sampler, choices:"
+            for key in factory.listPixelSamplers():
+                print key
+            sys.exit(2)
+            
+    if (renderer):
+        if (not factory.selectRenderer( renderer )):
+            print "Invalid renderer, choices:"
+            for key in factory.listRenderers():
+                print key        
+            sys.exit(2)
+
+    # Perform any additional setup here.
 
     # Start rendering.
+    app.frame.StartEngine()
     app.MainLoop()
 
 if __name__ == "__main__":

Modified: trunk/SwigInterface/wxManta.py
==============================================================================
--- trunk/SwigInterface/wxManta.py      (original)
+++ trunk/SwigInterface/wxManta.py      Mon Jan  7 00:15:44 2008
@@ -8,6 +8,7 @@
 
 import wx
 import sys
+import getopt
 import time
 import string
 import re
@@ -28,6 +29,7 @@
 from CameraFrame import *
 from LightFrame  import *
 from MiscFrames import *
+from ThreadsFrame import *
 
 from wx.lib.evtmgr import eventManager as EventManager;
 
@@ -199,6 +201,7 @@
         self.init = 0
         self.prev_time = time.time()
         self.updateFramerate = updateFramerate
+        self.framerate = 1;
 
         self.Bind(wx.EVT_SIZE, self.OnSize)
 
@@ -251,15 +254,20 @@
 
###############################################################################
 # MANTA FRAME          MANTA FRAME          MANTA FRAME          MANTA FRAME 
  
 
###############################################################################
-###############################################################################
        
+###############################################################################
+
 class MantaFrame(wx.Frame):
     def __init__(self,
                  initialize_callback,
                  num_workers,
                  renderSize,
                  parent=None,
-                 title="Manta"     
+                 title="Manta",
                  ):
+        """Note this constructor doesn't Show the frame or call
+        Manta's beginRendering, in case a derived class should preform
+        additional setup first."""
+        
         wx.Frame.__init__(self, parent=parent, title=title)
 
         # Setup events
@@ -280,6 +288,12 @@
         self.Bind(wx.EVT_MENU, self.OnAbout,
                   manta_menu.Append(wx.NewId(), "About Manta"))
 
+        # Threads.
+        dialog_id = wx.NewId()
+        self.dialog_map[dialog_id] = ThreadsFrame
+        self.Bind(wx.EVT_MENU, self.OnShowDialog, 
+                  manta_menu.Append(dialog_id, "Threads"))
+
         # Python Shell
         dialog_id = wx.NewId()
         self.dialog_map[dialog_id] = MantaShellFrame
@@ -405,16 +419,6 @@
         self.SetMinSize(self.GetSize() - self.panel.GetSize()
                         + self.panel.GetMinSize())
 
-
-        ############################################################
-        # Start up the renderer
-        try:
-            self.engine.beginRendering(False)
-            
-        except Exception, e:
-            print e.type() + " occurred starting Manta"
-            print e.message()
-
         
#######################################################################
         # Setup the UI events.
         EventManager.Register( self.OnMotion,     wx.EVT_MOTION, self.canvas 
)
@@ -441,7 +445,6 @@
         self.timeView = None
         self.animationCallbackHandle = None
         
-
     
###########################################################################
     ## OnSize
     
###########################################################################
@@ -464,6 +467,13 @@
         self.Destroy()
 
     
###########################################################################
+    ## StartEngine
+    
###########################################################################
+    def StartEngine(self):
+        self.Show()
+        self.engine.beginRendering(False)
+
+    
###########################################################################
     ## ShutdownEngine
     
###########################################################################
     def ShutdownEngine(self):
@@ -887,30 +897,21 @@
                  num_workers = Thread.numProcessors(),
                  renderSize  = wx.Size(xres,yres),
                  redirect=False,
-                 filename=None, commandLine = []):
+                 filename=None,
+                 begin_rendering=True):
         wx.App.__init__(self, redirect, filename)
-        
-        for o, a in commandLine:   
-            if o in ("np"):
-                try:
-                    num_workers = int(a[0])
-                    print str("num_workers: ") + str(int(a[0])) 
-                except ValueError:
-                    sys.exit(2)
-            else:
-                print str("ERROR: unrecognized command line option: ") + 
str(o)
-                usage()
-                sys.exit(2)
 
-        try:
+        # Create a manta frame with the given initialize_callback function.
+        self.frame = MantaFrame( initialize_callback_, num_workers, 
renderSize )
 
-            # Create a manta frame with the given initialize_callback 
function.
-            self.frame = MantaFrame( initialize_callback_, num_workers, 
renderSize )
+        if (begin_rendering):
+            
+            # Display the frame and create GL context.
             self.frame.Show()
 
-        except Exception, e:
-            print e.type() + " occurred intializing program"
-            print e.message()
+            # Begin rendering frames.            
+            self.frame.StartEngine();
+            
 
 
 




  • [Manta] r1972 - in trunk: Engine/ImageTraversers SwigInterface, abe, 01/07/2008

Archive powered by MHonArc 2.6.16.

Top of page