]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/tgdb/apt_signs.cxx
Logging: quiet down STG parsing.
[simgear.git] / simgear / scene / tgdb / apt_signs.cxx
index 4053dda16ff204b0a513d4af480ba9d48a1bd3dc..83529475731634bd116ba849b18ed231357b683e 100644 (file)
@@ -33,6 +33,8 @@
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/math/sg_types.hxx>
+#include <simgear/scene/material/Effect.hxx>
+#include <simgear/scene/material/EffectGeode.hxx>
 #include <simgear/scene/material/mat.hxx>
 #include <simgear/scene/material/matlib.hxx>
 
 #define RWY "OBJECT_RUNWAY_SIGN: "
 
 using std::vector;
+using namespace simgear;
 
 // for temporary storage of sign elements
 struct element_info {
-    element_info(SGMaterial *m, osg::StateSet *s, SGMaterialGlyph *g, double h)
+    element_info(SGMaterial *m, Effect *s, SGMaterialGlyph *g, double h)
         : material(m), state(s), glyph(g), height(h)
     {
         scale = h * m->get_xsize()
                 / (m->get_ysize() < 0.001 ? 1.0 : m->get_ysize());
     }
     SGMaterial *material;
-    osg::StateSet *state;
+    Effect *state;
     SGMaterialGlyph *glyph;
     double height;
     double scale;
@@ -103,10 +106,6 @@ SGMakeSign(SGMaterialLib *matlib, const string& path, const string& content)
     osg::Group* object = new osg::Group;
     object->setName(content);
 
-    SGMaterial *material;
-    osg::StateSet *lighted_state;
-    osg::StateSet *unlighted_state;
-
     // Part I: parse & measure
     for (const char *s = content.data(); *s; s++) {
         string name;
@@ -216,27 +215,31 @@ SGMakeSign(SGMaterialLib *matlib, const string& path, const string& content)
             }
         }
 
-        if (newmat.size()) {
-            material = matlib->find(newmat);
-            if (!material) {
-                SG_LOG(SG_TERRAIN, SG_ALERT, SIGN "ignoring unknown material `" << newmat << '\'');
-                continue;
-            }
 
-            // set material states (lighted & unlighted)
-            lighted_state = material->get_state();
-            string u = newmat + ".unlighted";
+        if (newmat.size() == 0 )
+          continue;
 
-            SGMaterial *m = matlib->find(u);
-            if (m) {
-                unlighted_state = m->get_state();
-            } else {
-                SG_LOG(SG_TERRAIN, SG_ALERT, SIGN "ignoring unknown material `" << u << '\'');
-                unlighted_state = lighted_state;
-            }
-            newmat = "";
+        SGMaterial *material = matlib->find(newmat);
+        if (!material) {
+            SG_LOG(SG_TERRAIN, SG_ALERT, SIGN "ignoring unknown material `" << newmat << '\'');
+            continue;
         }
 
+
+        // set material states (lighted & unlighted)
+        Effect *lighted_state = material->get_effect();
+        Effect *unlighted_state;
+        string u = newmat + ".unlighted";
+
+        SGMaterial *m = matlib->find(u);
+        if (m) {
+            unlighted_state = m->get_effect();
+        } else {
+            SG_LOG(SG_TERRAIN, SG_ALERT, SIGN "ignoring unknown material `" << u << '\'');
+            unlighted_state = lighted_state;
+        }
+        newmat = "";
+
         SGMaterialGlyph *glyph = material->get_glyph(name);
         if (!glyph) {
             SG_LOG( SG_TERRAIN, SG_ALERT, SIGN "unsupported glyph `" << *s << '\'');
@@ -244,7 +247,7 @@ SGMakeSign(SGMaterialLib *matlib, const string& path, const string& content)
         }
 
         // in managed mode push frame stop and frame start first
-        osg::StateSet *state = lighted ? lighted_state : unlighted_state;
+        Effect *state = lighted ? lighted_state : unlighted_state;
         element_info *e;
         if (newtype && newtype != oldtype) {
             if (close) {
@@ -319,9 +322,9 @@ SGMakeSign(SGMaterialLib *matlib, const string& path, const string& content)
         geometry->setColorBinding(osg::Geometry::BIND_OVERALL);
         geometry->setTexCoordArray(0, tl);
         geometry->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLE_STRIP, 0, vl->size()));
-        osg::Geode* geode = new osg::Geode;
+        EffectGeode* geode = new EffectGeode;
         geode->addDrawable(geometry);
-        geode->setStateSet(element->state);
+        geode->setEffect(element->state);
 
         object->addChild(geode);
         hpos += abswidth;
@@ -344,11 +347,11 @@ SGMakeSign(SGMaterialLib *matlib, const string& path, const string& content)
     geometry->setNormalArray(nl);
     geometry->setNormalBinding(osg::Geometry::BIND_OVERALL);
     geometry->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLE_STRIP, 0, vl->size()));
-    osg::Geode* geode = new osg::Geode;
+    EffectGeode* geode = new EffectGeode;
     geode->addDrawable(geometry);
     SGMaterial *mat = matlib->find("BlackSign");
     if (mat)
-      geode->setStateSet(mat->get_state());
+      geode->setEffect(mat->get_effect());
     object->addChild(geode);
 
     return object;
@@ -367,14 +370,12 @@ SGMakeRunwaySign(SGMaterialLib *matlib, const string& path, const string& name)
     osg::Vec3 heightVec(0, 0, 1);
     osg::Geometry* geometry;
     geometry = osg::createTexturedQuadGeometry(corner, widthVec, heightVec);
-
-    SGMaterial *mat = matlib->find(name);
-    if (mat)
-      geometry->setStateSet(mat->get_state());
-
-    osg::Geode* geode = new osg::Geode;
+    EffectGeode* geode = new EffectGeode;
     geode->setName(name);
     geode->addDrawable(geometry);
+    SGMaterial *mat = matlib->find(name);
+    if (mat)
+      geode->setEffect(mat->get_effect());
 
     return geode;
 }