]> git.mxchange.org Git - flightgear.git/blobdiff - Objects/material.cxx
Converted to new logstream debugging facility. This allows release
[flightgear.git] / Objects / material.cxx
index b4c48228b95f2d500b036cddb0082d0470436e64..a2dc6543e7f7f825bbd9e4ebd2b7a04473344e6a 100644 (file)
@@ -37,7 +37,7 @@
 #include <string>
 
 #include "Include/fg_stl_config.h"
-#include <Debug/fg_debug.h>
+#include <Debug/logstream.hxx>
 #include <Main/options.hxx>
 #include <Misc/fgstream.hxx>
 #include <Main/views.hxx>
@@ -55,8 +55,8 @@ fgMATERIAL_MGR material_mgr;
 // Constructor
 fgMATERIAL::fgMATERIAL ( void )
     : texture_name(""),
-      alpha(0),
-      list_size(0)
+      alpha(0)
+      // , list_size(0)
 {
     ambient[0]  = ambient[1]  = ambient[2]  = ambient[3]  = 0.0;
     diffuse[0]  = diffuse[1]  = diffuse[2]  = diffuse[3]  = 0.0;
@@ -64,26 +64,25 @@ fgMATERIAL::fgMATERIAL ( void )
     emissive[0] = emissive[1] = emissive[2] = emissive[3] = 0.0;
 }
 
-
-int fgMATERIAL::append_sort_list( fgFRAGMENT *object ) {
-    if ( list_size < FG_MAX_MATERIAL_FRAGS )
-    {
+/*
+int
+fgMATERIAL::append_sort_list( fgFRAGMENT *object )
+{
+    if ( list_size < FG_MAX_MATERIAL_FRAGS ) {
        list[ list_size++ ] = object;
        return 1;
-    }
-    else
-    {
+    } else {
        return 0;
     }
 }
+*/
 
 istream&
 operator >> ( istream& in, fgMATERIAL& m )
 {
     string token;
 
-    for (;;)
-    {
+    for (;;) {
        in >> token;
        if ( token == "texture" )
        {
@@ -118,8 +117,7 @@ operator >> ( istream& in, fgMATERIAL& m )
                m.alpha = 0;
            else
            {
-               fgPrintf( FG_TERRAIN, FG_INFO,
-                         "Bad alpha value '%s'\n", token.c_str() );
+               FG_LOG( FG_TERRAIN, FG_INFO, "Bad alpha value " << token );
            }
        }
        else if ( token[0] == '}' )
@@ -134,8 +132,6 @@ operator >> ( istream& in, fgMATERIAL& m )
 void
 fgMATERIAL::load_texture()
 {
-    if ( current_options.get_textures() )
-    {
        GLubyte *texbuf;
        int width, height;
 
@@ -180,10 +176,9 @@ fgMATERIAL::load_texture()
                      read_rgb_texture(fg_tpath.c_str(), &width, &height)) 
                     == NULL )
                {
-                   fgPrintf( FG_GENERAL, FG_EXIT, 
-                             "Error in loading texture %s\n", 
-                             tpath.c_str() );
-                   return;
+                   FG_LOG( FG_GENERAL, FG_ALERT, 
+                           "Error in loading texture " << tpath );
+                   exit(-1);
                } 
            } 
 
@@ -205,17 +200,15 @@ fgMATERIAL::load_texture()
                     read_alpha_texture(fg_tpath.c_str(), &width, &height))
                    == NULL )
                {
-                   fgPrintf( FG_GENERAL, FG_EXIT, 
-                             "Error in loading texture %s\n",
-                             tpath.c_str() );
-                   return;
+                   FG_LOG( FG_GENERAL, FG_ALERT, 
+                           "Error in loading texture " << tpath );
+                   exit(-1);
                } 
            } 
 
            xglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
                          GL_RGBA, GL_UNSIGNED_BYTE, texbuf);
        }
-    }
 }
 
 
