1
0
Fork 0

Optimized property node accesses.

This commit is contained in:
curt 2001-06-06 17:43:16 +00:00
parent 083ba99657
commit 64254d7410

View file

@ -421,147 +421,129 @@ readLabel(const SGPropertyNode * node)
int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? LARGE : SMALL; int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? LARGE : SMALL;
name = node->getStringValue("name"); name = node->getStringValue("name");
x = node->getIntValue("x"); x = node->getIntValue("x");
y = node->getIntValue("y"); y = node->getIntValue("y");
width = node->getIntValue("width"); width = node->getIntValue("width");
height = node->getIntValue("height"); height = node->getIntValue("height");
loadfn = node->getStringValue("data_source"); loadfn = node->getStringValue("data_source");
label_format = node->getStringValue("label_format"); label_format = node->getStringValue("label_format");
prelabel = node->getStringValue("pre_label_string"); prelabel = node->getStringValue("pre_label_string");
postlabel = node->getStringValue("post_label_string"); postlabel = node->getStringValue("post_label_string");
scaling = node->getFloatValue("scale_data"); scaling = node->getFloatValue("scale_data");
options = node->getIntValue("options"); options = node->getIntValue("options");
justi = node->getIntValue("justification"); justi = node->getIntValue("justification");
blinking = node->getIntValue("blinking"); blinking = node->getIntValue("blinking");
latitude = node->getBoolValue("latitude",false); latitude = node->getBoolValue("latitude",false);
longitude = node->getBoolValue("longitude",false); longitude = node->getBoolValue("longitude",false);
working = node->getBoolValue("working"); working = node->getBoolValue("working");
SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
if(justi==0) if ( justi == 0 ) {
justification = LEFT_JUST; justification = LEFT_JUST;
else } else {
if(justi==1) if ( justi == 1 ) {
justification = CENTER_JUST; justification = CENTER_JUST;
else } else {
if(justi==2) if ( justi == 2 ) {
justification = RIGHT_JUST; justification = RIGHT_JUST;
}
}
}
if ( prelabel == "NULL" ) {
pre_label_string = NULL;
} else {
if ( prelabel == "blank" ) {
pre_label_string = " ";
} else {
pre_label_string = prelabel.c_str();
}
}
if(prelabel=="NULL") if ( postlabel == "blank" ) {
pre_label_string = NULL; post_label_string = " ";
else } else {
if(prelabel=="blank") if ( postlabel == "NULL" ) {
pre_label_string = " "; post_label_string = NULL;
else } else {
pre_label_string = prelabel.c_str(); if ( postlabel == "units" ) {
post_label_string = units;
} else {
post_label_string = postlabel.c_str();
}
}
}
if ( loadfn == "aux16" ) {
load_fn = get_aux16;
} else if ( loadfn == "aux17" ) {
load_fn = get_aux17;
} else if ( loadfn == "aux9" ) {
load_fn = get_aux9;
} else if ( loadfn == "aux11" ) {
load_fn = get_aux11;
} else if ( loadfn == "aux12" ) {
load_fn = get_aux12;
} else if ( loadfn == "aux10" ) {
load_fn = get_aux10;
} else if ( loadfn == "aux13" ) {
load_fn = get_aux13;
} else if ( loadfn == "aux14" ) {
load_fn = get_aux14;
} else if ( loadfn == "aux15" ) {
load_fn = get_aux15;
} else if ( loadfn == "aux8" ) {
load_fn = get_aux8;
} else if ( loadfn == "ax" ) {
load_fn = get_Ax;
} else if ( loadfn == "speed" ) {
load_fn = get_speed;
} else if ( loadfn == "mach" ) {
load_fn = get_mach;
} else if ( loadfn == "altitude" ) {
load_fn = get_altitude;
} else if ( loadfn == "agl" ) {
load_fn = get_agl;
} else if ( loadfn == "framerate" ) {
load_fn = get_frame_rate;
} else if ( loadfn == "heading" ) {
load_fn = get_heading;
} else if ( loadfn == "fov" ) {
load_fn = get_fov;
} else if ( loadfn == "vfc_tris_culled" ) {
load_fn = get_vfc_tris_culled;
} else if ( loadfn == "vfc_tris_drawn" ) {
load_fn = get_vfc_tris_drawn;
} else if ( loadfn == "aoa" ) {
load_fn = get_aoa;
} else if ( loadfn == "latitude" ) {
load_fn = get_latitude;
} else if ( loadfn == "longitude" ) {
load_fn = get_longitude;
}
if(postlabel=="blank") p = (instr_item *) new instr_label ( x,
post_label_string = " "; y,
else width,
if(postlabel=="NULL") height,
post_label_string = NULL; load_fn,
else label_format.c_str(),
if(postlabel=="units") pre_label_string,
post_label_string = units; post_label_string,
else scaling,
post_label_string = postlabel.c_str(); options,
justification,
font_size,
if(loadfn=="aux16") blinking,
load_fn = get_aux16; latitude,
else longitude,
if(loadfn=="aux17") working);
load_fn = get_aux17;
else
if(loadfn=="aux9")
load_fn = get_aux9;
else
if(loadfn=="aux11")
load_fn = get_aux11;
else
if(loadfn=="aux12")
load_fn = get_aux12;
else
if(loadfn=="aux10")
load_fn = get_aux10;
else
if(loadfn=="aux13")
load_fn = get_aux13;
else
if(loadfn=="aux14")
load_fn = get_aux14;
else
if(loadfn=="aux15")
load_fn = get_aux15;
else
if(loadfn=="aux8")
load_fn = get_aux8;
else
if(loadfn=="ax")
load_fn = get_Ax;
else
if(loadfn=="speed")
load_fn = get_speed;
else
if(loadfn=="mach")
load_fn = get_mach;
else
if(loadfn=="altitude")
load_fn = get_altitude;
else
if(loadfn=="agl")
load_fn = get_agl;
else
if(loadfn=="framerate")
load_fn = get_frame_rate;
else
if(loadfn=="heading")
load_fn = get_heading;
else
if(loadfn=="fov")
load_fn = get_fov;
else
if(loadfn=="vfc_tris_culled")
load_fn = get_vfc_tris_culled;
else
if(loadfn=="vfc_tris_drawn")
load_fn = get_vfc_tris_drawn;
else
if(loadfn=="aoa")
load_fn = get_aoa;
else
if(loadfn=="latitude")
load_fn = get_latitude;
else
if(loadfn=="longitude")
load_fn = get_longitude;
p = (instr_item *) new instr_label ( x,
y,
width,
height,
load_fn,
label_format.c_str(),
pre_label_string,
post_label_string,
scaling,
options,
justification,
font_size,
blinking,
latitude,
longitude,
working);
return p;
return p;
} // end readLabel } // end readLabel
static instr_item * static instr_item *
@ -570,137 +552,139 @@ readTBI(const SGPropertyNode * node)
instr_item *p; instr_item *p;
name = node->getStringValue("name"); name = node->getStringValue("name");
x = node->getIntValue("x"); x = node->getIntValue("x");
y = node->getIntValue("y"); y = node->getIntValue("y");
width = node->getIntValue("width"); width = node->getIntValue("width");
height = node->getIntValue("height"); height = node->getIntValue("height");
maxBankAngle = node->getFloatValue("maxBankAngle"); maxBankAngle = node->getFloatValue("maxBankAngle");
maxSlipAngle = node->getFloatValue("maxSlipAngle"); maxSlipAngle = node->getFloatValue("maxSlipAngle");
gap_width = node->getIntValue("gap_width"); gap_width = node->getIntValue("gap_width");
working = node->getBoolValue("working"); working = node->getBoolValue("working");
SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name);
p = (instr_item *) new fgTBI_instr( x, p = (instr_item *) new fgTBI_instr( x,
y, y,
width, width,
height, height,
get_roll, get_roll,
get_sideslip, get_sideslip,
maxBankAngle, maxBankAngle,
maxSlipAngle, maxSlipAngle,
gap_width, gap_width,
working); working);
return p; return p;
} //end readTBI } //end readTBI
int readInstrument(const SGPropertyNode * node) int readInstrument(const SGPropertyNode * node)
{ {
instr_item *HIptr; instr_item *HIptr;
if ( fgGetString("/sim/startup/units") == "feet" ) { if ( fgGetString("/sim/startup/units") == "feet" ) {
strcpy(units, " ft"); strcpy(units, " ft");
} else { } else {
strcpy(units, " m"); strcpy(units, " m");
} }
const SGPropertyNode * ladder_group = node->getNode("ladders"); const SGPropertyNode * ladder_group = node->getNode("ladders");
if (ladder_group != 0) { if (ladder_group != 0) {
int nLadders = ladder_group->nChildren(); int nLadders = ladder_group->nChildren();
for (int j = 0; j < nLadders; j++) { for (int j = 0; j < nLadders; j++) {
HIptr = readLadder(ladder_group->getChild(j)); HIptr = readLadder(ladder_group->getChild(j));
HUD_deque.insert( HUD_deque.begin(), HIptr); HUD_deque.insert( HUD_deque.begin(), HIptr);
}// for - ladders }// for - ladders
} }
const SGPropertyNode * card_group = node->getNode("cards"); const SGPropertyNode * card_group = node->getNode("cards");
if (card_group != 0) { if (card_group != 0) {
int nCards = card_group->nChildren(); int nCards = card_group->nChildren();
for (int j = 0; j < nCards; j++) { for (int j = 0; j < nCards; j++) {
HIptr = readCard(card_group->getChild(j));
HUD_deque.insert( HUD_deque.begin(), HIptr);
HIptr = readCard(card_group->getChild(j)); }//for - cards
HUD_deque.insert( HUD_deque.begin(), HIptr); }
}//for - cards const SGPropertyNode * label_group = node->getNode("labels");
} if (label_group != 0) {
int nLabels = label_group->nChildren();
for (int j = 0; j < nLabels; j++) {
const SGPropertyNode * label_group = node->getNode("labels"); HIptr = readLabel(label_group->getChild(j));
if (label_group != 0) { HUD_deque.insert( HUD_deque.begin(), HIptr);
int nLabels = label_group->nChildren();
for (int j = 0; j < nLabels; j++) {
HIptr = readLabel(label_group->getChild(j)); }//for - labels
HUD_deque.insert( HUD_deque.begin(), HIptr); }
}//for - labels const SGPropertyNode * tbi_group = node->getNode("tbis");
} if (tbi_group != 0) {
int nTbis = tbi_group->nChildren();
for (int j = 0; j < nTbis; j++) {
const SGPropertyNode * tbi_group = node->getNode("tbis"); HIptr = readTBI(tbi_group->getChild(j));
if (tbi_group != 0) { HUD_deque.insert( HUD_deque.begin(), HIptr);
int nTbis = tbi_group->nChildren();
for (int j = 0; j < nTbis; j++) {
HIptr = readTBI(tbi_group->getChild(j)); }//for - tbis
HUD_deque.insert( HUD_deque.begin(), HIptr); }
return 0;
}//for - tbis
}
return 0;
}//end readinstrument }//end readinstrument
int readHud( istream &input ) int readHud( istream &input )
{ {
SGPropertyNode root; SGPropertyNode root;
if (!readProperties(input, &root)) { if (!readProperties(input, &root)) {
SG_LOG(SG_INPUT, SG_ALERT, "Malformed property list for hud."); SG_LOG(SG_INPUT, SG_ALERT, "Malformed property list for hud.");
return 0; return 0;
} }
SG_LOG(SG_INPUT, SG_INFO, "Read properties for " << SG_LOG(SG_INPUT, SG_INFO, "Read properties for " <<
root.getStringValue("name")); root.getStringValue("name"));
HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque
SG_LOG(SG_INPUT, SG_INFO, "Reading Hud instruments"); SG_LOG(SG_INPUT, SG_INFO, "Reading Hud instruments");
const SGPropertyNode * instrument_group = root.getChild("instruments"); const SGPropertyNode * instrument_group = root.getChild("instruments");
int nInstruments = instrument_group->nChildren(); int nInstruments = instrument_group->nChildren();
for (int i = 0; i < nInstruments; i++) { for (int i = 0; i < nInstruments; i++) {
const SGPropertyNode * node = instrument_group->getChild(i); const SGPropertyNode * node = instrument_group->getChild(i);
SGPath path( globals->get_fg_root() ); SGPath path( globals->get_fg_root() );
path.append(node->getStringValue("path")); path.append(node->getStringValue("path"));
SG_LOG(SG_INPUT, SG_INFO, "Reading Instrument " SG_LOG(SG_INPUT, SG_INFO, "Reading Instrument "
<< node->getName() << node->getName()
<< " from " << " from "
<< path.str()); << path.str());
SGPropertyNode root2; SGPropertyNode root2;
if (readProperties(path.str(), &root2)) { if (readProperties(path.str(), &root2)) {
readInstrument(&root2); readInstrument(&root2);
}//if }//if
}//for loop(i) }//for loop(i)
return 0;
return 0;
} }
@ -708,31 +692,31 @@ int fgHUDInit( fgAIRCRAFT * /* current_aircraft */ )
{ {
HUD_style = 1; HUD_style = 1;
SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" ); SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" );
string hud_path = string hud_path =
fgGetString("/sim/hud/path", "Huds/Default/default.xml"); fgGetString("/sim/hud/path", "Huds/Default/default.xml");
SGPath path(globals->get_fg_root()); SGPath path(globals->get_fg_root());
path.append(hud_path); path.append(hud_path);
ifstream input(path.c_str()); ifstream input(path.c_str());
if (!input.good()) if (!input.good())
{ {
SG_LOG(SG_INPUT, SG_ALERT, SG_LOG(SG_INPUT, SG_ALERT,
"Cannot read Hud configuration from " << path.str()); "Cannot read Hud configuration from " << path.str());
} }
else else
{ {
readHud(input); readHud(input);
input.close(); input.close();
} }
fgHUDalphaInit(); fgHUDalphaInit();
fgHUDReshape(); fgHUDReshape();
return 0; // For now. Later we may use this for an error code. return 0; // For now. Later we may use this for an error code.
} }
@ -743,19 +727,19 @@ int fgHUDInit2( fgAIRCRAFT * /* current_aircraft */ )
SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" ); SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" );
SGPath path(globals->get_fg_root()); SGPath path(globals->get_fg_root());
path.append("Huds/Minimal/default.xml"); path.append("Huds/Minimal/default.xml");
ifstream input(path.c_str()); ifstream input(path.c_str());
if (!input.good()) { if (!input.good()) {
SG_LOG(SG_INPUT, SG_ALERT, SG_LOG(SG_INPUT, SG_ALERT,
"Cannot read Hud configuration from " << path.str()); "Cannot read Hud configuration from " << path.str());
} }
else { else {
readHud(input); readHud(input);
input.close(); input.close();
} }
return 0; // For now. Later we may use this for an error code. return 0; // For now. Later we may use this for an error code.
@ -968,8 +952,8 @@ void fgHUDReshape(void) {
static void set_hud_color(float r, float g, float b) { static void set_hud_color(float r, float g, float b) {
fgGetBool("/sim/hud/antialiased") ? fgGetBool("/sim/hud/antialiased") ?
glColor4f(r,g,b,hud_trans_alpha) : glColor4f(r,g,b,hud_trans_alpha) :
glColor3f(r,g,b); glColor3f(r,g,b);
} }
// fgUpdateHUD // fgUpdateHUD
@ -1010,7 +994,10 @@ void fgUpdateHUD( void ) {
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
if( fgGetBool("/sim/hud/antialiased") ) { static const SGPropertyNode * antialiased_node
= fgGetNode("/sim/hud/antialiased");
if( antialiased_node->getBoolValue() ) {
glEnable(GL_LINE_SMOOTH); glEnable(GL_LINE_SMOOTH);
// glEnable(GL_BLEND); // glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
@ -1104,9 +1091,9 @@ void fgUpdateHUD( void ) {
// extern char *fgAPget_TargetLatLonStr( void ); // extern char *fgAPget_TargetLatLonStr( void );
int apY = 480 - 80; int apY = 480 - 80;
// char scratch[128]; // char scratch[128];
// HUD_TextList.add( fgText( "AUTOPILOT", 20, apY) ); // HUD_TextList.add( fgText( "AUTOPILOT", 20, apY) );
// apY -= 15; // apY -= 15;
if( current_autopilot->get_HeadingEnabled() ) { if( current_autopilot->get_HeadingEnabled() ) {
HUD_TextList.add( fgText( 40, apY, HUD_TextList.add( fgText( 40, apY,
current_autopilot->get_TargetHeadingStr()) ); current_autopilot->get_TargetHeadingStr()) );
@ -1142,15 +1129,15 @@ void fgUpdateHUD( void ) {
HUD_LineList.draw(); HUD_LineList.draw();
// glEnable(GL_LINE_STIPPLE); // glEnable(GL_LINE_STIPPLE);
// glLineStipple( 1, 0x00FF ); // glLineStipple( 1, 0x00FF );
// HUD_StippleLineList.draw(); // HUD_StippleLineList.draw();
// glDisable(GL_LINE_STIPPLE); // glDisable(GL_LINE_STIPPLE);
if( fgGetBool("/sim/hud/antialiased") ) { if( antialiased_node->getBoolValue() ) {
// glDisable(GL_BLEND); // glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH); glDisable(GL_LINE_SMOOTH);
glLineWidth(1.0); glLineWidth(1.0);
} }
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);