Concerning Collada's osgdb_dae, compiling and execution are fine so it's a
green light from this perspective.

Thanks a lot !

--
Mathieu


On 21 June 2013 12:17, Robert Osfield <[email protected]> wrote:

> Hi Mathieu,
>
> On 21 June 2013 09:55, Mathieu MARACHE <[email protected]> wrote:
> > Unfortunatly, osgdb_dae compilation is broken, it looks like it's using
> the
> > removed indexed geometry API.
>
> Getting COLLADA to compile will likely to me a while so rather than
> wait for this I thought I'd have a bash at converting to ArrayData
> based code to what the equivilant should be using osg::Array.  I have
> made these changes and checked them into svn/trunk, I haven't been
> able to test the compile of them though as I don't have COLLADA built
> yet.  Could you try out an svn update and let me know if this gets the
> build a bit further along.
>
> Below are the changes I've made to the dae plugin.  Fingers cross this
> will be near to the final form that we'll need.
>
> Cheers,
> Robert.
>
>
> $ svn diff
> Index: src/osgPlugins/dae/daeRGeometry.cpp
> ===================================================================
> --- src/osgPlugins/dae/daeRGeometry.cpp (revision 13511)
> +++ src/osgPlugins/dae/daeRGeometry.cpp (working copy)
> @@ -462,8 +462,8 @@
>      osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
>      if (NULL != group->getMaterial())
>          geometry->setName(group->getMaterial());
> -
>
> +
>      osg::ref_ptr<osg::DrawElementsUInt> pDrawElements = new
> osg::DrawElementsUInt(mode);
>      geometry->addPrimitiveSet(pDrawElements.get());
>
> @@ -773,7 +773,7 @@
>          return false;
>      }
>
> -    /// Templated getter for memebers, used for createGeometryData()
> +    /// Templated getter for memebers, used for createGeometryArray()
>      enum ValueType { POSITION, COLOR, NORMAL, TEXCOORD };
>      template <int Value>
>      inline int get() const;
> @@ -796,12 +796,12 @@
>
>  typedef std::map<VertexIndices, GLuint> VertexIndicesIndexMap;
>
> -/// Creates a value array, packed in a osg::Geometry::ArrayData,
> corresponding to indexed values.
> +/// Creates a value array, packed in a osg::Array, corresponding to
> indexed values.
>  template <class ArrayType, int Value>
> -osg::Geometry::ArrayData createGeometryData(domSourceReader &
> sourceReader, const VertexIndicesIndexMap & vertexIndicesIndexMap, int
> texcoordNum=-1) {
> +ArrayType createGeometryArray(domSourceReader & sourceReader, const
> VertexIndicesIndexMap & vertexIndicesIndexMap, int texcoordNum=-1) {
>      const ArrayType * source = sourceReader.getArray<ArrayType>();
> -    if (!source) return osg::Geometry::ArrayData();
> -    ArrayType * pArray = new ArrayType;
> +    if (!source) return 0;
> +    ArrayType * pArray = new ArrayType(osg::Geometry::BIND_PER_VERTEX);
>      for (VertexIndicesIndexMap::const_iterator it =
> vertexIndicesIndexMap.begin(), end = vertexIndicesIndexMap.end(); it
> != end; ++it) {
>          int index = texcoordNum>=0 ?
> it->first.texcoord_indices[texcoordNum] : it->first.get<Value>();
>          if (index>=0 && static_cast<unsigned
> int>(index)<source->size()) pArray->push_back(source->at(index));
> @@ -809,17 +809,17 @@
>              // Invalid data (index out of bounds)
>              //LOG_WARN << ...
>              //pArray->push_back(0);
> -            return osg::Geometry::ArrayData();
> +            return 0;
>          }
>      }
> -    return osg::Geometry::ArrayData(pArray,
> osg::Geometry::BIND_PER_VERTEX);
> +    return pArray;
>  }
>
>
>  template <class ArrayTypeSingle, class ArrayTypeDouble, int Value>
> -inline osg::Geometry::ArrayData createGeometryData(domSourceReader &
> sourceReader, const VertexIndicesIndexMap & vertexIndicesIndexMap,
> bool useDoublePrecision, int texcoordNum=-1) {
> -    if (useDoublePrecision) return
> createGeometryData<ArrayTypeDouble, Value>(sourceReader,
> vertexIndicesIndexMap, texcoordNum);
> -    else                    return
> createGeometryData<ArrayTypeSingle, Value>(sourceReader,
> vertexIndicesIndexMap, texcoordNum);
> +inline osg::Array* createGeometryArray(domSourceReader &
> sourceReader, const VertexIndicesIndexMap & vertexIndicesIndexMap,
> bool useDoublePrecision, int texcoordNum=-1) {
> +    if (useDoublePrecision) return
> createGeometryArray<ArrayTypeDouble, Value>(sourceReader,
> vertexIndicesIndexMap, texcoordNum);
> +    else                    return
> createGeometryArray<ArrayTypeSingle, Value>(sourceReader,
> vertexIndicesIndexMap, texcoordNum);
>  }
>
>
> @@ -919,28 +919,28 @@
>
>      // Vertices
>      {
> -        osg::Geometry::ArrayData arrayData(
> createGeometryData<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::POSITION>(sources[position_source],
> vertexIndicesIndexMap, readDoubleVertices) );
> -        if (arrayData.array.valid())
> +        osg::ref_ptr<osg::Array> array(
> createGeometryArray<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::POSITION>(sources[position_source],
> vertexIndicesIndexMap, readDoubleVertices) );
> +        if (array.valid())
>          {
> -            geometry->setVertexData(arrayData);
> +            geometry->setVertexArray(array.get());
>          }
>      }
>
>      if (color_source)
>      {
> -        osg::Geometry::ArrayData arrayData(
> createGeometryData<osg::Vec4Array, osg::Vec4dArray,
> VertexIndices::COLOR>(sources[color_source], vertexIndicesIndexMap,
> readDoubleColors) );
> -        if (arrayData.array.valid())
> +        osg::ref_ptr<osg::Array> array(
> createGeometryArray<osg::Vec4Array, osg::Vec4dArray,
> VertexIndices::COLOR>(sources[color_source], vertexIndicesIndexMap,
> readDoubleColors) );
> +        if (array.valid())
>          {
> -            geometry->setColorData(arrayData);
> +            geometry->setColorArray(array.get());
>          }
>      }
>
>      if (normal_source)
>      {
> -        osg::Geometry::ArrayData arrayData(
> createGeometryData<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::NORMAL>(sources[normal_source], vertexIndicesIndexMap,
> readDoubleNormals) );
> -        if (arrayData.array.valid())
> +        osg::ref_ptr<osg::Array> array(
> createGeometryArray<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::NORMAL>(sources[normal_source], vertexIndicesIndexMap,
> readDoubleNormals) );
> +        if (array.valid())
>          {
> -            geometry->setNormalData(arrayData);
> +            geometry->setNormalArray(array.get());
>          }
>      }
>
> @@ -952,18 +952,18 @@
>              //We keep somewhere the mapping between daeElement id and
> created arrays
>
>  _texCoordIdMap.insert(std::pair<std::string,size_t>(id,texcoord_set));
>              // 2D Texcoords
> -            osg::Geometry::ArrayData arrayData(
> createGeometryData<osg::Vec2Array, osg::Vec2dArray,
> VertexIndices::TEXCOORD>(sources[texcoord_source],
> vertexIndicesIndexMap, readDoubleTexcoords, texcoord_set) );
> -            if (arrayData.array.valid())
> +            osg::ref_ptr<osg::Array> array(
> createGeometryArray<osg::Vec2Array, osg::Vec2dArray,
> VertexIndices::TEXCOORD>(sources[texcoord_source],
> vertexIndicesIndexMap, readDoubleTexcoords, texcoord_set) );
> +            if (array.valid())
>              {
> -                geometry->setTexCoordData(texcoord_set, arrayData);
> +                geometry->setTexCoordArray(texcoord_set, array.get());
>              }
>              else
>              {
>                  // 3D Textcoords
> -                osg::Geometry::ArrayData arrayData(
> createGeometryData<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::TEXCOORD>(sources[texcoord_source],
> vertexIndicesIndexMap, readDoubleTexcoords, texcoord_set) );
> -                if (arrayData.array.valid())
> +                osg::ref_ptr<osg::Array> array(
> createGeometryArray<osg::Vec3Array, osg::Vec3dArray,
> VertexIndices::TEXCOORD>(sources[texcoord_source],
> vertexIndicesIndexMap, readDoubleTexcoords, texcoord_set) );
> +                if (array.valid())
>                  {
> -                    geometry->setTexCoordData(texcoord_set, arrayData);
> +                    geometry->setTexCoordArray(texcoord_set, array.get());
>                  }
>              }
>          }
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to