Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r895 - in trunk/fox/afr_demo: . Engine Engine/Control Engine/ImageTraversers Engine/ImageTraversers/AFR Interface Model Model/Cameras StandAlone
- Date: Tue, 7 Feb 2006 13:42:39 -0700 (MST)
Author: abe
Date: Tue Feb 7 13:42:38 2006
New Revision: 895
Added:
trunk/fox/afr_demo/
trunk/fox/afr_demo/CMakeLists.txt
trunk/fox/afr_demo/Engine/
trunk/fox/afr_demo/Engine/Control/
trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
- copied, changed from r894, branches/AFR/Engine/Control/AFRPipeline.cc
trunk/fox/afr_demo/Engine/Control/AFRPipeline.h
- copied, changed from r894, branches/AFR/Engine/Control/AFRPipeline.h
trunk/fox/afr_demo/Engine/ImageTraversers/
trunk/fox/afr_demo/Engine/ImageTraversers/AFR/
- copied from r894, branches/AFR/Engine/ImageTraversers/AFR/
trunk/fox/afr_demo/Engine/ImageTraversers/AFRDebugWindow.cc
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/AFRDebugWindow.cc
trunk/fox/afr_demo/Engine/ImageTraversers/AFRDebugWindow.h
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/AFRDebugWindow.h
trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/AFRImageTraverser.cc
trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.h
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h
trunk/fox/afr_demo/Engine/ImageTraversers/GSTAFRImageTraverser.cc
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc
trunk/fox/afr_demo/Engine/ImageTraversers/GSTAFRImageTraverser.h
- copied unchanged from r894,
branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h
trunk/fox/afr_demo/Interface/
trunk/fox/afr_demo/Model/
trunk/fox/afr_demo/Model/Cameras/
trunk/fox/afr_demo/Model/Cameras/AfrPinholeCamera.cc
- copied unchanged from r894,
branches/AFR/Model/Cameras/PinholeCamera.cc
trunk/fox/afr_demo/Model/Cameras/AfrPinholeCamera.h
- copied unchanged from r894, branches/AFR/Model/Cameras/PinholeCamera.h
trunk/fox/afr_demo/StandAlone/
trunk/fox/afr_demo/StandAlone/CMakeLists.txt
trunk/fox/afr_demo/StandAlone/afr.cc
- copied unchanged from r894, branches/AFR/StandAlone/afr.cc
Log:
Copied some of the AFR code into fox/afr_demo. This will allow us to link the
afr demos to Manta shared libraries. The afr code will use exisiting Manta
interfaces and should be able to take advantage of new scenes and shaders as
they become available.
It doesn't compile yet.
A fox/afr_demo
A fox/afr_demo/Model
A fox/afr_demo/Model/Cameras
A fox/afr_demo/Model/Cameras/AfrPinholeCamera.cc
A fox/afr_demo/Model/Cameras/AfrPinholeCamera.h
A fox/afr_demo/Interface
A fox/afr_demo/Engine
A fox/afr_demo/Engine/Control
A fox/afr_demo/Engine/Control/AFRPipeline.cc
A fox/afr_demo/Engine/Control/AFRPipeline.h
A fox/afr_demo/Engine/ImageTraversers
A fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.h
A fox/afr_demo/Engine/ImageTraversers/AFR
A fox/afr_demo/Engine/ImageTraversers/GSTAFRImageTraverser.cc
A fox/afr_demo/Engine/ImageTraversers/AFRDebugWindow.cc
A fox/afr_demo/Engine/ImageTraversers/GSTAFRImageTraverser.h
A fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
A fox/afr_demo/Engine/ImageTraversers/AFRDebugWindow.h
A fox/afr_demo/StandAlone
A fox/afr_demo/StandAlone/afr.cc
A fox/afr_demo/StandAlone/CMakeLists.txt
A fox/afr_demo/CMakeLists.txt
Added: trunk/fox/afr_demo/CMakeLists.txt
==============================================================================
--- (empty file)
+++ trunk/fox/afr_demo/CMakeLists.txt Tue Feb 7 13:42:38 2006
@@ -0,0 +1,54 @@
+
+SET(BUILD_AFR_DEMO 0 CACHE BOOL "Build Afr Demo")
+IF(BUILD_AFR_DEMO)
+
+ ##########################################################
+ # Add the disc_demo dependent code.
+
+ SET(AFR_SRC
+
+ # Engine.
+ Engine/Control/AFRPipeline.cc
+ Engine/Control/AFRPipeline.h
+ Engine/ImageTraversers/AFRDebugWindow.cc
+ Engine/ImageTraversers/AFRDebugWindow.h
+ Engine/ImageTraversers/AFR/CQ.h
+ Engine/ImageTraversers/AFR/sample.h
+ Engine/ImageTraversers/AFR/kdtree.cc
+ Engine/ImageTraversers/AFR/deepbuffer.h
+ Engine/ImageTraversers/AFR/stats.h
+ Engine/ImageTraversers/AFR/tiles.h
+ Engine/ImageTraversers/AFR/evil.h
+ Engine/ImageTraversers/AFR/stats.cc
+ Engine/ImageTraversers/AFR/kdtree.h
+ Engine/ImageTraversers/AFR/tiles.cc
+ Engine/ImageTraversers/GSTAFRImageTraverser.cc
+ Engine/ImageTraversers/AFRImageTraverser.cc
+ Engine/ImageTraversers/GSTAFRImageTraverser.h
+ Engine/ImageTraversers/AFRImageTraverser.h
+
+ # Model
+ Model/Cameras/AfrPinholeCamera.cc
+ Model/Cameras/AfrPinholeCamera.h
+
+ )
+
+ # Add a library with the code.
+ ADD_LIBRARY( afr_shared
+ ${AFR_SRC}
+ )
+
+ TARGET_LINK_LIBRARIES( afr_shared
+ ${MANTA_TARGET_LINK_LIBRARIES}
+ )
+
+ SUBDIRS(
+ StandAlone
+ )
+
+ # Add the demo root directory to the include path.
+ INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/fox/afr_demo
+ )
+
+ENDIF(BUILD_AFR_DEMO)
\ No newline at end of file
Copied: trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc (from r894,
branches/AFR/Engine/Control/AFRPipeline.cc)
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.cc (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc Tue Feb 7 13:42:38
2006
@@ -33,7 +33,6 @@
#include <Engine/Control/AFRPipeline.h>
#include <Core/Util/Args.h>
-#include <Engine/Control/Worker.h>
#include <Engine/Control/RTRT_register.h>
#include <Interface/AmbientLight.h>
#include <Interface/Background.h>
@@ -60,6 +59,7 @@
#include <Core/Exceptions/IllegalValue.h>
#include <Core/Exceptions/InternalError.h>
#include <Core/Exceptions/InvalidState.h>
+#include <Core/Exceptions/InputError.h>
#include <Core/Thread/Thread.h>
#include <Core/Thread/Time.h>
#include <Core/Util/Assert.h>
@@ -84,7 +84,7 @@
using SCIRun::InvalidState;
using SCIRun::InternalError;
using SCIRun::Thread;
-//using SCIRun::Time;
+using SCIRun::Runnable;
using SCIRun::split_string;
#define RENDER_THREAD_STACKSIZE 1024*1024
@@ -92,12 +92,34 @@
-RTRTInterface* Manta::Afr::createAFRPipeline() {
+MantaInterface* Manta::Afr::createAFRPipeline() {
return new AFRPipeline();
}
///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// AFRPipeline Worker class.
+AFRPipeline::Worker::Worker(AFRPipeline* rtrt, int workerIndex, bool
lateComerFlag)
+ : rtrt(rtrt), workerIndex(workerIndex), lateComerFlag(lateComerFlag)
+{
+}
+
+AFRPipeline::Worker::~Worker()
+{
+}
+
+void AFRPipeline::Worker::run()
+{
+ rtrt->internalRenderLoop(workerIndex, lateComerFlag);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+///////////////////////////////////////////////////////////////////////////////
// CONSTRUCTOR
///////////////////////////////////////////////////////////////////////////////
AFRPipeline::AFRPipeline()
@@ -107,7 +129,8 @@
// barrier2("AFRPipeline frame barrier #2"),
pipeline_setup_barrier("AFRPipeline frame barrier #3"),
transaction_lock("AFRPipeline transaction lock"),
- ids("AFRPipeline id counter", 1)
+ ids("AFRPipeline id counter", 1),
+ thread_storage( 0 )
{
workersWanted=0;
workersRendering=0;
@@ -115,8 +138,8 @@
running=false;
animFrameState.frameNumber = 0;
animFrameState.frameTime = 0;
- timeMode = RTRTInterface::RealTime;
- //timeMode = RTRTInterface::FixedRate;
+ timeMode = MantaInterface::RealTime;
+ //timeMode = MantaInterface::FixedRate;
fixed_sampling_rate = 1600000.0;
timeScale = 1;
frameRate = 15;
@@ -169,7 +192,7 @@
// What about adding callbacks during anim cycle?
callbackLock.writeLock();
- if(whence == RTRTInterface::Relative)
+ if(whence == MantaInterface::Relative)
frame += animFrameState.frameNumber;
oneShots.insert(OneShotMapType::value_type(frame, callback));
@@ -273,7 +296,7 @@
name << "AFRPipeline Worker " << i;
// Construct the thread.
- Thread* t = new Thread(new Manta::Worker(this, i, false),
+ Thread* t = new Thread(new Worker(this, i, false),
name.str().c_str(), 0,
Thread::NotActivated);
@@ -402,7 +425,7 @@
// Invoke setup callbacks.
for(vector<SetupCallback*>::iterator iter = setupCallbacks.begin();
iter != setupCallbacks.end(); iter++)
- (*iter)->setupBegin( globalcontext );
+ (*iter)->setupBegin( globalcontext, numChannels );
// Execute other callbacks and finish pipeline setup.
setupPipelines( globalcontext );
// One thread only.
@@ -533,7 +556,7 @@
// Invoke setup callbacks.
for(vector<SetupCallback*>::iterator iter = setupCallbacks.begin();
iter != setupCallbacks.end(); iter++)
- (*iter)->setupBegin( globalcontext );
+ (*iter)->setupBegin( globalcontext, numChannels );
// Execute other callbacks and finish pipeline setup.
setupPipelines( globalcontext );
@@ -604,8 +627,8 @@
////////////////////////////////////////////////////////////////////////
// Image Display
channel->display->displayImage(myContext,
- image,
- (current_samples-last_samples));
+ image/*,
+
(current_samples-last_samples)*/);
last_samples = current_samples;
}
@@ -647,7 +670,7 @@
RenderContext myContext(this, index, proc, workersRendering,
&renderFrameState,
currentLoadBalancer, currentPixelSampler,
currentRenderer, currentShadowAlgorithm,
- channel->camera, scene);
+ channel->camera, scene, thread_storage );
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Inner Loop: Pipeline Stage 2.
@@ -677,7 +700,7 @@
RenderContext myContext(this, index, proc, workersRendering,
&renderFrameState,
currentLoadBalancer, currentPixelSampler,
currentRenderer, currentShadowAlgorithm,
- channel->camera, scene);
+ channel->camera, scene, thread_storage );
if(allThreadInitDone||innerloopcalls==1)
currentImageTraverser->write_Tile_and_Camera(myContext, getCurrentTime());
currentImageTraverser->outputStats(myContext.proc, afr_context);
@@ -870,9 +893,9 @@
imageDisplays[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listImageDisplays() const
+MantaInterface::listType AFRPipeline::listImageDisplays() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(ImageDisplayMapType::const_iterator iter = imageDisplays.begin();
iter != imageDisplays.end(); iter++)
list.push_back(iter->first);
@@ -905,6 +928,19 @@
pipelineNeedsSetup = true;
}
+ImageDisplay *AFRPipeline::getImageDisplay( int channel ) {
+
+ return channels[channel]->display;
+}
+
+void AFRPipeline::setImageDisplay( int channel, ImageDisplay *display ) {
+
+ channels[channel]->display = display;
+
+ // Setup the image display with the pipeline.
+ pipelineNeedsSetup = true;
+}
+
///////////////////////////////////////////////////////////////////////////////
// SETUP PIPELINES
///////////////////////////////////////////////////////////////////////////////
@@ -926,7 +962,9 @@
currentLoadBalancer,
currentPixelSampler,
- currentRenderer);
+ currentRenderer,
+
+ thread_storage );
// Try to setup the channels repeatedly until the context stops changing.
int iteration = 100;
@@ -1041,15 +1079,32 @@
imageCreators[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listImageTypes() const
+MantaInterface::listType AFRPipeline::listImageTypes() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(ImageCreatorMapType::const_iterator iter = imageCreators.begin();
iter != imageCreators.end(); iter++)
list.push_back(iter->first);
return list;
}
+void AFRPipeline::setImageTraverser( ImageTraverser *image_traverser_ ) {
+
+ currentImageTraverser = dynamic_cast<AFRImageTraverser *>(
image_traverser_ );
+
+ // Make sure that the correct type of image traverser was provided.
+ if (currentImageTraverser == 0) {
+ throw InternalError( "AFRPipeline requires AFRImageTraverser.",
__FILE__, __LINE__ );
+ }
+}
+
+ImageTraverser *AFRPipeline::getImageTraverser() {
+
+ return currentImageTraverser;
+}
+
+
+
bool AFRPipeline::selectImageTraverser(const string& spec)
{
// Parse the command line args.
@@ -1075,9 +1130,9 @@
imageTraversers[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listImageTraversers() const
+MantaInterface::listType AFRPipeline::listImageTraversers() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(ImageTraverserMapType::const_iterator iter = imageTraversers.begin();
iter != imageTraversers.end(); iter++)
list.push_back(iter->first);
@@ -1104,9 +1159,9 @@
loadBalancers[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listLoadBalancers() const
+MantaInterface::listType AFRPipeline::listLoadBalancers() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(LoadBalancerMapType::const_iterator iter = loadBalancers.begin();
iter != loadBalancers.end(); iter++)
list.push_back(iter->first);
@@ -1150,15 +1205,20 @@
pixelSamplers[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listPixelSamplers() const
+MantaInterface::listType AFRPipeline::listPixelSamplers() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(PixelSamplerMapType::const_iterator iter = pixelSamplers.begin();
iter != pixelSamplers.end(); iter++)
list.push_back(iter->first);
return list;
}
+void AFRPipeline::setRenderer( Renderer *renderer_ ) {
+
+ currentRenderer = renderer_;
+}
+
bool AFRPipeline::selectRenderer(const string& spec)
{
string name;
@@ -1179,9 +1239,9 @@
renderers[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listRenderers() const
+MantaInterface::listType AFRPipeline::listRenderers() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(RendererMapType::const_iterator iter = renderers.begin();
iter != renderers.end(); iter++)
list.push_back(iter->first);
@@ -1208,9 +1268,9 @@
idleModes[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listIdleModes() const
+MantaInterface::listType AFRPipeline::listIdleModes() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(IdleModeMapType::const_iterator iter = idleModes.begin();
iter != idleModes.end(); iter++)
list.push_back(iter->first);
@@ -1237,9 +1297,9 @@
shadowAlgorithms[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listShadowAlgorithms() const
+MantaInterface::listType AFRPipeline::listShadowAlgorithms() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(ShadowAlgorithmMapType::const_iterator iter = shadowAlgorithms.begin();
iter != shadowAlgorithms.end(); iter++)
list.push_back(iter->first);
@@ -1266,9 +1326,9 @@
cameras[name] = fun;
}
-RTRTInterface::listType AFRPipeline::listCameras() const
+MantaInterface::listType AFRPipeline::listCameras() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(CameraMapType::const_iterator iter = cameras.begin();
iter != cameras.end(); iter++)
list.push_back(iter->first);
@@ -1348,6 +1408,63 @@
}
}
+///////////////////////////////////////////////////////////////////////////////
+// This dynamically loads code to configure the manta rendering stack.
+void AFRPipeline::readMOStack(const string& name, const vector<string>&
args, bool printErrors )
+{
+ vector<string> dirs = split_string(scenePath, ':');
+ for(vector<string>::iterator dir = dirs.begin(); dir != dirs.end(); dir++){
+
+ // Check to see if the file exists in the directory.
+ string fullname = *dir + "/"+name;
+ struct stat statbuf;
+ if(stat(fullname.c_str(), &statbuf) != 0){
+ // if(printErrors){
+ // cerr << "Error reading " << fullname << ": " << strerror(errno)
<< '\n';
+ // }
+ continue;
+ }
+
+ // Open the file.
+ void* handle=dlopen(fullname.c_str(), RTLD_NOW);
+ if(!handle){
+ if(printErrors){
+ cerr << "Error opening scene: " << fullname << '\n';
+ cerr << dlerror() << '\n';
+ throw InputError( "Could not load stack" );
+ }
+ continue;
+ }
+
+ // Access the make_stack symbol
+ void* stack_fn=dlsym(handle, "make_stack");
+ if(!stack_fn){
+ if(printErrors){
+ cerr << "Stack configuration file found, but make_stack() function
not found\n";
+ }
+ // If we get here, we fail so that we don't keep searching the path
+ // for another library
+ return;
+ }
+
+
///////////////////////////////////////////////////////////////////////////
+ // Invoke the function.
+
+ typedef void (*MakerType)(ReadContext &, const vector<string>&);
+ MakerType make_stack = (MakerType)(stack_fn);
+ ReadContext context(this);
+
+ // Call the function.
+ (*make_stack)(context, args);
+
+ }
+}
+
+void AFRPipeline::readStack(const string &name, const vector<string> &args )
+{
+ readMOStack(name, args, true);
+}
+
void AFRPipeline::setScenePath(const string& path)
{
scenePath = path;
@@ -1373,60 +1490,15 @@
groups[name] = creator;
}
-RTRTInterface::listType AFRPipeline::listGroups() const
+MantaInterface::listType AFRPipeline::listGroups() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(GroupMapType::const_iterator iter = groups.begin();
iter != groups.end(); iter++)
list.push_back(iter->first);
return list;
}
-Scene* AFRPipeline::readMOScene(const string& name, const vector<string>&
args,
- bool printErrors)
-{
- vector<string> dirs = split_string(scenePath, ':');
- for(vector<string>::iterator dir = dirs.begin(); dir != dirs.end(); dir++){
- string fullname = *dir + "/"+name;
- struct stat statbuf;
- if(stat(fullname.c_str(), &statbuf) != 0){
- if(printErrors){
- cerr << "Error reading " << fullname << ": " << strerror(errno) << '\n';
- }
- continue;
- }
- void* handle=dlopen(fullname.c_str(), RTLD_NOW);
- if(!handle){
- if(printErrors){
- cerr << "Error opening scene: " << fullname << '\n';
- cerr << dlerror() << '\n';
- }
- continue;
- }
- void* scene_fn=dlsym(handle, "make_scene");
- if(!scene_fn){
- if(printErrors){
- cerr << "Scene file found, but make_scene() function not found\n";
- }
- // If we get here, we fail so that we don't keep searching the path
- // for another scene
- return 0;
- }
- typedef Scene* (*MakerType)(const ReadContext&, const vector<string>&);
- // MakerType make_scene = reinterpret_cast<MakerType>(scene_fn);
- MakerType make_scene = (MakerType)(scene_fn);
- ReadContext context(this);
- Scene* scene=(*make_scene)(context, args);
- if(!scene){
- if(printErrors)
- cerr << "scene " << name << " did not produce a scene\n";
- return 0;
- }
- return scene;
- }
- return 0;
-}
-
UserInterface* AFRPipeline::createUserInterface(const string& spec)
{
string name;
@@ -1448,9 +1520,9 @@
userInterfaces[name] = creator;
}
-RTRTInterface::listType AFRPipeline::listUserInterfaces() const
+MantaInterface::listType AFRPipeline::listUserInterfaces() const
{
- RTRTInterface::listType list;
+ MantaInterface::listType list;
for(UserInterfaceMapType::const_iterator iter = userInterfaces.begin();
iter != userInterfaces.end(); iter++)
list.push_back(iter->first);
Copied: trunk/fox/afr_demo/Engine/Control/AFRPipeline.h (from r894,
branches/AFR/Engine/Control/AFRPipeline.h)
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.h (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.h Tue Feb 7 13:42:38
2006
@@ -30,7 +30,7 @@
#ifndef Manta_Engine_AFRPipeline_h
#define Manta_Engine_AFRPipeline_h
-#include <Interface/RTRTInterface.h>
+#include <Interface/MantaInterface.h>
#include <Interface/FrameState.h>
#include <Interface/Parameters.h>
#include <Interface/Context.h>
@@ -39,6 +39,9 @@
#include <Core/Thread/CrowdMonitor.h>
#include <Core/Thread/Mutex.h>
#include <Core/Thread/Semaphore.h>
+#include <Core/Thread/Runnable.h>
+#include <Core/Util/ThreadStorage.h>
+
#include <map>
#include <set>
#include <vector>
@@ -61,9 +64,9 @@
class AFRImageTraverser;
- RTRTInterface* createAFRPipeline();
+ MantaInterface* createAFRPipeline();
- class AFRPipeline : public RTRTInterface {
+ class AFRPipeline : public MantaInterface {
public:
AFRPipeline();
~AFRPipeline();
@@ -80,9 +83,12 @@
virtual void getResolution(int channel, bool& stereo, int& xres, int&
yres);
virtual void changeResolution(int channel, int xres, int yres,
bool changePipeline);
+ virtual ImageDisplay *getImageDisplay( int channel );
+ virtual void setImageDisplay( int channel, ImageDisplay *display );
// Image Traversers
- virtual ImageTraverser *getImageTraverser() { return (ImageTraverser
*)currentImageTraverser; };
+ virtual void setImageTraverser( ImageTraverser *image_traverser_ );
+ virtual ImageTraverser *getImageTraverser();
virtual bool selectImageTraverser(const string& spec);
virtual void registerComponent(const string& name,
ImageTraverserCreator creator);
virtual listType listImageTraversers() const;
@@ -104,6 +110,7 @@
virtual listType listPixelSamplers() const;
// Renderers
+ virtual void setRenderer( Renderer *renderer_ );
virtual bool selectRenderer(const string& spec);
virtual void registerComponent(const string& name, RendererCreator
creator);
virtual listType listRenderers() const;
@@ -128,6 +135,7 @@
virtual void setScene(Scene* scene);
virtual Scene *getScene();
virtual bool readScene(const string& sceneSpec/*, const vector<string>
&args*/);
+ virtual void readStack( const string &name, const vector<string> &args
);
virtual void setScenePath(const string& path);
// Groups
@@ -141,6 +149,7 @@
virtual void registerSetupCallback(SetupCallback*);
virtual void registerSerialAnimationCallback(CallbackBase_3Data<int,
int, bool&>*);
virtual void registerParallelAnimationCallback(CallbackBase_3Data<int,
int, bool&>*);
+ virtual void registerTerminationCallback( CallbackBase_1Data<
MantaInterface *> *);
// Control of time/animation
virtual void setTimeMode(TimeMode tm, double rate);
@@ -180,9 +189,22 @@
// Transactions
virtual void addTransaction(TransactionBase*);
protected:
- friend class Worker;
void internalRenderLoop(int workerIndex, bool lateComerFlag);
+
///////////////////////////////////////////////////////////////////////////
+ // Worker class for the AFR Pipeline.
+ class Worker : public SCIRun::Runnable {
+ public:
+ Worker(AFRPipeline* rtrt, int workerIndex, bool lateComerFlag);
+ virtual ~Worker();
+
+ virtual void run();
+ private:
+ AFRPipeline* rtrt;
+ int workerIndex;
+ bool lateComerFlag;
+ };
+
private:
AFRPipeline(const AFRPipeline&);
AFRPipeline& operator=(const AFRPipeline&);
@@ -310,6 +332,8 @@
typedef vector<Channel*> ChannelListType;
ChannelListType channels;
+ ThreadStorage *thread_storage;
+
Scene* scene;
string scenePath;
@@ -317,6 +341,7 @@
Scene* readMOScene(const string& name, const vector<string>& args,
bool printErrors);
+ void readMOStack(const string& name, const vector<string>& args, bool
printErrors );
//////////////////////////////////////////////////////////////////////////
// Pointers to AFR Context for each thread.
Added: trunk/fox/afr_demo/StandAlone/CMakeLists.txt
==============================================================================
--- (empty file)
+++ trunk/fox/afr_demo/StandAlone/CMakeLists.txt Tue Feb 7 13:42:38
2006
@@ -0,0 +1,7 @@
+
+# Add afr demo program
+ADD_EXECUTABLE(afr afr.cc)
+
+TARGET_LINK_LIBRARIES(afr
+ afr_shared
+)
\ No newline at end of file
- [MANTA] r895 - in trunk/fox/afr_demo: . Engine Engine/Control Engine/ImageTraversers Engine/ImageTraversers/AFR Interface Model Model/Cameras StandAlone, abe, 02/07/2006
Archive powered by MHonArc 2.6.16.