1
0
Fork 0

Moving towards increased dependence on ssg.

This commit is contained in:
curt 1999-08-07 18:27:29 +00:00
parent dec6e86f6e
commit 243b73c10b
8 changed files with 88 additions and 81 deletions

View file

@ -197,7 +197,7 @@ gen_base( const Point3D& average, const container& perimeter, FGTileEntry *t)
xglEndList(); xglEndList();
fragment.bounding_radius = sqrt(max_dist); fragment.bounding_radius = sqrt(max_dist);
fragment.display_list = display_list; // fragment.display_list = display_list;
t->fragment_list.push_back(fragment); t->fragment_list.push_back(fragment);
} }

View file

@ -66,7 +66,7 @@ fgFRAGMENT::fgFRAGMENT ( const fgFRAGMENT & rhs ) :
bounding_radius( rhs.bounding_radius ), bounding_radius( rhs.bounding_radius ),
material_ptr ( rhs.material_ptr ), material_ptr ( rhs.material_ptr ),
tile_ptr ( rhs.tile_ptr ), tile_ptr ( rhs.tile_ptr ),
display_list ( rhs.display_list ), /* display_list ( rhs.display_list ), */
faces ( rhs.faces ) faces ( rhs.faces )
{ {
} }

View file

@ -104,7 +104,7 @@ public:
FGTileEntry *tile_ptr; FGTileEntry *tile_ptr;
// OpenGL display list for fragment data // OpenGL display list for fragment data
GLint display_list; // GLint display_list;
// face list (this indexes into the master tile vertex list) // face list (this indexes into the master tile vertex list)
typedef vector < fgFACE > container; typedef vector < fgFACE > container;
@ -154,9 +154,9 @@ public:
faces.erase( faces.begin(), faces.end() ); faces.erase( faces.begin(), faces.end() );
} }
int deleteDisplayList() { // int deleteDisplayList() {
xglDeleteLists( display_list, 1 ); return 0; // xglDeleteLists( display_list, 1 ); return 0;
} // }
friend bool operator== ( const fgFRAGMENT & lhs, const fgFRAGMENT & rhs ); friend bool operator== ( const fgFRAGMENT & lhs, const fgFRAGMENT & rhs );
}; };

View file

