From 18b093927f4a72b2e0bd9be8bc29dafa0e8db993 Mon Sep 17 00:00:00 2001 From: curt Date: Mon, 12 Oct 1998 23:49:17 +0000 Subject: [PATCH] Changes from NHV to make the code more dynamic with fewer hard coded limits. --- Objects/material.cxx | 18 ++++++++++++------ Objects/material.hxx | 27 ++++++++++++++++++++------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Objects/material.cxx b/Objects/material.cxx index a921dc7ec..d5210dc00 100644 --- a/Objects/material.cxx +++ b/Objects/material.cxx @@ -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,7 +64,7 @@ fgMATERIAL::fgMATERIAL ( void ) emissive[0] = emissive[1] = emissive[2] = emissive[3] = 0.0; } - +/* int fgMATERIAL::append_sort_list( fgFRAGMENT *object ) { @@ -75,6 +75,7 @@ fgMATERIAL::append_sort_list( fgFRAGMENT *object ) return 0; } } +*/ istream& operator >> ( istream& in, fgMATERIAL& m ) @@ -248,9 +249,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 ) { @@ -354,6 +357,9 @@ fgMATERIAL_MGR::render_fragments() // $Log$ +// 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. // diff --git a/Objects/material.hxx b/Objects/material.hxx index e45b7c1fd..d8b4c9705 100644 --- a/Objects/material.hxx +++ b/Objects/material.hxx @@ -48,6 +48,7 @@ extern "C" void *memset(void *, int, size_t); #include // Standard C++ string library #include // STL associative "array" +#include // STL "array" #ifdef NEEDNAMESPACESTD using namespace std; @@ -57,7 +58,13 @@ 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 @@ -79,23 +86,26 @@ private: // 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]; - size_t list_size; + frag_list_type list; + // size_t list_size; public: // Constructor fgMATERIAL ( void ); - size_t size() const { return list_size; } - bool empty() const { return list_size == 0; } + 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(); @@ -160,6 +170,9 @@ 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. // -- 2.39.2