Manta Interactive Ray Tracer Development Mailing List

Text archives Help


Re: [MANTA] r292 - in trunk: Engine/Control Engine/Display Engine/IdleModes Interface UserInterface


Chronological Thread 
  • From: Christiaan Paul Gribble <cgribble@sci.utah.edu>
  • To: manta@sci.utah.edu
  • Subject: Re: [MANTA] r292 - in trunk: Engine/Control Engine/Display Engine/IdleModes Interface UserInterface
  • Date: Thu, 12 May 2005 21:43:04 -0600

Hey guys,

Just a heads up: Image resizing appears to be broken on Linux. James: I haven't had time to dig into it, but it's acting like it was earlier on muse and simply hiding/unhiding the window doesn't fix it either.

C

bigler@sci.utah.edu wrote:
Author: bigler
Date: Thu May 12 14:23:19 2005
New Revision: 292

Modified:
   trunk/Engine/Control/RTRT.cc
   trunk/Engine/Control/RTRT.h
   trunk/Engine/Display/OpenGLDisplay.cc
   trunk/Engine/IdleModes/ZoomIdleMode.cc
   trunk/Interface/Callback.h
   trunk/Interface/CallbackHelpers.h
   trunk/Interface/RTRTInterface.h
   trunk/UserInterface/XWindowUI.cc
   trunk/UserInterface/XWindowUI.h
Log:

Changed RTRTInterface::changeResolution to take a changePipeline
argument and not take a stereo argument.

Added 2 Data 3 argument and 4 Data 0 argument call back functions.

Added ability to resize image.



Modified: trunk/Engine/Control/RTRT.cc
==============================================================================
--- trunk/Engine/Control/RTRT.cc        (original)
+++ trunk/Engine/Control/RTRT.cc        Thu May 12 14:23:19 2005
@@ -336,6 +336,7 @@
       }
if(pipelineNeedsSetup){
+        cerr << "RTRT::internalRenderLoop::pipelineNeedsSetup = true\n";
        // Negotiate the image pipeline for each channel
        if(proc == 0){
          setupPipelines(numProcs);
@@ -580,11 +581,13 @@
   yres = channels[channel]->yres;
 }
-void RTRT::changeResolution(int channel, bool stereo, int xres, int yres)
+void RTRT::changeResolution(int channel, int xres, int yres,
+                            bool changePipeline)
 {
-  channels[channel]->stereo = stereo;
   channels[channel]->xres = xres;
   channels[channel]->yres = yres;
+  if (changePipeline)
+    pipelineNeedsSetup = true;
 }
void RTRT::setupPipelines(int numProcs)

Modified: trunk/Engine/Control/RTRT.h
==============================================================================
--- trunk/Engine/Control/RTRT.h (original)
+++ trunk/Engine/Control/RTRT.h Thu May 12 14:23:19 2005
@@ -40,7 +40,8 @@
     virtual listType listImageDisplays() const;
     virtual Camera* getCamera(int channel) const;
     virtual void getResolution(int channel, bool& stereo, int& xres, int& 
yres);
-    virtual void changeResolution(int channel, bool stereo, int xres, int 
yres);
+    virtual void changeResolution(int channel, int xres, int yres,
+                                  bool changePipeline);
// Image Traversers
     virtual bool selectImageTraverser(const string& spec);

Modified: trunk/Engine/Display/OpenGLDisplay.cc
==============================================================================
--- trunk/Engine/Display/OpenGLDisplay.cc       (original)
+++ trunk/Engine/Display/OpenGLDisplay.cc       Thu May 12 14:23:19 2005
@@ -72,6 +72,7 @@
   bool stereo;
   int xres, yres;
   context.getResolution(stereo, xres, yres);
+  cerr << "OpenGLDisplay::setupDisplayChannel: res("<<xres<<", 
"<<yres<<")\n";
   if(!windowOpen){
     createWindow(xres, yres, context.masterWindow);
     old_xres = xres;
@@ -209,11 +210,13 @@
       throw InternalError("glXMakeCurrent failed!\n");
     madeCurrent=true;
   }
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
   bool stereo;
   int xres, yres;
   image->getResolution(stereo, xres, yres);
+  //  cerr << "OpenGLDisplay::displayImage:: res("<<xres<<", "<<yres<<")\n";
+  glViewport(0, 0, xres, yres);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
   gluOrtho2D(0, xres, 0, yres);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

Modified: trunk/Engine/IdleModes/ZoomIdleMode.cc
==============================================================================
--- trunk/Engine/IdleModes/ZoomIdleMode.cc      (original)
+++ trunk/Engine/IdleModes/ZoomIdleMode.cc      Thu May 12 14:23:19 2005
@@ -54,7 +54,7 @@
         channeldata[channel].yres = -1;
       }
     }
-    context.rtrt_int->changeResolution(channel, stereo, xres, yres);
+    context.rtrt_int->changeResolution(channel, xres, yres, false);
   }
   setupNeeded = true;
 }

