Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r951 - in trunk: Interface Model/Readers fox/afr_demo/Engine/Control fox/afr_demo/Engine/ImageTraversers


Chronological Thread 
  • From: abe@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r951 - in trunk: Interface Model/Readers fox/afr_demo/Engine/Control fox/afr_demo/Engine/ImageTraversers
  • Date: Wed, 22 Feb 2006 01:44:51 -0700 (MST)

Author: abe
Date: Wed Feb 22 01:44:50 2006
New Revision: 951

Modified:
   trunk/Interface/MantaInterface.h
   trunk/Model/Readers/CMakeLists.txt
   trunk/Model/Readers/V3C1.cc
   trunk/Model/Readers/V3C1.h
   trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
   trunk/fox/afr_demo/Engine/Control/AFRPipeline.h
   trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
Log:

Added addParallelOneShot callback to MantaInterface. This functionality is 
used by the grid building code.
M    Interface/MantaInterface.h

Added Parallel One Shot callbacks to the AfrPipeline.
M    fox/afr_demo/Engine/Control/AFRPipeline.cc
M    fox/afr_demo/Engine/Control/AFRPipeline.h
M    fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc

Fixed linking error with loading functions in V3C1.cc
M    Model/Readers/V3C1.cc
M    Model/Readers/V3C1.h
M    Model/Readers/CMakeLists.txt



Modified: trunk/Interface/MantaInterface.h
==============================================================================
--- trunk/Interface/MantaInterface.h    (original)
+++ trunk/Interface/MantaInterface.h    Wed Feb 22 01:44:50 2006
@@ -128,6 +128,8 @@
     };
     virtual void addOneShotCallback(Whence whence, long frame,
                                    CallbackBase_2Data<int, int>* callback) = 
0;
+    virtual void addParallelOneShotCallback(Whence whence, long frame,
+            CallbackBase_2Data<int, int>* callback) = 0;
     virtual void registerSetupCallback(SetupCallback*) = 0;
     virtual void registerSerialAnimationCallback(CallbackBase_3Data<int, 
int, bool&>*) = 0;
     virtual void registerParallelAnimationCallback(CallbackBase_3Data<int, 
int, bool&>*) = 0;

Modified: trunk/Model/Readers/CMakeLists.txt
==============================================================================
--- trunk/Model/Readers/CMakeLists.txt  (original)
+++ trunk/Model/Readers/CMakeLists.txt  Wed Feb 22 01:44:50 2006
@@ -8,6 +8,8 @@
      Readers/BART/parse.cc
      Readers/BART/quat.c
      Readers/PlyReader.cc
+     Readers/V3C1.h
+     Readers/V3C1.cc
 
 )
 

Modified: trunk/Model/Readers/V3C1.cc
==============================================================================
--- trunk/Model/Readers/V3C1.cc (original)
+++ trunk/Model/Readers/V3C1.cc Wed Feb 22 01:44:50 2006
@@ -29,43 +29,52 @@
 #include <Model/Readers/V3C1.h>
 
 #include <Core/Util/Endian.h>
+#include <Core/Exceptions/InputError.h>
 
 #include <SCIRun/Core/Containers/Array1.h>
+#include <SCIRun/Core/Exceptions/ErrnoException.h>
 
 #include <string>
+#include <errno.h>
 
 using namespace SCIRun;
 using namespace std;
 
 using namespace Manta;
 
-size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream);
+namespace V3c1 {
+  size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream);
+};
 
 
///////////////////////////////////////////////////////////////////////////////
 // Endian swapping for V3C1 structs.
