]> git.mxchange.org Git - flightgear.git/blobdiff - Scenery/tile.hxx
Attempting to iron out seg faults and crashes.
[flightgear.git] / Scenery / tile.hxx
index 535b9ff7c53fd06be967d4a643df90a8598650f3..dff5e12f8141db136fa2223a60cdbab870919a9b 100644 (file)
 #include <GL/glut.h>
 #include <XGL/xgl.h>
 
-#ifdef __sun__
+#if defined ( __sun__ )
 extern "C" void *memmove(void *, const void *, size_t);
 extern "C" void *memset(void *, int, size_t);
 #endif
 
 #include <list>         // STL list
-#ifdef NEEDNAMESPACESTD
-using namespace std;
-#endif
 
 #include <Bucket/bucketutils.h>
 #include <Include/fg_types.h>
 #include <Math/mat3.h>
 
+#ifdef NEEDNAMESPACESTD
+using namespace std;
+#endif
+
 
 // Maximum nodes per tile
-#define MAX_NODES 1000
+#define MAX_NODES 2000
+
 
+// Forward declarations
+class fgTILE;
+class fgMATERIAL;
 
-typedef struct {
+
+class fgFACE {
+public:
     int n1, n2, n3;
-} fgFACE;
+
+    fgFACE();
+    ~fgFACE();
+    fgFACE( const fgFACE & image );
+    bool operator < ( const fgFACE & rhs );
+    bool operator == ( const fgFACE & rhs );
+};
 
 
 // Object fragment data class
@@ -84,10 +97,10 @@ public:
     // material property this fragment is assigned to.
 
     // material property pointer
-    void *material_ptr;
+    fgMATERIAL *material_ptr;
 
     // tile pointer
-    void *tile_ptr;
+    fgTILE *tile_ptr;
 
     // OpenGL display list for fragment data
     GLint display_list;
@@ -95,8 +108,8 @@ public:
     // face list (this indexes into the master tile vertex list)
     list < fgFACE > faces;
 
-    // Constructor
-    fgFRAGMENT ( void );
+    // number of faces in this fragment
+    int num_faces;
 
     // Add a face to the face list
     void add_face(int n1, int n2, int n3);
@@ -104,13 +117,22 @@ public:
     // test if line intesects with this fragment.  p0 and p1 are the
     // two line end points of the line.  If side_flag is true, check
     // to see that end points are on opposite sides of face.  Returns
-    // 1 if it does, 0 otherwise.  If it intesects, result is the
-    // point of intersection
+    // 1 if it intersection found, 0 otherwise.  If it intesects,
+    // result is the point of intersection
     int intersect( fgPoint3d *end0, fgPoint3d *end1, int side_flag,
                   fgPoint3d *result);
 
+    // Constructors
+    fgFRAGMENT ();
+    fgFRAGMENT ( const fgFRAGMENT &image );
+
     // Destructor
-    ~fgFRAGMENT ( void );
+    ~fgFRAGMENT ( );
+
+    // operators
+    fgFRAGMENT & operator = ( const fgFRAGMENT & rhs );
+    bool operator == ( const fgFRAGMENT & rhs );
+    bool operator <  ( const fgFRAGMENT & rhs );
 };
 
 
@@ -149,6 +171,36 @@ public:
 
 
 // $Log$
+// Revision 1.17  1998/08/22 14:49:58  curt
+// Attempting to iron out seg faults and crashes.
+// Did some shuffling to fix a initialization order problem between view
+// position, scenery elevation.
+//
+// Revision 1.16  1998/08/22 02:01:34  curt
+// increased fragment list size.
+//
+// Revision 1.15  1998/08/20 15:12:06  curt
+// Used a forward declaration of classes fgTILE and fgMATERIAL to eliminate
+// the need for "void" pointers and casts.
+// Quick hack to count the number of scenery polygons that are being drawn.
+//
+// Revision 1.14  1998/08/12 21:13:06  curt
+// material.cxx: don't load textures if they are disabled
+// obj.cxx: optimizations from Norman Vine
+// tile.cxx: minor tweaks
+// tile.hxx: addition of num_faces
+// tilemgr.cxx: minor tweaks
+//
+// Revision 1.13  1998/07/24 21:42:08  curt
+// material.cxx: whups, double method declaration with no definition.
+// obj.cxx: tweaks to avoid errors in SGI's CC.
+// tile.cxx: optimizations by Norman Vine.
+// tilemgr.cxx: optimizations by Norman Vine.
+//
+// Revision 1.12  1998/07/22 21:41:42  curt
+// Add basic fgFACE methods contributed by Charlie Hotchkiss.
+// intersect optimization from Norman Vine.
+//
 // Revision 1.11  1998/07/12 03:18:28  curt
 // Added ground collision detection.  This involved:
 // - saving the entire vertex list for each tile with the tile records.