Show
Ignore:
Timestamp:
10/21/14 17:10:27 (35 hours ago)
Author:
robert
Message:

Added shaders to support experimental shader based displacement mapping technique osgTerrain::ShaderTerrain?.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgUtil/Tessellator.cpp

    r13488 r13502  
    610610void Tessellator::collectTessellation(osg::Geometry &geom, unsigned int originalIndex) 
    611611{ 
     612    if (geom.containsDeprecatedData()) geom.fixDeprecatedData(); 
     613     
    612614    osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geom.getVertexArray()); 
    613615    VertexPtrToIndexMap vertexPtrToIndexMap; 
     
    626628        osg::Vec3Array* normals = NULL; // GWM Sep 2002 - add normals for extra facets 
    627629        int iprim=0; 
    628         if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    629             geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) 
     630        if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) 
    630631        { 
    631632            normals = dynamic_cast<osg::Vec3Array*>(geom.getNormalArray()); // GWM Sep 2002 
     
    634635        osg::Vec4Array* cols4 = NULL; // GWM Dec 2003 colours are vec4 
    635636        osg::Vec3Array* cols3 = NULL; // GWM Dec 2003 colours are vec3 
    636         if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    637               geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) 
     637        if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) 
    638638        { 
    639639              Array* colours = geom.getColorArray(); // GWM Dec 2003 - need to duplicate face colours 
     
    709709              {   // first primitive so collect primitive normal & colour. 
    710710                  if (normals) { 
    711                      if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE) 
    712                         norm=(*normals)[originalIndex + _extraPrimitives]; 
    713                      else 
    714                         norm=(*normals)[iprim]; // GWM Sep 2002 the flat shaded normal 
     711                    norm=(*normals)[iprim]; // GWM Sep 2002 the flat shaded normal 
    715712                  } 
    716713                  if (cols4) { 
     
    731728                  if (normals) 
    732729                  { 
    733                       if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE) 
    734                       { 
    735                           _extraPrimitives++; 
    736                           normals->insert(normals->begin() + originalIndex + _extraPrimitives, norm); 
    737                       } 
    738                       else 
    739                         normals->push_back(norm); // GWM Sep 2002 add flat shaded normal for new facet 
     730                    normals->push_back(norm); // GWM Sep 2002 add flat shaded normal for new facet 
    740731                  } 
    741732                  if (cols4 && _index>=cols4->size()) { 
     
    746737                  } 
    747738                  if (prim->_mode==GL_TRIANGLES) { 
    748                       if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET || 
    749                           geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE) { // need one per triangle? Not one per set. 
     739                      if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) { // need one per triangle? Not one per set. 
    750740                          for (int ii=1; ii<ntris; ii++) { 
    751741                              if (normals) normals->push_back(norm); // GWM Sep 2002 add flat shaded normal for new facet 
    752742                          } 
    753743                      } 
    754                       if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET || 
    755                           geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE) { // need one per triangle? Not one per set. 
     744                      if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) { // need one per triangle? Not one per set. 
    756745                          for (int ii=1; ii<ntris; ii++) { 
    757746                              if (cols3 && _index>=cols3->size()) {