(x) class fgOBJECT { // material property pointer int material_ptr; // culling data double ref[3]; double radius; // OpenGL display list for object data GLint display_list_ptr; } (x) class fgTILE { // culling data double ref[3]; double radius; list < fgOBJECT > object_list; } class fgMATERIAL { int list_size; int counter; public: // material properties GLfloat ambient[4], diffuse[4], specular[4]; GLint texture_ptr; // transient list of objects with this material type (used for sorting // by material to reduce GL state changes when rendering the scene fgOBJECT *material_object_list[lots]; init_list(); append_list(); list_traverse_init(); next_obj() } class fgMATERIAL_MGR { list < fgMATERIAL > material_list; }