More consistent indentation.
This commit is contained in:
@@ -121,218 +121,216 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options,
|
||||
const SGPropertyNode *props,
|
||||
SGPropertyNode *prop_root)
|
||||
{
|
||||
std::vector<bool> dds;
|
||||
std::vector<SGPropertyNode_ptr> textures = props->getChildren("texture");
|
||||
for (unsigned int i = 0; i < textures.size(); i++)
|
||||
{
|
||||
string tname = textures[i]->getStringValue();
|
||||
|
||||
if (tname.empty()) {
|
||||
tname = "unknown.rgb";
|
||||
}
|
||||
|
||||
SGPath tpath("Textures.high");
|
||||
tpath.append(tname);
|
||||
string fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
if (fullTexPath.empty()) {
|
||||
tpath = SGPath("Textures");
|
||||
tpath.append(tname);
|
||||
fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
}
|
||||
|
||||
if (tpath.lower_extension() == "dds") {
|
||||
dds.push_back(true);
|
||||
} else {
|
||||
dds.push_back(false);
|
||||
}
|
||||
|
||||
if (!fullTexPath.empty() ) {
|
||||
_internal_state st( NULL, fullTexPath, false, options );
|
||||
_status.push_back( st );
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<SGPropertyNode_ptr> texturesets = props->getChildren("texture-set");
|
||||
for (unsigned int i = 0; i < texturesets.size(); i++)
|
||||
{
|
||||
_internal_state st( NULL, false, options );
|
||||
std::vector<SGPropertyNode_ptr> textures = texturesets[i]->getChildren("texture");
|
||||
for (unsigned int j = 0; j < textures.size(); j++)
|
||||
std::vector<bool> dds;
|
||||
std::vector<SGPropertyNode_ptr> textures = props->getChildren("texture");
|
||||
for (unsigned int i = 0; i < textures.size(); i++)
|
||||
{
|
||||
string tname = textures[j]->getStringValue();
|
||||
if (tname.empty()) {
|
||||
tname = "unknown.rgb";
|
||||
}
|
||||
string tname = textures[i]->getStringValue();
|
||||
|
||||
SGPath tpath("Textures.high");
|
||||
tpath.append(tname);
|
||||
string fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
if (fullTexPath.empty()) {
|
||||
tpath = SGPath("Textures");
|
||||
tpath.append(tname);
|
||||
fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
}
|
||||
|
||||
if (j == 0) {
|
||||
if (tpath.lower_extension() == "dds") {
|
||||
dds.push_back(true);
|
||||
} else {
|
||||
dds.push_back(false);
|
||||
}
|
||||
}
|
||||
|
||||
st.add_texture(fullTexPath, textures[j]->getIndex());
|
||||
}
|
||||
|
||||
if (!st.texture_paths.empty() ) {
|
||||
_status.push_back( st );
|
||||
}
|
||||
}
|
||||
|
||||
if (textures.size() == 0 && texturesets.size() == 0) {
|
||||
SGPath tpath("Textures");
|
||||
tpath.append("Terrain");
|
||||
tpath.append("unknown.rgb");
|
||||
_internal_state st( NULL, tpath.str(), true, options );
|
||||
_status.push_back( st );
|
||||
}
|
||||
|
||||
std::vector<SGPropertyNode_ptr> masks = props->getChildren("object-mask");
|
||||
for (unsigned int i = 0; i < masks.size(); i++)
|
||||
{
|
||||
string omname = masks[i]->getStringValue();
|
||||
|
||||
if (! omname.empty()) {
|
||||
SGPath ompath("Textures.high");
|
||||
ompath.append(omname);
|
||||
string fullMaskPath = SGModelLib::findDataFile(ompath.str(), options);
|
||||
|
||||
if (fullMaskPath.empty()) {
|
||||
ompath = SGPath("Textures");
|
||||
ompath.append(omname);
|
||||
fullMaskPath = SGModelLib::findDataFile(ompath.str(), options);
|
||||
}
|
||||
|
||||
if (fullMaskPath.empty()) {
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "Cannot find texture file \""
|
||||
<< ompath.str() << "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::Image* image = osgDB::readImageFile(fullMaskPath, options);
|
||||
if (image && image->valid())
|
||||
{
|
||||
osg::Texture2D* object_mask = new osg::Texture2D;
|
||||
|
||||
bool dds_mask = (ompath.lower_extension() == "dds");
|
||||
|
||||
if (dds[i] != dds_mask) {
|
||||
// Texture format does not match mask format. This is relevant for
|
||||
// the object mask, as DDS textures have an origin at the bottom
|
||||
// left rather than top left, therefore we flip the object mask
|
||||
// vertically.
|
||||
image->flipVertical();
|
||||
}
|
||||
|
||||
object_mask->setImage(image);
|
||||
|
||||
// We force the filtering to be nearest, as the red channel (rotation)
|
||||
// in particular, doesn't make sense to be interpolated between pixels.
|
||||
object_mask->setFilter(osg::Texture::MIN_FILTER, osg::Texture::NEAREST);
|
||||
object_mask->setFilter(osg::Texture::MAG_FILTER, osg::Texture::NEAREST);
|
||||
|
||||
object_mask->setDataVariance(osg::Object::STATIC);
|
||||
object_mask->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
|
||||
object_mask->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
|
||||
_masks.push_back(object_mask);
|
||||
if (tname.empty()) {
|
||||
tname = "unknown.rgb";
|
||||
}
|
||||
|
||||
SGPath tpath("Textures.high");
|
||||
tpath.append(tname);
|
||||
string fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
if (fullTexPath.empty()) {
|
||||
tpath = SGPath("Textures");
|
||||
tpath.append(tname);
|
||||
fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
}
|
||||
|
||||
if (tpath.lower_extension() == "dds") {
|
||||
dds.push_back(true);
|
||||
} else {
|
||||
dds.push_back(false);
|
||||
}
|
||||
|
||||
if (!fullTexPath.empty() ) {
|
||||
_internal_state st( NULL, fullTexPath, false, options );
|
||||
_status.push_back( st );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xsize = props->getDoubleValue("xsize", 0.0);
|
||||
ysize = props->getDoubleValue("ysize", 0.0);
|
||||
wrapu = props->getBoolValue("wrapu", true);
|
||||
wrapv = props->getBoolValue("wrapv", true);
|
||||
mipmap = props->getBoolValue("mipmap", true);
|
||||
light_coverage = props->getDoubleValue("light-coverage", 0.0);
|
||||
wood_coverage = props->getDoubleValue("wood-coverage", 0.0);
|
||||
tree_height = props->getDoubleValue("tree-height-m", 0.0);
|
||||
tree_width = props->getDoubleValue("tree-width-m", 0.0);
|
||||
tree_range = props->getDoubleValue("tree-range-m", 0.0);
|
||||
tree_varieties = props->getIntValue("tree-varieties", 1);
|
||||
std::vector<SGPropertyNode_ptr> texturesets = props->getChildren("texture-set");
|
||||
for (unsigned int i = 0; i < texturesets.size(); i++)
|
||||
{
|
||||
_internal_state st( NULL, false, options );
|
||||
std::vector<SGPropertyNode_ptr> textures = texturesets[i]->getChildren("texture");
|
||||
for (unsigned int j = 0; j < textures.size(); j++)
|
||||
{
|
||||
string tname = textures[j]->getStringValue();
|
||||
if (tname.empty()) {
|
||||
tname = "unknown.rgb";
|
||||
}
|
||||
|
||||
const SGPropertyNode* treeTexNode = props->getChild("tree-texture");
|
||||
|
||||
if (treeTexNode) {
|
||||
string treeTexPath = props->getStringValue("tree-texture");
|
||||
SGPath tpath("Textures.high");
|
||||
tpath.append(tname);
|
||||
string fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
if (fullTexPath.empty()) {
|
||||
tpath = SGPath("Textures");
|
||||
tpath.append(tname);
|
||||
fullTexPath = SGModelLib::findDataFile(tpath.str(), options);
|
||||
}
|
||||
|
||||
if (j == 0) {
|
||||
if (tpath.lower_extension() == "dds") {
|
||||
dds.push_back(true);
|
||||
} else {
|
||||
dds.push_back(false);
|
||||
}
|
||||
}
|
||||
|
||||
st.add_texture(fullTexPath, textures[j]->getIndex());
|
||||
}
|
||||
|
||||
if (!st.texture_paths.empty() ) {
|
||||
_status.push_back( st );
|
||||
}
|
||||
}
|
||||
|
||||
if (textures.size() == 0 && texturesets.size() == 0) {
|
||||
SGPath tpath("Textures");
|
||||
tpath.append("Terrain");
|
||||
tpath.append("unknown.rgb");
|
||||
_internal_state st( NULL, tpath.str(), true, options );
|
||||
_status.push_back( st );
|
||||
}
|
||||
|
||||
if (! treeTexPath.empty()) {
|
||||
SGPath treePath("Textures.high");
|
||||
treePath.append(treeTexPath);
|
||||
tree_texture = SGModelLib::findDataFile(treePath.str(), options);
|
||||
|
||||
if (tree_texture.empty()) {
|
||||
treePath = SGPath("Textures");
|
||||
treePath.append(treeTexPath);
|
||||
tree_texture = SGModelLib::findDataFile(treePath.str(), options);
|
||||
}
|
||||
std::vector<SGPropertyNode_ptr> masks = props->getChildren("object-mask");
|
||||
for (unsigned int i = 0; i < masks.size(); i++)
|
||||
{
|
||||
string omname = masks[i]->getStringValue();
|
||||
|
||||
if (! omname.empty()) {
|
||||
SGPath ompath("Textures.high");
|
||||
ompath.append(omname);
|
||||
string fullMaskPath = SGModelLib::findDataFile(ompath.str(), options);
|
||||
|
||||
if (fullMaskPath.empty()) {
|
||||
ompath = SGPath("Textures");
|
||||
ompath.append(omname);
|
||||
fullMaskPath = SGModelLib::findDataFile(ompath.str(), options);
|
||||
}
|
||||
|
||||
if (fullMaskPath.empty()) {
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "Cannot find texture file \""
|
||||
<< ompath.str() << "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::Image* image = osgDB::readImageFile(fullMaskPath, options);
|
||||
if (image && image->valid())
|
||||
{
|
||||
osg::Texture2D* object_mask = new osg::Texture2D;
|
||||
|
||||
bool dds_mask = (ompath.lower_extension() == "dds");
|
||||
|
||||
if (dds[i] != dds_mask) {
|
||||
// Texture format does not match mask format. This is relevant for
|
||||
// the object mask, as DDS textures have an origin at the bottom
|
||||
// left rather than top left, therefore we flip the object mask
|
||||
// vertically.
|
||||
image->flipVertical();
|
||||
}
|
||||
|
||||
object_mask->setImage(image);
|
||||
|
||||
// We force the filtering to be nearest, as the red channel (rotation)
|
||||
// in particular, doesn't make sense to be interpolated between pixels.
|
||||
object_mask->setFilter(osg::Texture::MIN_FILTER, osg::Texture::NEAREST);
|
||||
object_mask->setFilter(osg::Texture::MAG_FILTER, osg::Texture::NEAREST);
|
||||
|
||||
object_mask->setDataVariance(osg::Object::STATIC);
|
||||
object_mask->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
|
||||
object_mask->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
|
||||
_masks.push_back(object_mask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// surface values for use with ground reactions
|
||||
solid = props->getBoolValue("solid", true);
|
||||
friction_factor = props->getDoubleValue("friction-factor", 1.0);
|
||||
rolling_friction = props->getDoubleValue("rolling-friction", 0.02);
|
||||
bumpiness = props->getDoubleValue("bumpiness", 0.0);
|
||||
load_resistance = props->getDoubleValue("load-resistance", 1e30);
|
||||
|
||||
// Taken from default values as used in ac3d
|
||||
ambient[0] = props->getDoubleValue("ambient/r", 0.2);
|
||||
ambient[1] = props->getDoubleValue("ambient/g", 0.2);
|
||||
ambient[2] = props->getDoubleValue("ambient/b", 0.2);
|
||||
ambient[3] = props->getDoubleValue("ambient/a", 1.0);
|
||||
xsize = props->getDoubleValue("xsize", 0.0);
|
||||
ysize = props->getDoubleValue("ysize", 0.0);
|
||||
wrapu = props->getBoolValue("wrapu", true);
|
||||
wrapv = props->getBoolValue("wrapv", true);
|
||||
mipmap = props->getBoolValue("mipmap", true);
|
||||
light_coverage = props->getDoubleValue("light-coverage", 0.0);
|
||||
wood_coverage = props->getDoubleValue("wood-coverage", 0.0);
|
||||
tree_height = props->getDoubleValue("tree-height-m", 0.0);
|
||||
tree_width = props->getDoubleValue("tree-width-m", 0.0);
|
||||
tree_range = props->getDoubleValue("tree-range-m", 0.0);
|
||||
tree_varieties = props->getIntValue("tree-varieties", 1);
|
||||
|
||||
diffuse[0] = props->getDoubleValue("diffuse/r", 0.8);
|
||||
diffuse[1] = props->getDoubleValue("diffuse/g", 0.8);
|
||||
diffuse[2] = props->getDoubleValue("diffuse/b", 0.8);
|
||||
diffuse[3] = props->getDoubleValue("diffuse/a", 1.0);
|
||||
const SGPropertyNode* treeTexNode = props->getChild("tree-texture");
|
||||
|
||||
if (treeTexNode) {
|
||||
string treeTexPath = props->getStringValue("tree-texture");
|
||||
|
||||
specular[0] = props->getDoubleValue("specular/r", 0.0);
|
||||
specular[1] = props->getDoubleValue("specular/g", 0.0);
|
||||
specular[2] = props->getDoubleValue("specular/b", 0.0);
|
||||
specular[3] = props->getDoubleValue("specular/a", 1.0);
|
||||
if (! treeTexPath.empty()) {
|
||||
SGPath treePath("Textures.high");
|
||||
treePath.append(treeTexPath);
|
||||
tree_texture = SGModelLib::findDataFile(treePath.str(), options);
|
||||
|
||||
emission[0] = props->getDoubleValue("emissive/r", 0.0);
|
||||
emission[1] = props->getDoubleValue("emissive/g", 0.0);
|
||||
emission[2] = props->getDoubleValue("emissive/b", 0.0);
|
||||
emission[3] = props->getDoubleValue("emissive/a", 1.0);
|
||||
if (tree_texture.empty()) {
|
||||
treePath = SGPath("Textures");
|
||||
treePath.append(treeTexPath);
|
||||
tree_texture = SGModelLib::findDataFile(treePath.str(), options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shininess = props->getDoubleValue("shininess", 1.0);
|
||||
// surface values for use with ground reactions
|
||||
solid = props->getBoolValue("solid", true);
|
||||
friction_factor = props->getDoubleValue("friction-factor", 1.0);
|
||||
rolling_friction = props->getDoubleValue("rolling-friction", 0.02);
|
||||
bumpiness = props->getDoubleValue("bumpiness", 0.0);
|
||||
load_resistance = props->getDoubleValue("load-resistance", 1e30);
|
||||
|
||||
if (props->hasChild("effect"))
|
||||
effect = props->getStringValue("effect");
|
||||
|
||||
std::vector<SGPropertyNode_ptr> object_group_nodes =
|
||||
((SGPropertyNode *)props)->getChildren("object-group");
|
||||
for (unsigned int i = 0; i < object_group_nodes.size(); i++)
|
||||
object_groups.push_back(new SGMatModelGroup(object_group_nodes[i]));
|
||||
// Taken from default values as used in ac3d
|
||||
ambient[0] = props->getDoubleValue("ambient/r", 0.2);
|
||||
ambient[1] = props->getDoubleValue("ambient/g", 0.2);
|
||||
ambient[2] = props->getDoubleValue("ambient/b", 0.2);
|
||||
ambient[3] = props->getDoubleValue("ambient/a", 1.0);
|
||||
|
||||
// read glyph table for taxi-/runway-signs
|
||||
std::vector<SGPropertyNode_ptr> glyph_nodes = props->getChildren("glyph");
|
||||
for (unsigned int i = 0; i < glyph_nodes.size(); i++) {
|
||||
const char *name = glyph_nodes[i]->getStringValue("name");
|
||||
if (name)
|
||||
glyphs[name] = new SGMaterialGlyph(glyph_nodes[i]);
|
||||
}
|
||||
|
||||
// Read conditions node
|
||||
const SGPropertyNode *conditionNode = props->getChild("condition");
|
||||
if (conditionNode) {
|
||||
condition = sgReadCondition(prop_root, conditionNode);
|
||||
}
|
||||
|
||||
|
||||
diffuse[0] = props->getDoubleValue("diffuse/r", 0.8);
|
||||
diffuse[1] = props->getDoubleValue("diffuse/g", 0.8);
|
||||
diffuse[2] = props->getDoubleValue("diffuse/b", 0.8);
|
||||
diffuse[3] = props->getDoubleValue("diffuse/a", 1.0);
|
||||
|
||||
specular[0] = props->getDoubleValue("specular/r", 0.0);
|
||||
specular[1] = props->getDoubleValue("specular/g", 0.0);
|
||||
specular[2] = props->getDoubleValue("specular/b", 0.0);
|
||||
specular[3] = props->getDoubleValue("specular/a", 1.0);
|
||||
|
||||
emission[0] = props->getDoubleValue("emissive/r", 0.0);
|
||||
emission[1] = props->getDoubleValue("emissive/g", 0.0);
|
||||
emission[2] = props->getDoubleValue("emissive/b", 0.0);
|
||||
emission[3] = props->getDoubleValue("emissive/a", 1.0);
|
||||
|
||||
shininess = props->getDoubleValue("shininess", 1.0);
|
||||
|
||||
if (props->hasChild("effect"))
|
||||
effect = props->getStringValue("effect");
|
||||
|
||||
std::vector<SGPropertyNode_ptr> object_group_nodes =
|
||||
((SGPropertyNode *)props)->getChildren("object-group");
|
||||
for (unsigned int i = 0; i < object_group_nodes.size(); i++)
|
||||
object_groups.push_back(new SGMatModelGroup(object_group_nodes[i]));
|
||||
|
||||
// read glyph table for taxi-/runway-signs
|
||||
std::vector<SGPropertyNode_ptr> glyph_nodes = props->getChildren("glyph");
|
||||
for (unsigned int i = 0; i < glyph_nodes.size(); i++) {
|
||||
const char *name = glyph_nodes[i]->getStringValue("name");
|
||||
if (name)
|
||||
glyphs[name] = new SGMaterialGlyph(glyph_nodes[i]);
|
||||
}
|
||||
|
||||
// Read conditions node
|
||||
const SGPropertyNode *conditionNode = props->getChild("condition");
|
||||
if (conditionNode) {
|
||||
condition = sgReadCondition(prop_root, conditionNode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -406,9 +404,9 @@ osg::Texture2D* SGMaterial::get_object_mask(SGTexturedTriangleBin triangleBin)
|
||||
// so we index based on the texture index,
|
||||
unsigned int i = triangleBin.getTextureIndex() % _status.size();
|
||||
if (i < _masks.size()) {
|
||||
return _masks[i];
|
||||
return _masks[i];
|
||||
} else {
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -459,12 +457,12 @@ void SGMaterial::buildEffectProperties(const SGReaderWriterOptions* options)
|
||||
|
||||
SGMaterialGlyph* SGMaterial::get_glyph (const string& name) const
|
||||
{
|
||||
map<string, SGSharedPtr<SGMaterialGlyph> >::const_iterator it;
|
||||
it = glyphs.find(name);
|
||||
if (it == glyphs.end())
|
||||
return 0;
|
||||
map<string, SGSharedPtr<SGMaterialGlyph> >::const_iterator it;
|
||||
it = glyphs.find(name);
|
||||
if (it == glyphs.end())
|
||||
return 0;
|
||||
|
||||
return it->second;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
|
||||
@@ -480,10 +478,10 @@ SGMaterialGlyph::SGMaterialGlyph(SGPropertyNode *p) :
|
||||
|
||||
void
|
||||
SGSetTextureFilter( int max) {
|
||||
SGSceneFeatures::instance()->setTextureFilter( max);
|
||||
SGSceneFeatures::instance()->setTextureFilter( max);
|
||||
}
|
||||
|
||||
int
|
||||
SGGetTextureFilter() {
|
||||
return SGSceneFeatures::instance()->getTextureFilter();
|
||||
return SGSceneFeatures::instance()->getTextureFilter();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user