From: curt Date: Wed, 12 Aug 1998 21:13:03 +0000 (+0000) Subject: material.cxx: don't load textures if they are disabled X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=d212b2d4592ef7b6b1a6180f7dce4c562e7a8919;p=flightgear.git material.cxx: don't load textures if they are disabled obj.cxx: optimizations from Norman Vine tile.cxx: minor tweaks tile.hxx: addition of num_faces tilemgr.cxx: minor tweaks --- diff --git a/Scenery/material.cxx b/Scenery/material.cxx index c8d8d917d..ccb1150e3 100644 --- a/Scenery/material.cxx +++ b/Scenery/material.cxx @@ -142,6 +142,9 @@ int fgMATERIAL_MGR::load_lib ( void ) { } else { fgPrintf( FG_TERRAIN, FG_INFO, "Bad alpha value '%s'\n", line ); } + } else if ( (strncmp(line_ptr, "texture", 7) == 0) && + current_options.get_textures() ) { + // do nothing } else if ( strncmp(line_ptr, "texture", 7) == 0 ) { line_ptr += 7; while ( ( (line_ptr[0] == ' ') || (line_ptr[0] == '\t') || @@ -297,6 +300,13 @@ fgMATERIAL_MGR::~fgMATERIAL_MGR ( void ) { // $Log$ +// Revision 1.11 1998/08/12 21:13:03 curt +// material.cxx: don't load textures if they are disabled +// obj.cxx: optimizations from Norman Vine +// tile.cxx: minor tweaks +// tile.hxx: addition of num_faces +// tilemgr.cxx: minor tweaks +// // Revision 1.10 1998/07/24 21:42:06 curt // material.cxx: whups, double method declaration with no definition. // obj.cxx: tweaks to avoid errors in SGI's CC. diff --git a/Scenery/obj.cxx b/Scenery/obj.cxx index 43664a291..5f7ba36a1 100644 --- a/Scenery/obj.cxx +++ b/Scenery/obj.cxx @@ -116,6 +116,8 @@ int fgObjLoad(char *path, fgTILE *t) { int shading; int in_fragment, in_faces, vncount, n1, n2, n3, n4; int last1, last2, odd; + double (*nodes)[3]; + fgPoint3d *center; // First try "path.gz" (compressed format) strcpy(fgpath, path); @@ -141,6 +143,8 @@ int fgObjLoad(char *path, fgTILE *t) { t->ncount = 1; vncount = 1; t->bounding_radius = 0.0; + nodes = t->nodes; + center = &t->center; while ( fggets(f, line, 250) != NULL ) { if ( line[0] == '#' ) { @@ -238,6 +242,10 @@ int fgObjLoad(char *path, fgTILE *t) { fragment.matrix[0] = fragment.matrix[5] = fragment.matrix[10] = fragment.matrix[15] = 1.0; */ + + // initialize fragment face counter + fragment.num_faces = 0; + } else if ( line[0] == 't' ) { // start a new triangle strip @@ -260,45 +268,51 @@ int fgObjLoad(char *path, fgTILE *t) { // (averaged) normals MAT3_SCALE_VEC(normal, normals[n1], scale); xglNormal3dv(normal); - pp = calc_tex_coords(t->nodes[n1], &t->center); + pp = calc_tex_coords(nodes[n1], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + // xglVertex3d(t->nodes[n1][0],t->nodes[n1][1],t->nodes[n1][2]); + xglVertex3dv(nodes[n1]); MAT3_SCALE_VEC(normal, normals[n2], scale); xglNormal3dv(normal); - pp = calc_tex_coords(t->nodes[n2], &t->center); - xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n2][0], t->nodes[n2][1], t->nodes[n2][2]); + pp = calc_tex_coords(nodes[n2], center); + xglTexCoord2f(pp.lon, pp.lat); + //xglVertex3d(t->nodes[n2][0],t->nodes[n2][1],t->nodes[n2][2]); + xglVertex3dv(nodes[n2]); MAT3_SCALE_VEC(normal, normals[n3], scale); xglNormal3dv(normal); - pp = calc_tex_coords(t->nodes[n3], &t->center); + pp = calc_tex_coords(nodes[n3], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n3][0], t->nodes[n3][1], t->nodes[n3][2]); + // xglVertex3d(t->nodes[n3][0],t->nodes[n3][1],t->nodes[n3][2]); + xglVertex3dv(nodes[n3]); } else { // Shading model is "GL_FLAT" so calculate per face // normals on the fly. if ( odd ) { - calc_normal(t->nodes[n1], t->nodes[n2], - t->nodes[n3], approx_normal); + calc_normal(nodes[n1], nodes[n2], + nodes[n3], approx_normal); } else { - calc_normal(t->nodes[n2], t->nodes[n1], - t->nodes[n3], approx_normal); + calc_normal(nodes[n2], nodes[n1], + nodes[n3], approx_normal); } MAT3_SCALE_VEC(normal, approx_normal, scale); xglNormal3dv(normal); - pp = calc_tex_coords(t->nodes[n1], &t->center); - xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + pp = calc_tex_coords(nodes[n1], center); + xglTexCoord2f(pp.lon, pp.lat); + // xglVertex3d(t->nodes[n1][0],t->nodes[n1][1],t->nodes[n1][2]); + xglVertex3dv(nodes[n1]); - pp = calc_tex_coords(t->nodes[n2], &t->center); - xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n2][0], t->nodes[n2][1], t->nodes[n2][2]); + pp = calc_tex_coords(nodes[n2], center); + xglTexCoord2f(pp.lon, pp.lat); + // xglVertex3d(t->nodes[n2][0],t->nodes[n2][1],t->nodes[n2][2]); + xglVertex3dv(nodes[n2]); - pp = calc_tex_coords(t->nodes[n3], &t->center); - xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n3][0], t->nodes[n3][1], t->nodes[n3][2]); + pp = calc_tex_coords(nodes[n3], center); + xglTexCoord2f(pp.lon, pp.lat); + // xglVertex3d(t->nodes[n3][0],t->nodes[n3][1],t->nodes[n3][2]); + xglVertex3dv(nodes[n3]); } odd = 1 - odd; @@ -313,14 +327,15 @@ int fgObjLoad(char *path, fgTILE *t) { MAT3_SCALE_VEC(normal, normals[n4], scale); } else { // Shading model is "GL_FLAT" - calc_normal(t->nodes[n3], t->nodes[n2], t->nodes[n4], + calc_normal(nodes[n3], nodes[n2], nodes[n4], approx_normal); MAT3_SCALE_VEC(normal, approx_normal, scale); } xglNormal3dv(normal); - pp = calc_tex_coords(t->nodes[n4], &t->center); + pp = calc_tex_coords(nodes[n4], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n4][0], t->nodes[n4][1], t->nodes[n4][2]); + // xglVertex3d(t->nodes[n4][0],t->nodes[n4][1],t->nodes[n4][2]); + xglVertex3dv(nodes[n4]); odd = 1 - odd; last1 = n3; @@ -339,20 +354,26 @@ int fgObjLoad(char *path, fgTILE *t) { fragment.add_face(n1, n2, n3); - xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]); - pp = calc_tex_coords(t->nodes[n1], &t->center); + // xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]); + xglNormal3dv(normals[n1]); + pp = calc_tex_coords(nodes[n1], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + // xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + xglVertex3dv(nodes[n1]); - xglNormal3d(normals[n2][0], normals[n2][1], normals[n2][2]); - pp = calc_tex_coords(t->nodes[n2], &t->center); + // xglNormal3d(normals[n2][0], normals[n2][1], normals[n2][2]); + xglNormal3dv(normals[n2]); + pp = calc_tex_coords(nodes[n2], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n2][0], t->nodes[n2][1], t->nodes[n2][2]); + // xglVertex3d(t->nodes[n2][0], t->nodes[n2][1], t->nodes[n2][2]); + xglVertex3dv(nodes[n2]); - xglNormal3d(normals[n3][0], normals[n3][1], normals[n3][2]); - pp = calc_tex_coords(t->nodes[n3], &t->center); + // xglNormal3d(normals[n3][0], normals[n3][1], normals[n3][2]); + xglNormal3dv(normals[n3]); + pp = calc_tex_coords(nodes[n3], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n3][0], t->nodes[n3][1], t->nodes[n3][2]); + // xglVertex3d(t->nodes[n3][0], t->nodes[n3][1], t->nodes[n3][2]); + xglVertex3dv(nodes[n3]); } else if ( line[0] == 'q' ) { // continue a triangle strip n1 = n2 = 0; @@ -375,19 +396,20 @@ int fgObjLoad(char *path, fgTILE *t) { } else { // Shading model is "GL_FLAT" if ( odd ) { - calc_normal(t->nodes[last1], t->nodes[last2], t->nodes[n1], + calc_normal(nodes[last1], nodes[last2], nodes[n1], approx_normal); } else { - calc_normal(t->nodes[last2], t->nodes[last1], t->nodes[n1], + calc_normal(nodes[last2], nodes[last1], nodes[n1], approx_normal); } MAT3_SCALE_VEC(normal, approx_normal, scale); xglNormal3dv(normal); } - pp = calc_tex_coords(t->nodes[n1], &t->center); + pp = calc_tex_coords(nodes[n1], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + // xglVertex3d(t->nodes[n1][0], t->nodes[n1][1], t->nodes[n1][2]); + xglVertex3dv(nodes[n1]); odd = 1 - odd; last1 = last2; @@ -409,19 +431,20 @@ int fgObjLoad(char *path, fgTILE *t) { } else { // Shading model is "GL_FLAT" if ( odd ) { - calc_normal(t->nodes[last1], t->nodes[last2], - t->nodes[n2], approx_normal); + calc_normal(nodes[last1], nodes[last2], + nodes[n2], approx_normal); } else { - calc_normal(t->nodes[last2], t->nodes[last1], - t->nodes[n2], approx_normal); + calc_normal(nodes[last2], nodes[last1], + nodes[n2], approx_normal); } MAT3_SCALE_VEC(normal, approx_normal, scale); xglNormal3dv(normal); } - pp = calc_tex_coords(t->nodes[n2], &t->center); + pp = calc_tex_coords(nodes[n2], center); xglTexCoord2f(pp.lon, pp.lat); - xglVertex3d(t->nodes[n2][0], t->nodes[n2][1], t->nodes[n2][2]); + // xglVertex3d(t->nodes[n2][0],t->nodes[n2][1],t->nodes[n2][2]); + xglVertex3dv(nodes[n2]); odd = 1 -odd; last1 = last2; @@ -467,6 +490,13 @@ int fgObjLoad(char *path, fgTILE *t) { // $Log$ +// Revision 1.21 1998/08/12 21:13:04 curt +// material.cxx: don't load textures if they are disabled +// obj.cxx: optimizations from Norman Vine +// tile.cxx: minor tweaks +// tile.hxx: addition of num_faces +// tilemgr.cxx: minor tweaks +// // Revision 1.20 1998/07/24 21:42:07 curt // material.cxx: whups, double method declaration with no definition. // obj.cxx: tweaks to avoid errors in SGI's CC. diff --git a/Scenery/tile.cxx b/Scenery/tile.cxx index d6903134e..0af9089b5 100644 --- a/Scenery/tile.cxx +++ b/Scenery/tile.cxx @@ -30,7 +30,7 @@ // return the sign of a value -#define FG_SIGN( x ) ((x) >= 0 ? 1 : -1) +#define FG_SIGN( x ) ((x) < 0 ? -1 : 1) // return min or max of two values #define FG_MIN(A,B) ((A) < (B) ? (A) : (B)) @@ -74,7 +74,8 @@ fgFRAGMENT :: fgFRAGMENT ( const fgFRAGMENT & rhs ) : material_ptr ( rhs.material_ptr ), tile_ptr ( rhs.tile_ptr ), display_list ( rhs.display_list ), - faces ( rhs.faces ) + faces ( rhs.faces ), + num_faces ( rhs.num_faces ) { } @@ -101,6 +102,7 @@ void fgFRAGMENT::add_face(int n1, int n2, int n3) { face.n3 = n3; faces.push_back(face); + num_faces++; } @@ -446,6 +448,13 @@ fgTILE::~fgTILE ( void ) { // $Log$ +// Revision 1.6 1998/08/12 21:13:05 curt +// material.cxx: don't load textures if they are disabled +// obj.cxx: optimizations from Norman Vine +// tile.cxx: minor tweaks +// tile.hxx: addition of num_faces +// tilemgr.cxx: minor tweaks +// // Revision 1.5 1998/07/24 21:42:08 curt // material.cxx: whups, double method declaration with no definition. // obj.cxx: tweaks to avoid errors in SGI's CC. diff --git a/Scenery/tile.hxx b/Scenery/tile.hxx index c676741e6..516997ad2 100644 --- a/Scenery/tile.hxx +++ b/Scenery/tile.hxx @@ -103,6 +103,9 @@ public: // face list (this indexes into the master tile vertex list) list < fgFACE > faces; + // number of faces in this fragment + int num_faces; + // Add a face to the face list void add_face(int n1, int n2, int n3); @@ -163,6 +166,13 @@ public: // $Log$ +// Revision 1.14 1998/08/12 21:13:06 curt +// material.cxx: don't load textures if they are disabled +// obj.cxx: optimizations from Norman Vine +// tile.cxx: minor tweaks +// tile.hxx: addition of num_faces +// tilemgr.cxx: minor tweaks +// // Revision 1.13 1998/07/24 21:42:08 curt // material.cxx: whups, double method declaration with no definition. // obj.cxx: tweaks to avoid errors in SGI's CC. diff --git a/Scenery/tilemgr.cxx b/Scenery/tilemgr.cxx index 118d75fef..7d5d82ea5 100644 --- a/Scenery/tilemgr.cxx +++ b/Scenery/tilemgr.cxx @@ -55,7 +55,7 @@ #define FG_LOCAL_X_Y 81 // max(o->tile_diameter) ** 2 -#define FG_SQUARE(X) ((X) * (X)) +#define FG_SQUARE( X ) ( (X) * (X) ) // closest (potentially viewable) tiles, centered on current tile. @@ -564,6 +564,13 @@ void fgTileMgrRender( void ) { // $Log$ +// Revision 1.28 1998/08/12 21:13:06 curt +// material.cxx: don't load textures if they are disabled +// obj.cxx: optimizations from Norman Vine +// tile.cxx: minor tweaks +// tile.hxx: addition of num_faces +// tilemgr.cxx: minor tweaks +// // Revision 1.27 1998/07/24 21:42:09 curt // material.cxx: whups, double method declaration with no definition. // obj.cxx: tweaks to avoid errors in SGI's CC.