]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/tgdb/ShaderGeometry.cxx
Replace SG_USE_STD() by using std::
[simgear.git] / simgear / scene / tgdb / ShaderGeometry.cxx
index 7fdf657f05a0c2119f47edc7c377e0252bb7f055..a6a7c1ed9300018b65eae93373be5c71f4159409 100644 (file)
@@ -32,10 +32,13 @@ namespace simgear
 {
 void ShaderGeometry::drawImplementation(RenderInfo& renderInfo) const
 {
-    for(PositionSizeList::const_iterator itr = _trees.begin();
-        itr != _trees.end();
-        ++itr) {
-        glColor4fv(itr->ptr());
+    osg::State& state = *renderInfo.getState();
+    const Extensions* extensions = getExtensions(state.getContextID(),true);
+
+    for(TreeBin::TreeList::const_iterator t = _trees.begin(); t != _trees.end(); ++t)
+    {
+        extensions->glVertexAttrib1f(1, (float) t->texture_index/varieties);
+        glColor4f(t->position.x(), t->position.y(), t->position.z(), t->scale);
         _geometry->draw(renderInfo);
     }
 }
@@ -44,13 +47,13 @@ BoundingBox ShaderGeometry::computeBound() const
 {
     BoundingBox geom_box = _geometry->getBound();
     BoundingBox bb;
-    for(PositionSizeList::const_iterator itr = _trees.begin();
+    for(TreeBin::TreeList::const_iterator itr = _trees.begin();
         itr != _trees.end();
         ++itr) {
-        bb.expandBy(geom_box.corner(0)*(*itr)[3] +
-                    Vec3((*itr)[0], (*itr)[1], (*itr)[2]));
-        bb.expandBy(geom_box.corner(7)*(*itr)[3] +
-                    Vec3((*itr)[0], (*itr)[1], (*itr)[2]));
+         bb.expandBy(geom_box.corner(0)*itr->scale +
+                     osg::Vec3( itr->position.x(), itr->position.y(), itr->position.z() ));
+         bb.expandBy(geom_box.corner(7)*itr->scale +
+                     osg::Vec3( itr->position.x(), itr->position.y(), itr->position.z() ));
     }
     return bb;
 }
@@ -64,7 +67,7 @@ bool ShaderGeometry_readLocalData(Object& obj, Input& fr)
     if ((fr[0].matchWord("geometry"))) {
         ++fr;
         iteratorAdvanced = true;
-        Drawable* drawable = fr.readDrawable();
+        osg::Drawable* drawable = fr.readDrawable();
         if (drawable) {
             geom._geometry = drawable;
         }
@@ -78,11 +81,15 @@ bool ShaderGeometry_readLocalData(Object& obj, Input& fr)
         iteratorAdvanced = true;
         // skip {
         while (!fr.eof() && fr[0].getNoNestedBrackets() > entry) {
-            Vec4 v;
+            SGVec3f v;
+            int t;
+            float s;
             if (fr[0].getFloat(v.x()) && fr[1].getFloat(v.y())
-                && fr[2].getFloat(v.z()) && fr[3].getFloat(v.w())) {
+                && fr[2].getFloat(v.z()) && fr[3].getInt(t) && fr[4].getFloat(s)) {
                     fr += 4;
-                    geom._trees.push_back(v);
+                    //SGVec3f* v = new SGVec3f(v.x(), v.y(), v.z());
+                    //TreeBin::Tree tree = new TreeBin::Tree(v, t, s);
+                    geom._trees.push_back(TreeBin::Tree(v, t, s));
             } else {
                 ++fr;
             }
@@ -100,12 +107,12 @@ bool ShaderGeometry_writeLocalData(const Object& obj, Output& fw)
     fw.indent() << "instances " << geom._trees.size() << std::endl;
     fw.indent() << "{" << std::endl;
     fw.moveIn();
-    for (ShaderGeometry::PositionSizeList::const_iterator iter
+    for (TreeBin::TreeList::const_iterator iter
              = geom._trees.begin();
          iter != geom._trees.end();
          ++iter) {
-        fw.indent() << iter->x() << " " << iter->y() << " " << iter->z() << " "
-                    << iter->w() << std::endl;
+        fw.indent() << iter->position.x() << " " << iter->position.y() << " " << iter->position.z() << " "
+                    << iter->texture_index << " " << iter->scale << std::endl;
     }
     fw.moveOut();
     fw.indent() << "}" << std::endl;