Modified: trunk/Interface/Callback.h
==============================================================================
--- trunk/Interface/Callback.h  (original)
+++ trunk/Interface/Callback.h  Thu May 12 14:23:19 2005
@@ -50,6 +50,14 @@
       return new Callback_2Data_1Arg<T, Data1, Data2, Arg1>(ptr, pmf, arg1);
     }
+ template<class T, typename Data1, typename Data2,
+             typename Arg1, typename Arg2, typename Arg3> static
+    CallbackBase_2Data<Data1, Data2>*
+    create(T* ptr, void (T::*pmf)(Data1, Data2, Arg1, Arg2, Arg3),
+           Arg1 arg1, Arg2 arg2, Arg3 arg3) {
+      return new Callback_2Data_3Arg<T, Data1, Data2, Arg1, Arg2, Arg3>(ptr, 
pmf, arg1, arg2, arg3);
+    }
+
     // 3 Data elements
     template<class T, typename Data1, typename Data2, typename Data3> static
     CallbackBase_3Data<Data1, Data2, Data3>*
@@ -61,6 +69,13 @@
     CallbackBase_3Data<Data1, Data2, Data3>*
     create(T* ptr, void (T::*pmf)(Data1, Data2, Data3, Arg1), Arg1 arg1) {
       return new Callback_3Data_1Arg<T, Data1, Data2, Data3, Arg1>(ptr, pmf, 
arg1);
+    }
+
+    // 4 data elements
+    template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4> static
+    CallbackBase_4Data<Data1, Data2, Data3, Data4>*
+    create(T* ptr, void (T::*pmf)(Data1, Data2, Data3, Data4)) {
+      return new Callback_4Data_0Arg<T, Data1, Data2, Data3, Data4>(ptr, 
pmf);
     }
// 5 data elements

Modified: trunk/Interface/CallbackHelpers.h
==============================================================================
--- trunk/Interface/CallbackHelpers.h   (original)
+++ trunk/Interface/CallbackHelpers.h   Thu May 12 14:23:19 2005
@@ -4,6 +4,7 @@
// You should not use these directly - use Callback::create instead
 namespace Manta {
+  // 0 Data
   class CallbackBase_0Data {
   public:
     CallbackBase_0Data()
@@ -17,6 +18,8 @@
     CallbackBase_0Data(const CallbackBase_0Data&);
     CallbackBase_0Data& operator=(const CallbackBase_0Data&);
   };
+
+  // 1 Data
   template<typename Data1>
   class CallbackBase_1Data {
   public:
@@ -31,6 +34,8 @@
     CallbackBase_1Data(const CallbackBase_1Data&);
     CallbackBase_1Data& operator=(const CallbackBase_1Data&);
   };
+
+  // 2 Data
   template<typename Data1, typename Data2>
   class CallbackBase_2Data {
   public:
@@ -45,6 +50,8 @@
     CallbackBase_2Data(const CallbackBase_2Data&);
     CallbackBase_2Data& operator=(const CallbackBase_2Data&);
   };
+
+  // 3 Data
   template<typename Data1, typename Data2, typename Data3>
   class CallbackBase_3Data {
   public:
@@ -59,6 +66,24 @@
     CallbackBase_3Data(const CallbackBase_3Data&);
     CallbackBase_3Data& operator=(const CallbackBase_3Data&);
   };
+
+  // 4 Data
+  template<typename Data1, typename Data2, typename Data3, typename Data4>
+  class CallbackBase_4Data {
+  public:
+    CallbackBase_4Data()
+    {
+    }
+    virtual ~CallbackBase_4Data()
+    {
+    }
+    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4) = 
0;
+  private:
+    CallbackBase_4Data(const CallbackBase_4Data&);
+    CallbackBase_4Data& operator=(const CallbackBase_4Data&);
+  };
+
+  // 5 Data
   template<typename Data1, typename Data2, typename Data3, typename Data4, 
typename Data5>
   class CallbackBase_5Data {
   public:
@@ -73,6 +98,8 @@
     CallbackBase_5Data(const CallbackBase_5Data&);
     CallbackBase_5Data& operator=(const CallbackBase_5Data&);
   };
+
+  // 6 Data
   template<typename Data1, typename Data2, typename Data3, typename Data4, 
typename Data5, typename Data6>
   class CallbackBase_6Data {
   public:
@@ -88,6 +115,10 @@
     CallbackBase_6Data& operator=(const CallbackBase_6Data&);
   };
+ //////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////
+  // These are the actuall implementations with the different number
+  // of arguments.
// 0 Data
   template<class T>
@@ -230,6 +261,30 @@
     Arg1 arg1;
   };
