Hi Jason,

Your final geometry has the DrawElementsUInt refernces vertex with
index 6, yet you only have 4 color indices.  The OSG doesn't check at
runtime to see if you've put in valid data, it simply passes to
OpenGL, this is done so that well conditioned scene graphs don't pay
the penalty required to catch badly conditioned scene graphs, much in
the same way that OpenGL doesn't try to nanny you.

As a general note I'd strongly recommend against using vertex indices
other that through DrawElement*() primitive sets as it force the OSG
to use OpenGL slow paths for dispatching geometry and primitive calls
as OpenGL.  For performance Its better to duplicate vertex data and
use DrawElements*() than use vertex indices.

I would like to move indice support out of osg::Geometry into a
separate class that isn't part of the core OSG to prevent to help
guide users into use fast paths over "tempting" but inefficient slow
paths.

Robert.

On 12/19/06, Jason K. Howlett <[EMAIL PROTECTED]> wrote:
I have a very simple model (see below for .osg file) with a box with
four sides and a top. The color of the top of the box is specified as a
PER_VERTEX color index array, but it turns out that all four vertices
have the same color. If I load this model and view it with
osgProducer::Viewer and *without* using osgUtil::Optimizer to optimize
the model, the program seg faults. If I optimize the model with
osgUtil::Optimizer, the PER_VERTEX binding for the roof polygon is
changed to PER_PRIMITIVE (see the note in the file data below for
location) and the model displays fine (this change makes sense, of
course, for this statically colored model). Shouldn't the model display
even with the PER_VERTEX setting?

I tracked this through the code (version 1.2) and found in Geometry.cpp,
line 1762
      if (_colorData.binding==BIND_PER_VERTEX)            drawColor(vindex);
In this case, vindex has a value of 6. Following the call into
DrawColor::operator()(int), defined at line 189 as an inline function,
the input parameter pos, which should be 6, is instead some large random
number. This initiates the seg fault as pos is used as an index into the
_colors array.

Please let me know if there is any additional information I can provide
that might be helpful.
Jason


test.osg
Group {
  DataVariance DYNAMIC
  nodeMask 0xffffffff
  cullingActive TRUE
  num_children 1
  Geode {
    DataVariance DYNAMIC
    nodeMask 0xffffffff
    cullingActive TRUE
    num_drawables 2
    Geometry {
      DataVariance DYNAMIC
      useDisplayList TRUE
      useVertexBufferObjects FALSE
      PrimitiveSets 1
      {
        DrawElementsUInt TRIANGLE_STRIP 10
        {
          0 1 2 3 4 5 6 7 0 1
        }
      }
      VertexArray UniqueID Vec3Array_0 Vec3Array 8
      {
        180 30 20
        180 30 0
        180 60 20
        180 60 0
        210 60 20
        210 60 0
        210 30 20
        210 30 0
      }
      ColorBinding PER_VERTEX
      ColorArray UniqueID Vec4Array_1 Vec4Array 3
      {
        0 0.5 0 1
        1 1 0 1
        0.6 0.6 0.6 1
      }
      ColorIndices UIntArray 8       {
        1 0 1 0 1 0 1 0
      }
    }
    Geometry {
      DataVariance DYNAMIC
      useDisplayList TRUE
      useVertexBufferObjects FALSE
      PrimitiveSets 1
      {
        DrawElementsUInt POLYGON 4
        {
          0 2 4 6
        }
      }
      VertexArray Use Vec3Array_0
      ColorBinding PER_VERTEX         **********  This is the line that
changes **********
      ColorArray Use Vec4Array_1
      ColorIndices UIntArray 4       {
        2 2 2 2
      }
    }
  }
}

--
Jason K. Howlett
U.S. Army Aeroflightdynamics Directorate

Phone:  650-604-5374
Fax:    650-604-2414
mailto: [EMAIL PROTECTED]
Mail Stop T12B-2
Moffett Field, CA 94035-1000

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to