-template<>
-inline V3C1Triangle endian_swap( const V3C1Triangle &in ) {
+namespace Manta {
+  template<>
+  inline V3C1Triangle endian_swap( const V3C1Triangle &in ) {
+    
+    V3C1Triangle out;
+    
+    out.vertex[0] = endian_swap( in.vertex[0] );
+    out.vertex[1] = endian_swap( in.vertex[1] );
+    out.vertex[2] = endian_swap( in.vertex[2] );
+    out.color = endian_swap( in.color );
 
-  V3C1Triangle out;
-  
-  out.vertex[0] = endian_swap( in.vertex[0] );
-  out.vertex[1] = endian_swap( in.vertex[1] );
-  out.vertex[2] = endian_swap( in.vertex[2] );
-  out.color = endian_swap( in.color );
+    return out;
+  }
 }
 
-
 
///////////////////////////////////////////////////////////////////////////////
-// 
-void v3c1_load_triangles( Array1<V3C1Triangle> &array, const string &prefix 
) {
-
+//
+extern "C"
+void Manta::v3c1_load_triangles( Array1<V3C1Triangle> &array, const string 
&prefix ) {
+  
   // Attempt to open the input file.
   FILE *file;
-  ((file = fopen( prefix.c_str(), "rb" )) == 0) {
+  if ((file = fopen( prefix.c_str(), "rb" )) == 0) {
     throw ErrnoException( "Error opening .v3c1 file.", errno,
                           __FILE__, __LINE__ );
   }
-
+  
   // Determine input file size.
   fseek(file, 0, SEEK_END);
        size_t file_size = ftell(file);
@@ -80,7 +89,7 @@
   array.resize( array_size );
 
   // Read in the datafile.
-  size_t total_read = fread_64( &array[0], sizeof(V3C1Triangle),
+  size_t total_read = V3c1::fread_64( &array[0], sizeof(V3C1Triangle),
                                 array_size, file );
 
   if (total_read != array_size) {
@@ -97,8 +106,9 @@
 }
 
 
///////////////////////////////////////////////////////////////////////////////
-// 
-void v3c1_load_normals  ( Array1<V3C1Normal>   &array, const string &prefix 
) {
+//
+extern "C"
+void Manta::v3c1_load_normals  ( Array1<V3C1Normal>   &array, const string 
&prefix ) {
 
   throw InputError( "Not finished" );
 }
@@ -106,20 +116,22 @@
 
///////////////////////////////////////////////////////////////////////////////
 // FREAD 64  FREAD 64  FREAD 64  FREAD 64  FREAD 64  FREAD 64  FREAD 64  
FREAD 
 
///////////////////////////////////////////////////////////////////////////////
-size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream)
-{
-       long long chunkSize = 0x7fffffff;
-       long long remaining = size*nitems;
-       while (remaining > 0) {
-               long long toRead = remaining>chunkSize?chunkSize:remaining;
-               long long result;
-               if ((result = fread(ptr, toRead, 1, stream)) != 1) {
-                       fprintf(stderr, "read error: %ld != %ld",
-                                       toRead, result);
-                       return 0;
-               }
-               remaining -= toRead;
-               ptr = (char*)ptr + toRead;
-       }
-       return nitems;
+namespace V3c1 {
+  size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream)
+  {
+    long long chunkSize = 0x7fffffff;
+    long long remaining = size*nitems;
+    while (remaining > 0) {
+      long long toRead = remaining>chunkSize?chunkSize:remaining;
+      long long result;
+      if ((result = fread(ptr, toRead, 1, stream)) != 1) {
+        fprintf(stderr, "read error: %ld != %ld",
+                toRead, result);
+        return 0;
+      }
+      remaining -= toRead;
+      ptr = (char*)ptr + toRead;
+    }
+    return nitems;
+  }
 }

Modified: trunk/Model/Readers/V3C1.h
==============================================================================
--- trunk/Model/Readers/V3C1.h  (original)
+++ trunk/Model/Readers/V3C1.h  Wed Feb 22 01:44:50 2006
@@ -33,9 +33,14 @@
  */
 
 #include <MantaTypes.h>
+#include <Core/Color/Color.h>
 #include <Core/Geometry/VectorT.h>
+
+#include <SCIRun/Core/Util/Assert.h>
 #include <SCIRun/Core/Containers/Array1.h>
 
+#include <string>
+
 namespace Manta {
 
   
/////////////////////////////////////////////////////////////////////////////
@@ -68,8 +73,9 @@
 
   // Load data into arrays of corresponding type and correct endianness if
   // necessary.
-  void v3c1_load_triangles( SCIRun::Array1<V3C1Triangle> &array, const 
string &prefix );
-  void v3c1_load_normals  ( SCIRun::Array1<V3C1Normal>   &array, const 
string &prefix );
+  
+  extern "C" void v3c1_load_triangles( SCIRun::Array1<V3C1Triangle> &array, 
const std::string &prefix );
+  extern "C" void v3c1_load_normals  ( SCIRun::Array1<V3C1Normal>   &array, 
const std::string &prefix );
     
 };
 

Modified: trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc    (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc    Wed Feb 22 01:44:50 
2006
@@ -200,6 +200,19 @@
   callbackLock.writeUnlock();
 }
 
+void AFRPipeline::addParallelOneShotCallback(Whence whence, long frame,
+                                      CallbackBase_2Data<int, int>* callback)
+{
+  callbackLock.writeLock();
+
+  if(whence == MantaInterface::Relative) {
+    frame += animFrameState.frameNumber;
+       }
+
+  parallelOneShots.insert(OneShotMapType::value_type(frame, callback));
+  callbackLock.writeUnlock();
+}
+
 void AFRPipeline::registerSetupCallback(SetupCallback* callback)
 {
   setupCallbacks.push_back(callback);
@@ -732,6 +745,15 @@
 
 void AFRPipeline::doParallelAnimationCallbacks(bool& changed, int proc, int 
numProcs)
 {
+  // Parallel one shot callbacks.
+  ParallelOneShotMapType::iterator iter = parallelOneShots.begin();
+  while(iter != parallelOneShots.end() && iter->first < 
animFrameState.frameNumber){
+    iter->second->call(proc, numProcs);
+    delete iter->second;
+    parallelOneShots.erase(iter);
+    iter = parallelOneShots.begin();
+  }
+
   // All threads do the parallel animation callbacks
   for(ACallbackMapType::iterator iter = parallelAnimationCallbacks.begin();
       iter != parallelAnimationCallbacks.end(); iter++){

Modified: trunk/fox/afr_demo/Engine/Control/AFRPipeline.h
==============================================================================
--- trunk/fox/afr_demo/Engine/Control/AFRPipeline.h     (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.h     Wed Feb 22 01:44:50 
2006
@@ -147,6 +147,8 @@
       // Callbacks
       virtual void addOneShotCallback(Whence whence, long frame,
               CallbackBase_2Data<int, int>* callback);
+      virtual void addParallelOneShotCallback(Whence whence, long frame,
+              CallbackBase_2Data<int, int>* callback);
       virtual void registerSetupCallback(SetupCallback*);
       virtual void registerSerialAnimationCallback(CallbackBase_3Data<int, 
int, bool&>*);
       virtual void registerParallelAnimationCallback(CallbackBase_3Data<int, 
int, bool&>*);
@@ -244,6 +246,8 @@
       // Callbacks
       typedef multimap<long, CallbackBase_2Data<int, int>*, less<long> > 
OneShotMapType;
       OneShotMapType oneShots;
+      typedef multimap<long, CallbackBase_2Data<int, int>*, less<long> > 
ParallelOneShotMapType;
+      ParallelOneShotMapType parallelOneShots;
       typedef vector<CallbackBase_2Data<int, int>*> PRCallbackMapType;
       typedef vector<CallbackBase_3Data<int, int, bool&>*> ACallbackMapType;
       PRCallbackMapType parallelPreRenderCallbacks;

Modified: trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc      
(original)
+++ trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc      Wed 
Feb 22 01:44:50 2006
@@ -167,9 +167,14 @@
         const Kdtree::Triangle &triangle =
             kdtree->getFace( face_index );
         // now project the triangle into imagespace
-        const Vector p1(triangle.v[0].x(), triangle.v[0].y(), 
triangle.v[0].z());
-        const Vector p2(triangle.v[1].x(), triangle.v[1].y(), 
triangle.v[1].z());
-        const Vector p3(triangle.v[2].x(), triangle.v[2].y(), 
triangle.v[2].z());
+        // const Vector p1(triangle.v[0].x(), triangle.v[0].y(), 
triangle.v[0].z());
+        // const Vector p2(triangle.v[1].x(), triangle.v[1].y(), 
triangle.v[1].z());
+        // const Vector p3(triangle.v[2].x(), triangle.v[2].y(), 
triangle.v[2].z());
+
+        const Vector p1 = triangle.v;
+        const Vector p2 = triangle.v + triangle.edge1;
+        const Vector p3 = triangle.v + triangle.edge2;
+        
         Vector rp;
         const AFRCamera *camera = dynamic_cast<const AFRCamera *>( 
context.camera );
         // rp = ((AFRCamera*)context.camera)->project(p1);




  • [MANTA] r951 - in trunk: Interface Model/Readers fox/afr_demo/Engine/Control fox/afr_demo/Engine/ImageTraversers, abe, 02/22/2006

Archive powered by MHonArc 2.6.16.

Top of page