@@ -226,6 +219,7 @@ fgMATERIAL::~fgMATERIAL ( void ) {
 
 // Constructor
 fgMATERIAL_MGR::fgMATERIAL_MGR ( void ) {
+    textures_loaded = false;
 }
 
 
@@ -252,9 +246,11 @@ fgMATERIAL::render_fragments()
     }
 
     fgTILE* last_tile_ptr = NULL;
-    for ( size_t i = 0; i < list_size; ++i )
-    {
-       fgFRAGMENT* frag_ptr = list[i];
+    frag_list_iterator current = list.begin();
+    frag_list_iterator last = list.end();
+
+    for ( ; current != last; ++current ) {
+       fgFRAGMENT* frag_ptr = *current;
        current_view.tris_rendered += frag_ptr->num_faces();
        if ( frag_ptr->tile_ptr != last_tile_ptr )
        {
@@ -271,49 +267,56 @@ fgMATERIAL::render_fragments()
 
 
 // Load a library of material properties
-int fgMATERIAL_MGR::load_lib ( void ) {
+int
+fgMATERIAL_MGR::load_lib ( void )
+{
     string material_name;
 
     // build the path name to the material db
     string mpath = current_options.get_fg_root() + "/materials";
     fg_gzifstream in( mpath );
-    if ( ! in )
-       fgPrintf( FG_GENERAL, FG_EXIT, "Cannot open file: %s\n", 
-                 mpath.c_str() );
+    if ( ! in ) {
+       FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << mpath );
+       exit(-1);
+    }
 
     while ( ! in.eof() ) {
         // printf("%s", line);
 
        // strip leading white space and comments
-       in.eat_comments();
+       in >> skipcomment;
 
        // set to zero to prevent its value accidently being '{'
        // after a failed >> operation.
        char token = 0;
 
-       in.stream() >> material_name >> token;
+       in >> material_name >> token;
 
        if ( token == '{' ) {
            printf( "  Loading material %s\n", material_name.c_str() );
            fgMATERIAL m;
-           in.stream() >> m;
-           m.load_texture();
+           in >> m;
+
+           if ( current_options.get_textures() ) {
+               m.load_texture();
+           }
+
            material_mgr.material_map[material_name] = m;
        }
     }
 
-//     iterator last = end();
-//     for ( iterator it = begin(); it != last; ++it )
-//     {
-//     (*it).second.load_texture();
-//     }
+    if ( current_options.get_textures() ) {
+       textures_loaded = true;
+    }
 
     return(1);
 }
 
 
 // Initialize the transient list of fragments for each material property
-void fgMATERIAL_MGR::init_transient_material_lists( void ) {
+void
+fgMATERIAL_MGR::init_transient_material_lists( void )
+{
     iterator last = end();
     for ( iterator it = begin(); it != last; ++it )
     {
@@ -321,6 +324,7 @@ void fgMATERIAL_MGR::init_transient_material_lists( void ) {
     }
 }
 
+
 bool
 fgMATERIAL_MGR::find( const string& material, fgMATERIAL*& mtl_ptr )
 {
@@ -351,6 +355,20 @@ fgMATERIAL_MGR::render_fragments()
 
 
 // $Log$
+// Revision 1.10  1998/11/06 21:18:17  curt
+// Converted to new logstream debugging facility.  This allows release
+// builds with no messages at all (and no performance impact) by using
+// the -DFG_NDEBUG flag.
+//
+// Revision 1.9  1998/11/06 14:47:05  curt
+// Changes to track Bernie's updates to fgstream.
+//
+// Revision 1.8  1998/10/12 23:49:17  curt
+// Changes from NHV to make the code more dynamic with fewer hard coded limits.
+//
+// Revision 1.7  1998/09/17 18:35:52  curt
+// Tweaks and optimizations by Norman Vine.
+//
 // Revision 1.6  1998/09/15 01:35:05  curt
 // cleaned up my fragment.num_faces hack :-) to use the STL (no need in
 // duplicating work.)