Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r480 - in branches/itanium2: Core/Util Engine/Control Engine/Display Engine/ImageTraversers Engine/ImageTraversers/AFR Interface Model/Cameras fox
- Date: Fri, 19 Aug 2005 01:02:29 -0600 (MDT)
Author: abe
Date: Fri Aug 19 01:02:27 2005
New Revision: 480
Added:
branches/itanium2/Engine/ImageTraversers/AFImageTraverser.cc
- copied unchanged from r479,
trunk/Engine/ImageTraversers/AFImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/AFImageTraverser.h
- copied unchanged from r479,
trunk/Engine/ImageTraversers/AFImageTraverser.h
branches/itanium2/Engine/ImageTraversers/AFR/
- copied from r479, trunk/Engine/ImageTraversers/AFR/
branches/itanium2/Engine/ImageTraversers/AFR/CQ.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/CQ.h
branches/itanium2/Engine/ImageTraversers/AFR/evil.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/evil.h
branches/itanium2/Engine/ImageTraversers/AFR/kdtree.cc
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/kdtree.cc
branches/itanium2/Engine/ImageTraversers/AFR/kdtree.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/kdtree.h
branches/itanium2/Engine/ImageTraversers/AFR/sample.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/sample.h
branches/itanium2/Engine/ImageTraversers/AFR/stats.cc
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/stats.cc
branches/itanium2/Engine/ImageTraversers/AFR/stats.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/stats.h
branches/itanium2/Engine/ImageTraversers/AFR/tiles.cc
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/tiles.cc
branches/itanium2/Engine/ImageTraversers/AFR/tiles.h
- copied unchanged from r479, trunk/Engine/ImageTraversers/AFR/tiles.h
branches/itanium2/Engine/ImageTraversers/DissolveImageTraverser.cc
- copied unchanged from r479,
trunk/Engine/ImageTraversers/DissolveImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/DissolveImageTraverser.h
- copied unchanged from r479,
trunk/Engine/ImageTraversers/DissolveImageTraverser.h
branches/itanium2/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
- copied unchanged from r479,
trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/DissolveTiledImageTraverser.h
- copied unchanged from r479,
trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h
branches/itanium2/Model/Cameras/FisheyeCamera.cc
- copied, changed from r479, trunk/Model/Cameras/FisheyeCamera.cc
branches/itanium2/Model/Cameras/FisheyeCamera.h
- copied, changed from r479, trunk/Model/Cameras/FisheyeCamera.h
Modified:
branches/itanium2/Core/Util/Args.h
branches/itanium2/Engine/Control/RTRT_register.cc
branches/itanium2/Engine/Display/XHelper.cc
branches/itanium2/Engine/Display/XHelper.h
branches/itanium2/Engine/ImageTraversers/CMakeLists.txt
branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.h
branches/itanium2/Engine/ImageTraversers/NullImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/NullImageTraverser.h
branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.cc
branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.h
branches/itanium2/Interface/Camera.h
branches/itanium2/Interface/Context.h
branches/itanium2/Interface/Fragment.h
branches/itanium2/Interface/ImageTraverser.h
branches/itanium2/Model/Cameras/CMakeLists.txt
branches/itanium2/Model/Cameras/EnvironmentCamera.cc
branches/itanium2/Model/Cameras/EnvironmentCamera.h
branches/itanium2/Model/Cameras/OrthogonalCamera.cc
branches/itanium2/Model/Cameras/OrthogonalCamera.h
branches/itanium2/Model/Cameras/PinholeCamera.cc
branches/itanium2/Model/Cameras/PinholeCamera.h
branches/itanium2/fox/FMantaWindow.cc
branches/itanium2/fox/FMantaWindow.h
Log:
Merged all image traverser changes from trunk/ --> branches/itanium2/
Merged over FisheyeCamera.
Added several options to dm_demo menus.
M Core/Util/Args.h
M fox/FMantaWindow.cc
M fox/FMantaWindow.h
M Model/Cameras/EnvironmentCamera.cc
M Model/Cameras/EnvironmentCamera.h
M Model/Cameras/OrthogonalCamera.cc
A Model/Cameras/FisheyeCamera.cc
M Model/Cameras/OrthogonalCamera.h
M Model/Cameras/PinholeCamera.cc
A Model/Cameras/FisheyeCamera.h
M Model/Cameras/CMakeLists.txt
M Model/Cameras/PinholeCamera.h
M Interface/Fragment.h
M Interface/Context.h
M Interface/Camera.h
M Interface/ImageTraverser.h
M Engine/Control/RTRT_register.cc
A Engine/ImageTraversers/DissolveImageTraverser.h
M Engine/ImageTraversers/TiledImageTraverser.cc
M Engine/ImageTraversers/TiledImageTraverser.h
M Engine/ImageTraversers/NullImageTraverser.cc
A Engine/ImageTraversers/DissolveTiledImageTraverser.cc
M Engine/ImageTraversers/NullImageTraverser.h
A Engine/ImageTraversers/DissolveTiledImageTraverser.h
M Engine/ImageTraversers/FramelessImageTraverser.cc
M Engine/ImageTraversers/FramelessImageTraverser.h
A Engine/ImageTraversers/AFR
A Engine/ImageTraversers/AFR/kdtree.cc
A Engine/ImageTraversers/AFR/stats.cc
A Engine/ImageTraversers/AFR/kdtree.h
A Engine/ImageTraversers/AFR/stats.h
A Engine/ImageTraversers/AFR/tiles.cc
A Engine/ImageTraversers/AFR/evil.h
A Engine/ImageTraversers/AFR/tiles.h
A Engine/ImageTraversers/AFR/sample.h
A Engine/ImageTraversers/AFR/CQ.h
A Engine/ImageTraversers/AFImageTraverser.cc
M Engine/ImageTraversers/CMakeLists.txt
A Engine/ImageTraversers/AFImageTraverser.h
A Engine/ImageTraversers/DissolveImageTraverser.cc
M Engine/Display/XHelper.cc
M Engine/Display/XHelper.h
Modified: branches/itanium2/Core/Util/Args.h
==============================================================================
--- branches/itanium2/Core/Util/Args.h (original)
+++ branches/itanium2/Core/Util/Args.h Fri Aug 19 01:02:27 2005
@@ -6,6 +6,7 @@
#include <sgi_stl_warnings_off.h>
#include <string>
#include <vector>
+#include <sstream>
#include <sgi_stl_warnings_on.h>
namespace Manta {
@@ -18,6 +19,30 @@
bool getPointArg(int& i, const vector<string>&, Point& p);
bool getVectorArg(int& i, const vector<string>&, Vector& p);
void parseSpec(const string& spec, string& name, vector<string>& args);
+
+ // Generic version that grabs an argument of type T.
+ template<typename T>
+ bool getArg(int& i, const vector<string>& args, T& result) {
+ // Check to make sure args[i] exists.
+ if(++i >= static_cast<int>(args.size())) {
+ i--;
+ return false;
+ }
+
+ istringstream in(args[i]);
+ T temp;
+ // Attempt to pull in the value
+ in >> temp;
+ if (!in.fail()) {
+ // Everything was OK, so assign it to the return parameter.
+ result = temp;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
// This will separate input into whitespace separated arguments. If
// you want a single argument to contain whitespace you must
Modified: branches/itanium2/Engine/Control/RTRT_register.cc
==============================================================================
--- branches/itanium2/Engine/Control/RTRT_register.cc (original)
+++ branches/itanium2/Engine/Control/RTRT_register.cc Fri Aug 19 01:02:27
2005
@@ -6,6 +6,8 @@
#include <Engine/ImageTraversers/NullImageTraverser.h>
#include <Engine/ImageTraversers/TiledImageTraverser.h>
#include <Engine/ImageTraversers/FramelessImageTraverser.h>
+#include <Engine/ImageTraversers/AFImageTraverser.h>
+#include <Engine/ImageTraversers/DissolveImageTraverser.h>
#include <Engine/LoadBalancers/CyclicLoadBalancer.h>
#include <Engine/LoadBalancers/SimpleLoadBalancer.h>
#include <Engine/LoadBalancers/WQLoadBalancer.h>
@@ -30,7 +32,9 @@
#include <Model/Cameras/EnvironmentCamera.h>
#include <Model/Cameras/PinholeCamera.h>
#include <Model/Cameras/OrthogonalCamera.h>
+#include <Model/Cameras/FisheyeCamera.h>
#include <Model/Groups/BVH.h>
+//#include <Model/Groups/GriddedGroup.h>
#include <Model/Groups/Group.h>
#include <UserInterface/PromptUI.h>
#include <UserInterface/XWindowUI.h>
@@ -48,10 +52,10 @@
// Register image traversers
rtrt->registerComponent("null", &NullImageTraverser::create);
-
rtrt->registerComponent("tiled", &TiledImageTraverser::create);
-
rtrt->registerComponent("frameless", &FramelessImageTraverser::create);
+ rtrt->registerComponent("afr", &AFImageTraverser::create);
+ rtrt->registerComponent("dissolve", &DissolveImageTraverser::create);
// Register image types
rtrt->registerComponent("null", &NullImage::create);
@@ -86,6 +90,7 @@
rtrt->registerComponent("environment", &EnvironmentCamera::create);
rtrt->registerComponent("pinhole", &PinholeCamera::create);
rtrt->registerComponent("orthogonal", &OrthogonalCamera::create);
+ rtrt->registerComponent("fisheye", &FisheyeCamera::create);
// Register shadow algorithms
rtrt->registerComponent("noshadows", &NoShadows::create);
@@ -102,6 +107,7 @@
// Register groups
rtrt->registerObject("group", &Group::create);
+ // rtrt->registerObject("grid", &GriddedGroup::create);
rtrt->registerObject("bvh", &BVH::create);
}
}
Modified: branches/itanium2/Engine/Display/XHelper.cc
==============================================================================
--- branches/itanium2/Engine/Display/XHelper.cc (original)
+++ branches/itanium2/Engine/Display/XHelper.cc Fri Aug 19 01:02:27 2005
@@ -11,6 +11,8 @@
using namespace Manta;
using namespace std;
+SCIRun::Mutex XHelper::Xlock("XHelper::Xlock");
+
XFontStruct* XHelper::getX11Font(Display* dpy,
const char* fontstring) {
// Should we lock X?
Modified: branches/itanium2/Engine/Display/XHelper.h
==============================================================================
--- branches/itanium2/Engine/Display/XHelper.h (original)
+++ branches/itanium2/Engine/Display/XHelper.h Fri Aug 19 01:02:27 2005
@@ -12,6 +12,8 @@
#include <GL/gl.h>
#include <X11/Xlib.h>
+#include <SCIRun/Core/Thread/Mutex.h>
+
#ifndef Manta_Engine_XHelper_h
#define Manta_Engine_XHelper_h
@@ -28,6 +30,10 @@
class XHelper {
public:
+ // Use this to make sure that only one X program is opening
+ // windows at a time.
+ static SCIRun::Mutex Xlock;
+
// If there was an error NULL is returned.
static XFontStruct* getX11Font(Display* dpy,
const char* fontstring=__FONTSTRING__);
Modified: branches/itanium2/Engine/ImageTraversers/CMakeLists.txt
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/CMakeLists.txt (original)
+++ branches/itanium2/Engine/ImageTraversers/CMakeLists.txt Fri Aug 19
01:02:27 2005
@@ -6,4 +6,16 @@
ImageTraversers/TiledImageTraverser.cc
ImageTraversers/FramelessImageTraverser.h
ImageTraversers/FramelessImageTraverser.cc
+ ImageTraversers/DissolveImageTraverser.h
+ ImageTraversers/DissolveImageTraverser.cc
+ ImageTraversers/DissolveTiledImageTraverser.h
+ ImageTraversers/DissolveTiledImageTraverser.cc
+ ImageTraversers/AFImageTraverser.h
+ ImageTraversers/AFImageTraverser.cc
+ ImageTraversers/AFR/stats.h
+ ImageTraversers/AFR/stats.cc
+ ImageTraversers/AFR/tiles.h
+ ImageTraversers/AFR/tiles.cc
+ ImageTraversers/AFR/kdtree.h
+ ImageTraversers/AFR/kdtree.cc
)
Modified: branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.cc
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.cc
(original)
+++ branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.cc Fri
Aug 19 01:02:27 2005
@@ -43,12 +43,17 @@
if(shuffledTiles!=NULL) delete [] shuffledTiles;
}
-void FramelessImageTraverser::setupBegin(const SetupContext& context,
+void FramelessImageTraverser::setupBegin(SetupContext& context,
int numChannels)
{
context.loadBalancer->setupBegin(context, numChannels);
// do not need a pixelSampler since we directly access renderer here
//context.pixelSampler->setupBegin(context, numChannels);
+
+ if (myRandomNumber) delete[] myRandomNumber;
+ myRandomNumber = new MT_RNG[context.numProcs];
+ for(int i=0; i<context.numProcs; i++)
+ myRandomNumber[i].seed_rng(1234); // just to begin give a simple seed
}
// shuffles the uniformly row ordered 2D tiles
@@ -85,31 +90,28 @@
nx = 1;
int tres = xres;
while(tres>1)
- {
- nx++;
- tres /= 2;
- }
+ {
+ nx++;
+ tres /= 2;
+ }
ny = 1;
tres = yres;
while(tres>1)
- {
- ny++;
- tres /= 2;
- }
+ {
+ ny++;
+ tres /= 2;
+ }
nx/=2;
ny/=2;
-
+ nx--;
+ ny--;
xtilesize = 1;
for(i=0; i<nx; i++) xtilesize *= 2;
ytilesize = 1;
for(i=0; i<ny; i++) ytilesize *= 2;
- myRandomNumber = new MT_RNG[context.numProcs];
- for(i=0; i<context.numProcs; i++)
- myRandomNumber[i].seed_rng(1234); // just to begin give a simple seed
-
xtiles = xres/xtilesize;
if(xres%xtilesize>0) xtiles++;
ytiles = yres/ytilesize;
@@ -117,40 +119,43 @@
//printf("tilesize: %d,%d; final tilenum: %d,%d; tilenum: %d,%d",
xtilesize, ytilesize, xtiles, ytiles, nx, ny);
// allocate unifrom row ordered tiles
+ if (shuffledTiles) delete[] shuffledTiles;
shuffledTiles = new UniformTiles[xtiles*ytiles];
for(i=0; i<xtiles*ytiles; i++) {
if(xtiles<ytiles)
- {
- j = i%xtiles;
- k = i/xtiles;
- shuffledTiles[i].xstart = j*xtilesize;
- shuffledTiles[i].xend = (j+1)*xtilesize;
- shuffledTiles[i].ystart = k*ytilesize;
- shuffledTiles[i].yend = (k+1)*ytilesize;
- }
+ {
+ j = i%xtiles;
+ k = i/xtiles;
+ shuffledTiles[i].xstart = j*xtilesize;
+ shuffledTiles[i].xend = (j+1)*xtilesize;
+ shuffledTiles[i].ystart = k*ytilesize;
+ shuffledTiles[i].yend = (k+1)*ytilesize;
+ }
else
- {
- j = i%ytiles;
- k = i/ytiles;
- shuffledTiles[i].xstart = k*xtilesize;
- shuffledTiles[i].xend = (k+1)*xtilesize;
- shuffledTiles[i].ystart = j*ytilesize;
- shuffledTiles[i].yend = (j+1)*ytilesize;
- }
+ {
+ j = i%ytiles;
+ k = i/ytiles;
+ shuffledTiles[i].xstart = k*xtilesize;
+ shuffledTiles[i].xend = (k+1)*xtilesize;
+ shuffledTiles[i].ystart = j*ytilesize;
+ shuffledTiles[i].yend = (j+1)*ytilesize;
+ }
if(shuffledTiles[i].xend>xres)
shuffledTiles[i].xend = xres;
if(shuffledTiles[i].yend>yres)
shuffledTiles[i].yend = yres;
if(shuffledTiles[i].xstart == shuffledTiles[i].xend)
- { printf("error\n"); }
+ { printf("error\n"); }
if( shuffledTiles[i].ystart == shuffledTiles[i].yend)
- { printf("error\n"); }
+ { printf("error\n"); }
}
shuffleMyTiles(); // shuffle them up
int numAssignments = xtiles * ytiles; // these will be the number of
assignments to make to threads
+ cout << "numAssignments = " << numAssignments << endl;
+ cout << "xtiles = " << xtiles << ", ytiles = " << ytiles << endl;
context.loadBalancer->setupDisplayChannel(context, numAssignments);
//context.pixelSampler->setupDisplayChannel(context);
}
@@ -185,15 +190,15 @@
// normalized
double px, py;
if(xres>yres) // let the smaller dimension be mapped to [-1,1]
- {
- px = (double)(-1.0 + 2.0*(double)(fe.x+0.5)/(double)yres);
- py = (double)(-1.0 + 2.0*(double)(fe.y+0.5)/(double)yres);
- }
+ {
+ px = (double)(-1.0 + 2.0*(double)(fe.x+0.5)/(double)yres);
+ py = (double)(-1.0 + 2.0*(double)(fe.y+0.5)/(double)yres);
+ }
else
- {
- px = (double)(-1.0 + 2.0*(double)(fe.x+0.5)/(double)xres);
- py = (double)(-1.0 + 2.0*(double)(fe.y+0.5)/(double)xres);
- }
+ {
+ px = (double)(-1.0 + 2.0*(double)(fe.x+0.5)/(double)xres);
+ py = (double)(-1.0 + 2.0*(double)(fe.y+0.5)/(double)xres);
+ }
//printf("%f, %f\n", (float)px, (float)py);
rays.setPixel(i, 0, px, py, &fe.color);
}
Modified: branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.h
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.h
(original)
+++ branches/itanium2/Engine/ImageTraversers/FramelessImageTraverser.h Fri
Aug 19 01:02:27 2005
@@ -13,26 +13,26 @@
using namespace std;
struct UniformTiles
{
- int xstart, ystart, xend, yend;
+ int xstart, ystart, xend, yend;
};
class FramelessImageTraverser : public ImageTraverser {
public:
FramelessImageTraverser(const vector<string>& args);
virtual ~FramelessImageTraverser();
- virtual void setupBegin(const SetupContext&, int numChannels);
+ virtual void setupBegin(SetupContext&, int numChannels);
virtual void setupDisplayChannel(SetupContext&);
virtual void setupFrame(const RenderContext& context);
virtual void renderImage(const RenderContext& context, Image* image);
- void shuffleMyTiles();
+ void shuffleMyTiles();
void renderFragment(const RenderContext& context, Fragment& fragment,
int xres, int yres);
static ImageTraverser* create(const vector<string>& args);
private:
FramelessImageTraverser(const FramelessImageTraverser&);
FramelessImageTraverser& operator=(const FramelessImageTraverser&);
- int xtilesize, ytilesize;
- UniformTiles *shuffledTiles;
+ int xtilesize, ytilesize;
+ UniformTiles *shuffledTiles;
int xtiles,ytiles;
- MT_RNG *myRandomNumber;
+ MT_RNG *myRandomNumber;
};
}
Modified: branches/itanium2/Engine/ImageTraversers/NullImageTraverser.cc
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/NullImageTraverser.cc
(original)
+++ branches/itanium2/Engine/ImageTraversers/NullImageTraverser.cc Fri
Aug 19 01:02:27 2005
@@ -19,7 +19,7 @@
{
}
-void NullImageTraverser::setupBegin(const SetupContext&, int)
+void NullImageTraverser::setupBegin(SetupContext&, int)
{
}
Modified: branches/itanium2/Engine/ImageTraversers/NullImageTraverser.h
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/NullImageTraverser.h
(original)
+++ branches/itanium2/Engine/ImageTraversers/NullImageTraverser.h Fri
Aug 19 01:02:27 2005
@@ -14,7 +14,7 @@
public:
NullImageTraverser(const vector<string>& args);
virtual ~NullImageTraverser();
- virtual void setupBegin(const SetupContext&, int numChannels);
+ virtual void setupBegin(SetupContext&, int numChannels);
virtual void setupDisplayChannel(SetupContext&);
virtual void setupFrame(const RenderContext& context);
virtual void renderImage(const RenderContext& context, Image* image);
Modified: branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.cc
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.cc
(original)
+++ branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.cc Fri
Aug 19 01:02:27 2005
@@ -37,7 +37,7 @@
{
}
-void TiledImageTraverser::setupBegin(const SetupContext& context, int
numChannels)
+void TiledImageTraverser::setupBegin(SetupContext& context, int numChannels)
{
context.loadBalancer->setupBegin(context, numChannels);
context.pixelSampler->setupBegin(context, numChannels);
Modified: branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.h
==============================================================================
--- branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.h
(original)
+++ branches/itanium2/Engine/ImageTraversers/TiledImageTraverser.h Fri
Aug 19 01:02:27 2005
@@ -14,7 +14,7 @@
public:
TiledImageTraverser(const vector<string>& args);
virtual ~TiledImageTraverser();
- virtual void setupBegin(const SetupContext&, int numChannels);
+ virtual void setupBegin(SetupContext&, int numChannels);
virtual void setupDisplayChannel(SetupContext&);
virtual void setupFrame(const RenderContext& context);
virtual void renderImage(const RenderContext& context, Image* image);
Modified: branches/itanium2/Interface/Camera.h
==============================================================================
--- branches/itanium2/Interface/Camera.h (original)
+++ branches/itanium2/Interface/Camera.h Fri Aug 19 01:02:27 2005
@@ -27,7 +27,8 @@
// Reset the camera.
virtual void reset( const Point &eye_, const Vector &up_,
const Point &lookat_ ) = 0;
- virtual Point project(const Point &point) = 0; // project the
3D point on to the camera image plane
+ virtual Point project(const Point &point) const = 0; // project the 3D
point on to the camera image plane
+
enum TransformCenter {
LookAt,
Eye,
Modified: branches/itanium2/Interface/Context.h
==============================================================================
--- branches/itanium2/Interface/Context.h (original)
+++ branches/itanium2/Interface/Context.h Fri Aug 19 01:02:27 2005
@@ -60,6 +60,7 @@
minPipelineDepth =1;
maxPipelineDepth = 1000;
masterWindow = 0;
+ multipleGLWindows = false;
}
RTRTInterface* rtrt_int;
int channelIndex;
@@ -108,12 +109,21 @@
void clearMasterWindow() {
masterWindow = 0;
}
-
+ void setMultipleGLWindows() {
+ multipleGLWindows = true;
+ }
+ void unsetMultipleGLWindows() {
+ multipleGLWindows = false;
+ }
+ bool getMultipleGLWindows() {
+ return multipleGLWindows;
+ }
private:
SetupContext(const SetupContext&);
SetupContext& operator=(const SetupContext&);
bool stereo;
+ bool multipleGLWindows;
int xres, yres;
int minPipelineDepth, maxPipelineDepth;
bool changed;
Modified: branches/itanium2/Interface/Fragment.h
==============================================================================
--- branches/itanium2/Interface/Fragment.h (original)
+++ branches/itanium2/Interface/Fragment.h Fri Aug 19 01:02:27 2005
@@ -18,6 +18,7 @@
#include <Core/Color/Color.h>
#include <Core/Util/FancyAssert.h>
+#include <Core/Util/Assert.h>
#include <Core/Math/MT_RNG.h>
// TODO:
@@ -35,41 +36,77 @@
static const int ConsecutiveX = 0x01; // Implies a constant Y:
static const int ConstantEye = 0x02;
- Fragment() {} // empty constructor
+ Fragment(): flags(0), size(0) {} // empty constructor
// Creates a "Scan-line" fragment.
Fragment(int which_eye, int xstart, int xend, int y) {
ASSERTRANGE(xend-xstart, 0, MaxFragmentSize+1);
int nx = xend-xstart;
for(int i=0; i< nx;i++){
- data[i].x = i+xstart;
- data[i].y = y;
- data[i].which_eye = which_eye;
+ data[i].x = i+xstart;
+ data[i].y = y;
+ data[i].which_eye = which_eye;
}
flags = ConsecutiveX|ConstantEye;
size = nx;
}
- ~Fragment() {
+ ~Fragment() {}
+
+ void addElement(int x, int y, int which_eye) {
+ ASSERT(size < MaxFragmentSize);
+ data[size].x = x;
+ data[size].y = y;
+ data[size].which_eye = which_eye;
+ size++;
}
-
- void createRandom(int numElements, int xstart, int ystart, int xend, int
yend, int which_eye, MT_RNG &myRandomNumber)
- {
- size = numElements;
- flags = ConstantEye;
- for(int i=0;i<size;i++)
- {
- data[i].x =
(int)(xstart+myRandomNumber.genfrand()*(xend - xstart));
- data[i].y =
(int)(ystart+myRandomNumber.genfrand()*(yend - ystart));
- data[i].which_eye = which_eye;
- }
- }
-
+ // input: a rectangular tile and number of sample locations to generate
+ // output: creates randomly oriented sample locations in given range
+ void createRandom(const int numElements,
+ const int xstart, const int ystart,
+ const int xend, const int yend, const int which_eye,
+ MT_RNG &myRandomNumber)
+ {
+ size = numElements;
+ flags = ConstantEye;
+ for(int i=0;i<size;i++)
+ {
+ data[i].x = (int)(xstart+myRandomNumber.genfrand()*(xend - xstart));
+ data[i].y = (int)(ystart+myRandomNumber.genfrand()*(yend - ystart));
+ data[i].which_eye = which_eye;
+ }
+ }
+
+ // Add a sample location to the fragment and return if fragment
+ // has more space left or not.
+ bool addItem(const int x, const int y, const int which_eye, int index) {
+ data[index].x = x;
+ data[index].y = y;
+ data[index].which_eye = which_eye;
+ if(index+1>=size) return false; else return true;
+ }
+
int getFlags() const {
return flags;
}
+ void setFlags(const int newflags) {
+ flags = newflags;
+ }
+
int getSize() const {
return size;
}
+ void setSize(const int newSize) {
+ size = newSize;
+ }
+
+ void resetSize() {
+ size = 0;
+ }
+ void resetAll() {
+ size = 0;
+ flags = 0;
+ }
+
void setColor(int which, const Color& color) {
data[which].color = color;
}
@@ -80,8 +117,8 @@
// Represents a Pixel
struct Element {
- // Pixel position in image space
- int x, y;
+ // Pixel position in image space
+ int x, y;
int which_eye; // monocular: always 0, stereo: 0=left, 1=right
Color color; // Final result
};
Modified: branches/itanium2/Interface/ImageTraverser.h
==============================================================================
--- branches/itanium2/Interface/ImageTraverser.h (original)
+++ branches/itanium2/Interface/ImageTraverser.h Fri Aug 19 01:02:27
2005
@@ -9,7 +9,7 @@
class ImageTraverser {
public:
virtual ~ImageTraverser();
- virtual void setupBegin(const SetupContext&, int numChannels) = 0;
+ virtual void setupBegin(SetupContext&, int numChannels) = 0;
virtual void setupDisplayChannel(SetupContext&) = 0;
virtual void setupFrame(const RenderContext& context) = 0;
virtual void renderImage(const RenderContext& context, Image* image) = 0;
Modified: branches/itanium2/Model/Cameras/CMakeLists.txt
==============================================================================
--- branches/itanium2/Model/Cameras/CMakeLists.txt (original)
+++ branches/itanium2/Model/Cameras/CMakeLists.txt Fri Aug 19 01:02:27
2005
@@ -5,4 +5,7 @@
Cameras/PinholeCamera.h
Cameras/PinholeCamera.cc
Cameras/OrthogonalCamera.h
- Cameras/OrthogonalCamera.cc)
+ Cameras/OrthogonalCamera.cc
+ Cameras/FisheyeCamera.h
+ Cameras/FisheyeCamera.cc
+ )
Modified: branches/itanium2/Model/Cameras/EnvironmentCamera.cc
==============================================================================
--- branches/itanium2/Model/Cameras/EnvironmentCamera.cc (original)
+++ branches/itanium2/Model/Cameras/EnvironmentCamera.cc Fri Aug 19
01:02:27 2005
@@ -166,7 +166,7 @@
// This functionality doesn't make much sense with the environment camera
}
-Point EnvironmentCamera::project(const Point &point)
+Point EnvironmentCamera::project(const Point &point) const
{
// NOT FINISHED
return Point(0., 0., 0.);
Modified: branches/itanium2/Model/Cameras/EnvironmentCamera.h
==============================================================================
--- branches/itanium2/Model/Cameras/EnvironmentCamera.h (original)
+++ branches/itanium2/Model/Cameras/EnvironmentCamera.h Fri Aug 19 01:02:27
2005
@@ -26,7 +26,7 @@
virtual void dolly(double);
virtual void transform(AffineTransform t, TransformCenter);
virtual void autoview(double fov);
- virtual Point project(const Point &point); // project a 3D point to the
camera image plane
+ virtual Point project(const Point &point) const; // project a 3D point
to the camera image plane
static Camera* create(const vector<string>& args);
virtual Point getPosition() const { return eye; }
Copied: branches/itanium2/Model/Cameras/FisheyeCamera.cc (from r479,
trunk/Model/Cameras/FisheyeCamera.cc)
==============================================================================
--- trunk/Model/Cameras/FisheyeCamera.cc (original)
+++ branches/itanium2/Model/Cameras/FisheyeCamera.cc Fri Aug 19 01:02:27
2005
@@ -180,7 +180,7 @@
setup();
}
-Point FisheyeCamera::project(const Point &point) const
+Point FisheyeCamera::project(const Point &point) const
{
// NOT FINISHED
return Point(0,0,0); // just a placeholder
Copied: branches/itanium2/Model/Cameras/FisheyeCamera.h (from r479,
trunk/Model/Cameras/FisheyeCamera.h)
==============================================================================
--- trunk/Model/Cameras/FisheyeCamera.h (original)
+++ branches/itanium2/Model/Cameras/FisheyeCamera.h Fri Aug 19 01:02:27
2005
@@ -13,8 +13,13 @@
using namespace std;
class FisheyeCamera : public Camera {
+ private:
+ void setup();
public:
FisheyeCamera(const vector<string>& args);
+ FisheyeCamera( const Point &eye_, const Point &lookat_, const Vector
&up_, double hfov_ = 60.0 ) :
+ eye( eye_ ), up( up_ ), lookat( lookat_ ), hfov( hfov_ ) { setup();
hfov = hfov / 90; };
+
virtual ~FisheyeCamera();
virtual void makeRays(RayPacket&) const;
@@ -26,8 +31,15 @@
virtual void autoview(double fov);
virtual Point project(const Point &point) const; // project a 3D point
to the camera image plane
static Camera* create(const vector<string>& args);
+
+ virtual Point getPosition() const { return eye; }
+ virtual Point getLookAt() const { return lookat; };
+ virtual Vector getUp() const { return up; };
+
+ virtual void reset( const Point &eye_, const Vector &up_, const Point
&lookat_ ) {
+ eye = eye_; up = up_; lookat = lookat_; setup(); };
+
private:
- void setup();
Point eye;
Point lookat;
Vector up;
Modified: branches/itanium2/Model/Cameras/OrthogonalCamera.cc
==============================================================================
--- branches/itanium2/Model/Cameras/OrthogonalCamera.cc (original)
+++ branches/itanium2/Model/Cameras/OrthogonalCamera.cc Fri Aug 19 01:02:27
2005
@@ -158,7 +158,7 @@
setup();
}
-Point OrthogonalCamera::project(const Point &point)
+Point OrthogonalCamera::project(const Point &point) const
{
// NOT FINISHED
return Point(0,0,0); // just a placeholder
Modified: branches/itanium2/Model/Cameras/OrthogonalCamera.h
==============================================================================
--- branches/itanium2/Model/Cameras/OrthogonalCamera.h (original)
+++ branches/itanium2/Model/Cameras/OrthogonalCamera.h Fri Aug 19 01:02:27
2005
@@ -25,7 +25,7 @@
virtual void dolly(double);
virtual void transform(AffineTransform t, TransformCenter);
virtual void autoview(double fov);
- virtual Point project(const Point &point);
+ virtual Point project(const Point &point) const;
static Camera* create(const vector<string>& args);
virtual Point getPosition() const { return eye; }
Modified: branches/itanium2/Model/Cameras/PinholeCamera.cc
==============================================================================
--- branches/itanium2/Model/Cameras/PinholeCamera.cc (original)
+++ branches/itanium2/Model/Cameras/PinholeCamera.cc Fri Aug 19 01:02:27
2005
@@ -203,7 +203,7 @@
setup();
}
-Point PinholeCamera::project(const Point &point)
+Point PinholeCamera::project(const Point &point) const
{
// translate camera center to origin
Vector trans(-eye.x(), -eye.y(), -eye.z());
Modified: branches/itanium2/Model/Cameras/PinholeCamera.h
==============================================================================
--- branches/itanium2/Model/Cameras/PinholeCamera.h (original)
+++ branches/itanium2/Model/Cameras/PinholeCamera.h Fri Aug 19 01:02:27
2005
@@ -27,7 +27,7 @@
virtual void transform(AffineTransform t, TransformCenter);
virtual void autoview(double fov);
virtual void output( std::ostream &os );
- virtual Point project(const Point &point); // project a 3D point
to the camera image plane
+ virtual Point project(const Point &point) const; // project a 3D
point to the camera image plane
static Camera* create(const vector<string>& args);
virtual Point getPosition() const { return eye; }
Modified: branches/itanium2/fox/FMantaWindow.cc
==============================================================================
--- branches/itanium2/fox/FMantaWindow.cc (original)
+++ branches/itanium2/fox/FMantaWindow.cc Fri Aug 19 01:02:27 2005
@@ -12,6 +12,7 @@
#include <Model/Cameras/PinholeCamera.h>
#include <Model/Cameras/OrthogonalCamera.h>
#include <Model/Cameras/EnvironmentCamera.h>
+#include <Model/Cameras/FisheyeCamera.h>
#include <Model/MiscObjects/CuttingPlane.h>
#include <iostream>
@@ -39,6 +40,7 @@
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_PINHOLE_CAMERA,
FMantaWindow::onCamera ),
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_ORTHO_CAMERA,
FMantaWindow::onCamera ),
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_ENVIRONMENT_CAMERA,
FMantaWindow::onCamera ),
+ FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_FISHEYE_CAMERA,
FMantaWindow::onCamera ),
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_TEXT_CAMERA,
FMantaWindow::onCameraText ),
// Shadows.
@@ -54,6 +56,7 @@
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_TEXT_SAMPLER,
FMantaWindow::onPixelSamplerText ),
// Traversers
+ FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_TILED_TRAVERSER,
FMantaWindow::onTraverser ),
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_FRAMELESS_TRAVERSER,
FMantaWindow::onTraverser ),
FXMAPFUNC(SEL_COMMAND, FMantaWindow::ID_TEXT_TRAVERSER,
FMantaWindow::onTraverserText ),
@@ -88,6 +91,7 @@
new FXMenuCommand( camera_menu, "Pinhole Camera", 0, this,
ID_PINHOLE_CAMERA );
new FXMenuCommand( camera_menu, "Orthogonal Camera", 0, this,
ID_ORTHO_CAMERA );
new FXMenuCommand( camera_menu, "Environment Camera", 0, this,
ID_ENVIRONMENT_CAMERA );
+ new FXMenuCommand( camera_menu, "Fish Eye Camera", 0, this,
ID_FISHEYE_CAMERA );
new FXMenuCommand( camera_menu, "Enter Text...", 0, this,
ID_TEXT_CAMERA );
new FXMenuTitle ( menu_bar, "Camera", 0, camera_menu );
@@ -109,6 +113,7 @@
// Traverser Menu.
traverser_menu = new FXMenuPane( this );
+ new FXMenuCommand( traverser_menu, "Tiled", 0, this, ID_TILED_TRAVERSER );
new FXMenuCommand( traverser_menu, "Frameless", 0, this,
ID_FRAMELESS_TRAVERSER );
new FXMenuCommand( traverser_menu, "Enter Text...", 0, this,
ID_TEXT_TRAVERSER );
new FXMenuTitle( menu_bar, "Traversers", 0, traverser_menu );
@@ -277,6 +282,11 @@
new_camera = new EnvironmentCamera(
camera->getPosition(), camera->getLookAt(), camera->getUp() );
manta_interface->addTransaction("Camera",
Callback::create(this,&FMantaWindow::mantaCamera1,new_camera));
+ break;
+ case ID_FISHEYE_CAMERA:
+ new_camera = new FisheyeCamera( camera->getPosition(),
camera->getLookAt(), camera->getUp(), 120 );
+ manta_interface->addTransaction("Camera",
+
Callback::create(this,&FMantaWindow::mantaCamera1,new_camera));
break;
};
@@ -371,6 +381,10 @@
int id = FXSELID( key );
switch (id) {
+ case ID_TILED_TRAVERSER:
+ manta_interface->addTransaction("Image Traverser.",
+
Callback::create(this,&FMantaWindow::mantaTraverser,string("tiled")));
+ break;
case ID_FRAMELESS_TRAVERSER:
manta_interface->addTransaction("Image Traverser.",
Callback::create(this,&FMantaWindow::mantaTraverser,string("frameless")));
Modified: branches/itanium2/fox/FMantaWindow.h
==============================================================================
--- branches/itanium2/fox/FMantaWindow.h (original)
+++ branches/itanium2/fox/FMantaWindow.h Fri Aug 19 01:02:27 2005
@@ -82,6 +82,7 @@
ID_PINHOLE_CAMERA,
ID_ORTHO_CAMERA,
ID_ENVIRONMENT_CAMERA,
+ ID_FISHEYE_CAMERA,
ID_TEXT_CAMERA,
// Shadow options.
@@ -97,6 +98,7 @@
ID_TEXT_SAMPLER, // User wants to enter a
description manually.
// Image traverser options.
+ ID_TILED_TRAVERSER,
ID_FRAMELESS_TRAVERSER,
ID_TEXT_TRAVERSER,
- [MANTA] r480 - in branches/itanium2: Core/Util Engine/Control Engine/Display Engine/ImageTraversers Engine/ImageTraversers/AFR Interface Model/Cameras fox, abe, 08/19/2005
Archive powered by MHonArc 2.6.16.