#include <string> // Standard C++ string library
#include <map> // STL associative "array"
+#include <vector> // STL "array"
#ifdef NEEDNAMESPACESTD
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;
// 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 );
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 );
// 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;
};
// $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.