@ -76,6 +76,10 @@ fgMATERIAL_MGR::fgMATERIAL_MGR ( void ) {
void void
FGMaterialSlot::render_fragments() FGMaterialSlot::render_fragments()
{ {
FG_LOG( FG_GENERAL, FG_ALERT,
"FGMaterialSlot::render_fragments() is depricated ... " <<
"we shouldn't be here!" );
int tris_rendered = current_view.get_tris_rendered(); int tris_rendered = current_view.get_tris_rendered();
// cout << "rendering " + texture_name + " = " << list_size << "\n"; // cout << "rendering " + texture_name + " = " << list_size << "\n";
@ -117,7 +121,7 @@ FGMaterialSlot::render_fragments()
// Woohoo!!! We finally get to draw something! // Woohoo!!! We finally get to draw something!
// printf(" display_list = %d\n", frag_ptr->display_list); // printf(" display_list = %d\n", frag_ptr->display_list);
xglCallList( frag_ptr->display_list ); // xglCallList( frag_ptr->display_list );
} }
current_view.set_tris_rendered( tris_rendered ); current_view.set_tris_rendered( tris_rendered );

View file

@ -29,14 +29,14 @@
# include <math.h> # include <math.h>
#endif #endif
#ifdef HAVE_WINDOWS_H // #ifdef HAVE_WINDOWS_H
# include <windows.h> // # include <windows.h>
#endif // #endif
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <GL/glut.h> // #include <GL/glut.h>
#include <XGL/xgl.h> // #include <XGL/xgl.h>
// #if defined ( __sun__ ) // #if defined ( __sun__ )
// extern "C" void *memmove(void *, const void *, size_t); // extern "C" void *memmove(void *, const void *, size_t);
@ -134,14 +134,14 @@ static Point3D calc_tex_coords(const Point3D& node, const Point3D& ref) {
} }
// Load a .obj file and build the GL fragment list // Load a .obj file and build the fragment list
ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) { ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
fgFRAGMENT fragment; fgFRAGMENT fragment;
Point3D pp; Point3D pp;
double approx_normal[3], normal[3] /*, scale = 0.0 */; double approx_normal[3] /*, normal[3], scale = 0.0 */;
// double x, y, z, xmax, xmin, ymax, ymin, zmax, zmin; // double x, y, z, xmax, xmin, ymax, ymin, zmax, zmin;
// GLfloat sgenparams[] = { 1.0, 0.0, 0.0, 0.0 }; // GLfloat sgenparams[] = { 1.0, 0.0, 0.0, 0.0 };
GLint display_list = 0; // GLint display_list = 0;
int shading; int shading;
bool in_fragment = false, in_faces = false; bool in_fragment = false, in_faces = false;
int vncount, vtcount; int vncount, vtcount;
@ -228,7 +228,7 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// shared_done true and build the ssg shared lists // shared_done true and build the ssg shared lists
if ( ! shared_done ) { if ( ! shared_done ) {
// sanity check // sanity check
if ( nodes.size() != vncount ) { if ( (int)nodes.size() != vncount ) {
FG_LOG( FG_TERRAIN, FG_ALERT, FG_LOG( FG_TERRAIN, FG_ALERT,
"Tile has mismatched nodes and normals: " "Tile has mismatched nodes and normals: "
<< path ); << path );
@ -257,18 +257,18 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
} }
// series of individual triangles // series of individual triangles
if ( in_faces ) { // if ( in_faces ) {
xglEnd(); // xglEnd();
} // }
// this also signals the start of a new fragment // this also signals the start of a new fragment
if ( in_fragment ) { if ( in_fragment ) {
// close out the previous structure and start the next // close out the previous structure and start the next
xglEndList(); // xglEndList();
// printf("xglEnd(); xglEndList();\n"); // printf("xglEnd(); xglEndList();\n");
// update fragment // update fragment
fragment.display_list = display_list; // fragment.display_list = display_list;
// push this fragment onto the tile's object list // push this fragment onto the tile's object list
t->fragment_list.push_back(fragment); t->fragment_list.push_back(fragment);
@ -278,8 +278,8 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// printf("start of fragment (usemtl)\n"); // printf("start of fragment (usemtl)\n");
display_list = xglGenLists(1); // display_list = xglGenLists(1);
xglNewList(display_list, GL_COMPILE); // xglNewList(display_list, GL_COMPILE);
// printf("xglGenLists(); xglNewList();\n"); // printf("xglGenLists(); xglNewList();\n");
in_faces = false; in_faces = false;
@ -383,7 +383,7 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// fgPrintf( FG_TERRAIN, FG_DEBUG, "(t) = "); // fgPrintf( FG_TERRAIN, FG_DEBUG, "(t) = ");
xglBegin(GL_TRIANGLE_STRIP); // xglBegin(GL_TRIANGLE_STRIP);
// printf("xglBegin(tristrip) %d %d %d\n", n1, n2, n3); // printf("xglBegin(tristrip) %d %d %d\n", n1, n2, n3);
odd = 1; odd = 1;
@ -393,22 +393,22 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// Shading model is "GL_SMOOTH" so use precalculated // Shading model is "GL_SMOOTH" so use precalculated
// (averaged) normals // (averaged) normals
// MAT3_SCALE_VEC(normal, normals[n1], scale); // MAT3_SCALE_VEC(normal, normals[n1], scale);
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n1], center); pp = calc_tex_coords(nodes[n1], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n1].get_n()); // xglVertex3dv(nodes[n1].get_n());
// MAT3_SCALE_VEC(normal, normals[n2], scale); // MAT3_SCALE_VEC(normal, normals[n2], scale);
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n2], center); pp = calc_tex_coords(nodes[n2], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n2].get_n()); // xglVertex3dv(nodes[n2].get_n());
// MAT3_SCALE_VEC(normal, normals[n3], scale); // MAT3_SCALE_VEC(normal, normals[n3], scale);
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n3], center); pp = calc_tex_coords(nodes[n3], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n3].get_n()); // xglVertex3dv(nodes[n3].get_n());
} else { } else {
// Shading model is "GL_FLAT" so calculate per face // Shading model is "GL_FLAT" so calculate per face
// normals on the fly. // normals on the fly.
@ -420,19 +420,19 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
nodes[n3], approx_normal); nodes[n3], approx_normal);
} }
// MAT3_SCALE_VEC(normal, approx_normal, scale); // MAT3_SCALE_VEC(normal, approx_normal, scale);
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n1], center); pp = calc_tex_coords(nodes[n1], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n1].get_n()); // xglVertex3dv(nodes[n1].get_n());
pp = calc_tex_coords(nodes[n2], center); pp = calc_tex_coords(nodes[n2], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n2].get_n()); // xglVertex3dv(nodes[n2].get_n());
pp = calc_tex_coords(nodes[n3], center); pp = calc_tex_coords(nodes[n3], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n3].get_n()); // xglVertex3dv(nodes[n3].get_n());
} }
// printf("some normals, texcoords, and vertices\n"); // printf("some normals, texcoords, and vertices\n");
@ -465,10 +465,10 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
approx_normal); approx_normal);
// MAT3_SCALE_VEC(normal, approx_normal, scale); // MAT3_SCALE_VEC(normal, approx_normal, scale);
} }
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n4], center); pp = calc_tex_coords(nodes[n4], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n4].get_n()); // xglVertex3dv(nodes[n4].get_n());
odd = 1 - odd; odd = 1 - odd;
last1 = n3; last1 = n3;
@ -482,11 +482,11 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
fan_vertices.clear(); fan_vertices.clear();
fan_tex_coords.clear(); fan_tex_coords.clear();
xglBegin(GL_TRIANGLE_FAN); // xglBegin(GL_TRIANGLE_FAN);
in >> n1; in >> n1;
fan_vertices.push_back( n1 ); fan_vertices.push_back( n1 );
xglNormal3dv(normals[n1]); // xglNormal3dv(normals[n1]);
if ( in.get( c ) && c == '/' ) { if ( in.get( c ) && c == '/' ) {
in >> tex; in >> tex;
fan_tex_coords.push_back( tex ); fan_tex_coords.push_back( tex );
@ -496,12 +496,12 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
in.putback( c ); in.putback( c );
pp = calc_tex_coords(nodes[n1], center); pp = calc_tex_coords(nodes[n1], center);
} }
xglTexCoord2f(pp.x(), pp.y()); // xglTexCoord2f(pp.x(), pp.y());
xglVertex3dv(nodes[n1].get_n()); // xglVertex3dv(nodes[n1].get_n());
in >> n2; in >> n2;
fan_vertices.push_back( n2 ); fan_vertices.push_back( n2 );
xglNormal3dv(normals[n2]); // xglNormal3dv(normals[n2]);
if ( in.get( c ) && c == '/' ) { if ( in.get( c ) && c == '/' ) {
in >> tex; in >> tex;
fan_tex_coords.push_back( tex ); fan_tex_coords.push_back( tex );
@ -511,8 +511,8 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
in.putback( c ); in.putback( c );
pp = calc_tex_coords(nodes[n2], center); pp = calc_tex_coords(nodes[n2], center);
} }
xglTexCoord2f(pp.x(), pp.y()); // xglTexCoord2f(pp.x(), pp.y());
xglVertex3dv(nodes[n2].get_n()); // xglVertex3dv(nodes[n2].get_n());
// read all subsequent numbers until next thing isn't a number // read all subsequent numbers until next thing isn't a number
while ( true ) { while ( true ) {
@ -534,7 +534,7 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// cout << " triangle = " // cout << " triangle = "
// << n1 << "," << n2 << "," << n3 // << n1 << "," << n2 << "," << n3
// << endl; // << endl;
xglNormal3dv(normals[n3]); // xglNormal3dv(normals[n3]);
if ( in.get( c ) && c == '/' ) { if ( in.get( c ) && c == '/' ) {
in >> tex; in >> tex;
fan_tex_coords.push_back( tex ); fan_tex_coords.push_back( tex );
@ -544,14 +544,14 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
in.putback( c ); in.putback( c );
pp = calc_tex_coords(nodes[n3], center); pp = calc_tex_coords(nodes[n3], center);
} }
xglTexCoord2f(pp.x(), pp.y()); // xglTexCoord2f(pp.x(), pp.y());
xglVertex3dv(nodes[n3].get_n()); // xglVertex3dv(nodes[n3].get_n());
fragment.add_face(n1, n2, n3); fragment.add_face(n1, n2, n3);
n2 = n3; n2 = n3;
} }
xglEnd(); // xglEnd();
// build the ssg entity // build the ssg entity
unsigned short *vindex = unsigned short *vindex =
@ -578,7 +578,7 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
// unoptimized face // unoptimized face
if ( !in_faces ) { if ( !in_faces ) {
xglBegin(GL_TRIANGLES); // xglBegin(GL_TRIANGLES);
// printf("xglBegin(triangles)\n"); // printf("xglBegin(triangles)\n");
in_faces = true; in_faces = true;
} }
@ -588,20 +588,20 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
fragment.add_face(n1, n2, n3); fragment.add_face(n1, n2, n3);
// xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]); // xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]);
xglNormal3dv(normals[n1]); // xglNormal3dv(normals[n1]);
pp = calc_tex_coords(nodes[n1], center); pp = calc_tex_coords(nodes[n1], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n1].get_n()); // xglVertex3dv(nodes[n1].get_n());
xglNormal3dv(normals[n2]); // xglNormal3dv(normals[n2]);
pp = calc_tex_coords(nodes[n2], center); pp = calc_tex_coords(nodes[n2], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n2].get_n()); // xglVertex3dv(nodes[n2].get_n());
xglNormal3dv(normals[n3]); // xglNormal3dv(normals[n3]);
pp = calc_tex_coords(nodes[n3], center); pp = calc_tex_coords(nodes[n3], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n3].get_n()); // xglVertex3dv(nodes[n3].get_n());
// printf("some normals, texcoords, and vertices (tris)\n"); // printf("some normals, texcoords, and vertices (tris)\n");
} else if ( token == "q" ) { } else if ( token == "q" ) {
// continue a triangle strip // continue a triangle strip
@ -646,11 +646,11 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
} }
// MAT3_SCALE_VEC(normal, approx_normal, scale); // MAT3_SCALE_VEC(normal, approx_normal, scale);
} }
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n1], center); pp = calc_tex_coords(nodes[n1], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n1].get_n()); // xglVertex3dv(nodes[n1].get_n());
// printf("a normal, texcoord, and vertex (4th)\n"); // printf("a normal, texcoord, and vertex (4th)\n");
odd = 1 - odd; odd = 1 - odd;
@ -680,11 +680,11 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
} }
// MAT3_SCALE_VEC(normal, approx_normal, scale); // MAT3_SCALE_VEC(normal, approx_normal, scale);
} }
xglNormal3dv(normal); // xglNormal3dv(normal);
pp = calc_tex_coords(nodes[n2], center); pp = calc_tex_coords(nodes[n2], center);
xglTexCoord2f(pp.lon(), pp.lat()); // xglTexCoord2f(pp.lon(), pp.lat());
xglVertex3dv(nodes[n2].get_n()); // xglVertex3dv(nodes[n2].get_n());
// printf("a normal, texcoord, and vertex (4th)\n"); // printf("a normal, texcoord, and vertex (4th)\n");
odd = 1 -odd; odd = 1 -odd;
@ -708,12 +708,12 @@ ssgBranch *fgObjLoad( const string& path, FGTileEntry *t) {
if ( in_fragment ) { if ( in_fragment ) {
// close out the previous structure and start the next // close out the previous structure and start the next
xglEnd(); // xglEnd();
xglEndList(); // xglEndList();
// printf("xglEnd(); xglEndList();\n"); // printf("xglEnd(); xglEndList();\n");
// update fragment // update fragment
fragment.display_list = display_list; // fragment.display_list = display_list;
// push this fragment onto the tile's object list // push this fragment onto the tile's object list
t->fragment_list.push_back(fragment); t->fragment_list.push_back(fragment);

View file

@ -36,11 +36,11 @@
#include <Include/compiler.h> #include <Include/compiler.h>
#ifdef HAVE_WINDOWS_H // #ifdef HAVE_WINDOWS_H
# include <windows.h> // # include <windows.h>
#endif // #endif
#include <GL/glut.h> // #include <GL/glut.h>
#include STL_STRING #include STL_STRING
@ -51,7 +51,7 @@
FG_USING_STD(string); FG_USING_STD(string);
// Load a .obj file and build the GL fragment list // Load a .obj file and build the fragment list
ssgBranch *fgObjLoad(const string& path, FGTileEntry *tile); ssgBranch *fgObjLoad(const string& path, FGTileEntry *tile);

View file

@ -73,8 +73,8 @@ FGTileEntry::free_tile()
// delete fragment list // delete fragment list
FG_LOG( FG_TERRAIN, FG_INFO, FG_LOG( FG_TERRAIN, FG_INFO,
" deleting " << fragment_list.size() << " fragments" ); " deleting " << fragment_list.size() << " fragments" );
for_each( begin(), end(), // for_each( begin(), end(),
mem_fun_ref( &fgFRAGMENT::deleteDisplayList )); // mem_fun_ref( &fgFRAGMENT::deleteDisplayList ));
fragment_list.erase( begin(), end() ); fragment_list.erase( begin(), end() );
// delete the ssg used structures // delete the ssg used structures

View file

@ -845,6 +845,9 @@ void FGTileMgr::prep_ssg_nodes( void ) {
// Render the local tiles // Render the local tiles
void FGTileMgr::render( void ) { void FGTileMgr::render( void ) {
FG_LOG( FG_TERRAIN, FG_ALERT,
"FGTileMgr::render() is depricated. We shouldn't be here!" );
FGInterface *f; FGInterface *f;
FGTileCache *c; FGTileCache *c;
FGTileEntry *t; FGTileEntry *t;
@ -901,7 +904,7 @@ void FGTileMgr::render( void ) {
for ( ; current != last; ++current ) { for ( ; current != last; ++current ) {
frag_ptr = &(*current); frag_ptr = &(*current);
if ( frag_ptr->display_list >= 0 ) { if ( false /* frag_ptr->display_list >= 0 */ ) {
// Fine (fragment based) culling // Fine (fragment based) culling
frag_offset = frag_ptr->center - scenery.center; frag_offset = frag_ptr->center - scenery.center;