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