+ template<class T, typename Data1, typename Data2,
+           typename Arg1, typename Arg2, typename Arg3>
+  class Callback_2Data_3Arg : public CallbackBase_2Data<Data1, Data2> {
+  public:
+    Callback_2Data_3Arg(T* ptr, void (T::*pmf)(Data1, Data2, Arg1, Arg2, 
Arg3),
+                        Arg1 arg1, Arg2 arg2, Arg3 arg3)
+      : ptr(ptr), pmf(pmf), arg1(arg1), arg2(arg2), arg3(arg3)
+    {
+    }
+    virtual ~Callback_2Data_3Arg()
+    {
+    }
+    virtual void call(Data1 data1, Data2 data2)
+    {
+      (ptr->*pmf)(data1, data2, arg1, arg2, arg3);
+    }
+  private:
+    T* ptr;
+    void (T::*pmf)(Data1, Data2, Arg1, Arg2, Arg3);
+    Arg1 arg1;
+    Arg2 arg2;
+    Arg3 arg3;
+  };
+
   // 3 Data
   template<class T, typename Data1, typename Data2, typename Data3>
   class Callback_3Data_0Arg : public CallbackBase_3Data<Data1, Data2, Data3> 
{
@@ -268,6 +323,26 @@
     T* ptr;
     void (T::*pmf)(Data1, Data2, Data3, Arg1);
     Arg1 arg1;
+  };
+
+  // 4 Data
+  template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4>
+  class Callback_4Data_0Arg : public CallbackBase_4Data<Data1, Data2, Data3, 
Data4> {
+  public:
+    Callback_4Data_0Arg(T* ptr, void (T::*pmf)(Data1, Data2, Data3, Data4))
+      : ptr(ptr), pmf(pmf)
+    {
+    }
+    virtual ~Callback_4Data_0Arg()
+    {
+    }
+    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4)
+    {
+      (ptr->*pmf)(data1, data2, data3, data4);
+    }
+  private:
+    T* ptr;
+    void (T::*pmf)(Data1, Data2, Data3, Data4);
   };
// 5 Data

Modified: trunk/Interface/RTRTInterface.h
==============================================================================
--- trunk/Interface/RTRTInterface.h     (original)
+++ trunk/Interface/RTRTInterface.h     Thu May 12 14:23:19 2005
@@ -42,7 +42,11 @@
     virtual listType listImageDisplays() const = 0;
     virtual Camera* getCamera(int channel) const = 0;
     virtual void getResolution(int channel, bool& stereo, int& xres, int& 
yres) = 0;
-    virtual void changeResolution(int channel, bool stereo, int xres, int 
yres) = 0;
+    // You can change the resolution of the rendered image without
+    // having to change the pipeline.  If you want the pipeline
+    // changed, then set this parameter to true.
+    virtual void changeResolution(int channel, int xres, int yres,
+                                  bool changePipeline) = 0;
// Image Traversers
     typedef ImageTraverser* (*ImageTraverserCreator)(const vector<string>& 
args);

Modified: trunk/UserInterface/XWindowUI.cc
==============================================================================
--- trunk/UserInterface/XWindowUI.cc    (original)
+++ trunk/UserInterface/XWindowUI.cc    Thu May 12 14:23:19 2005
@@ -1,4 +1,3 @@
-
 #include <UserInterface/XWindowUI.h>
 #include <Core/Util/Args.h>
 #include <Interface/Camera.h>
@@ -42,7 +41,7 @@
 using namespace std;
UserInterface* XWindowUI::create(const vector<string>& args,
-                               RTRTInterface *rtrt_interface)
+                                 RTRTInterface *rtrt_interface)
 {
   UserInterface *newUI = new XWindowUI(args, rtrt_interface);
   return newUI;
@@ -307,6 +306,11 @@
   mouse.push_back(entry);
 }
+void XWindowUI::changeResolution(int, int, int channel,
+                                 int new_xres, int new_yres)
+{
+  rtrt_interface->changeResolution(channel, new_xres, new_yres, true);
+}
void XWindowUI::printhelp(ostream& out)
 {
@@ -691,6 +695,17 @@
       //cerr << "Dropped button motion event for button " << 
ias.current_button
       //<< ", probably because multiple mouse buttons pressed\n";
     }
+    break;
+  case ConfigureNotify:
+    {
+      int new_xres = e.xconfigure.width;
+      int new_yres = e.xconfigure.height;
+      XWindow* window = windows[channel];
+      if(new_xres != window->xres || new_yres != window->yres)
+        rtrt_interface->addOneShotCallback(RTRTInterface::Relative, 0,
+                           Callback::create(this, 
&XWindowUI::changeResolution,
+                                            channel, new_xres, new_yres));
+    } // case ConfigureNotify
     break;
   default:
     cerr << "Unknown X event: " << e.type << '\n';

Modified: trunk/UserInterface/XWindowUI.h
==============================================================================
--- trunk/UserInterface/XWindowUI.h     (original)
+++ trunk/UserInterface/XWindowUI.h     Thu May 12 14:23:19 2005
@@ -57,6 +57,9 @@
                         const string& description,
                         MouseEventCallbackType* events);
+ // This is the callback function used to notify the engine that we
+    // want a resize.
+    void changeResolution(int, int, int channel, int new_xres, int new_yres);
   protected:
     void register_default_keys();
     void register_default_mouse();





Archive powered by MHonArc 2.6.16.

Top of page