]> git.mxchange.org Git - flightgear.git/blobdiff - Objects/material.hxx
Changes from NHV to make the code more dynamic with fewer hard coded limits.
[flightgear.git] / Objects / material.hxx
index 0e1302fd1cee350c47817fa1ebe247b6e1260b0a..d8b4c9705ef5ead6db28dcaa1a0cac509dc63e79 100644 (file)
@@ -48,6 +48,7 @@ extern "C" void *memset(void *, int, size_t);
 
 #include <string>        // Standard C++ string library
 #include <map>           // STL associative "array"
+#include <vector>        // STL "array"
 
 #ifdef NEEDNAMESPACESTD
 using namespace std;
@@ -57,13 +58,19 @@ using namespace std;
 class fgFRAGMENT;
 
 
-#define FG_MAX_MATERIAL_FRAGS 800
+// convenience types
+typedef vector < fgFRAGMENT * > frag_list_type;
+typedef frag_list_type::iterator frag_list_iterator;
+typedef frag_list_type::const_iterator frag_list_const_iterator;
+
+
+// #define FG_MAX_MATERIAL_FRAGS 800
 
 
 // Material property class
 class fgMATERIAL {
 
-public:
+private:
     // OpenGL texture name
     GLuint texture_id;
 
@@ -79,23 +86,35 @@ public:
 
     // transient list of objects with this material type (used for sorting
     // by material to reduce GL state changes when rendering the scene
-    fgFRAGMENT * list[FG_MAX_MATERIAL_FRAGS];
-    int list_size;
+    frag_list_type list;
+    // size_t list_size;
+
+public:
 
     // Constructor
     fgMATERIAL ( void );
 
+    int size() const { return list.size(); }
+    bool empty() const { return list.size() == 0; }
+
     // Sorting routines
     void init_sort_list( void ) {
-       list_size = 0;
+       list.erase( list.begin(), list.end() );
     }
 
-    int append_sort_list( fgFRAGMENT *object );
+    bool append_sort_list( fgFRAGMENT *object ) {
+       list.push_back( object );
+       return true;
+    }
+
+    void render_fragments();
 
     void load_texture();
 
     // Destructor
     ~fgMATERIAL ( void );
+
+    friend istream& operator >> ( istream& in, fgMATERIAL& m );
 };
 
 istream& operator >> ( istream& in, fgMATERIAL& m );
@@ -110,7 +129,11 @@ public:
     typedef container::iterator iterator;
     typedef container::const_iterator const_iterator;
 
-    container material_map;
+    iterator begin() { return material_map.begin(); }
+    const_iterator begin() const { return material_map.begin(); }
+
+    iterator end() { return material_map.end(); }
+    const_iterator end() const { return material_map.end(); }
 
     // Constructor
     fgMATERIAL_MGR ( void );
@@ -118,13 +141,24 @@ public:
     // Load a library of material properties
     int load_lib ( void );
 
+    bool get_textures_loaded() { return textures_loaded; }
+
     // Initialize the transient list of fragments for each material property
     void init_transient_material_lists( void );
 
     bool find( const string& material, fgMATERIAL*& mtl_ptr );
 
+    void render_fragments();
+
     // Destructor
     ~fgMATERIAL_MGR ( void );
+
+private:
+
+    // Have textures been loaded
+    bool textures_loaded;
+
+    container material_map;
 };
 
 
@@ -136,6 +170,39 @@ extern fgMATERIAL_MGR material_mgr;
 
 
 // $Log$
+// Revision 1.5  1998/10/12 23:49:18  curt
+// Changes from NHV to make the code more dynamic with fewer hard coded limits.
+//
+// Revision 1.4  1998/09/17 18:35:53  curt
+// Tweaks and optimizations by Norman Vine.
+//
+// Revision 1.3  1998/09/10 19:07:12  curt
+// /Simulator/Objects/fragment.hxx
+//   Nested fgFACE inside fgFRAGMENT since its not used anywhere else.
+//
+// ./Simulator/Objects/material.cxx
+// ./Simulator/Objects/material.hxx
+//   Made fgMATERIAL and fgMATERIAL_MGR bona fide classes with private
+//   data members - that should keep the rabble happy :)
+//
+// ./Simulator/Scenery/tilemgr.cxx
+//   In viewable() delay evaluation of eye[0] and eye[1] in until they're
+//   actually needed.
+//   Change to fgTileMgrRender() to call fgMATERIAL_MGR::render_fragments()
+//   method.
+//
+// ./Include/fg_stl_config.h
+// ./Include/auto_ptr.hxx
+//   Added support for g++ 2.7.
+//   Further changes to other files are forthcoming.
+//
+// Brief summary of changes required for g++ 2.7.
+//   operator->() not supported by iterators: use (*i).x instead of i->x
+//   default template arguments not supported,
+//   <functional> doesn't have mem_fun_ref() needed by callbacks.
+//   some std include files have different names.
+//   template member functions not supported.
+//
 // Revision 1.2  1998/09/01 19:03:09  curt
 // Changes contributed by Bernie Bright <bbright@c031.aone.net.au>
 //  - The new classes in libmisc.tgz define a stream interface into zlib.