Jim, You are addressing three different things in your email, display lists, geometry changes, primitive count.
Dirtying the display list simply regenerates the display list and if you've changed the verts, they will get compiled into the new display list. If they weren't changed, then they'd still get recompiled into the new list. Changing the vertex array tells the underlying objects that their geometry has changed. If you look at the setVertexArray method you'll see it calls dirtyDisplayList and dirtyBound. Changing the primitset set count only changes how many primitives are drawn it doesn't change the contents of the vertex array - only which ones are being used. It doesn't call dirtyDisplayList or dirtyBound. You need to understand these differences to optimally use them for the specific situation. If your geometry changes frequently (every frame), then just disable display lists. You're wasting time regenerating the display lists. If the geometry changes don't really affect the bounding volume, then don't call setVertexArray. Again, you're wasting your time regenerating the bounding volume. Or, overload the computeBound method and calculate the bounding volume based on your knowledge of how you changed the geometry. I use setCount all the time for particle systems whose particles have varying lifetimes. I've found this use in particular to benefit from disabling display lists and using my own computeBound method. Brian This is a PRIVATE message. If you are not the intended recipient, please delete without copying and kindly advise us by e-mail of the mistake in delivery. NOTE: Regardless of content, this e-mail shall not operate to bind CSC to any order or other contract unless pursuant to explicit written agreement or government initiative expressly permitting the use of e-mail for such purpose. • [email protected] wrote: ----- To: [email protected] From: Jim Brooks <[email protected]> Sent by: [email protected] Date: 03/05/2009 09:56PM Subject: [osg-users] modifying vertexs Found two different ways to tell OSG that vertexs were modified. Maybe these are circumventions that aren't proper (?). What is the "one right way"? Call dirtyDisplayList() ? ctor() : mVertexs(new osg::Vec3Array), mDrawArray(new osg::DrawArrays( osg::PrimitiveSet::POINTS,0,0)) { } void AddParticle( const osg::Vec3& v ) { mVertexs->push_back( v ); #if REGULAR_OPENGL_POINTS mDrawArray->setCount( mVertexs->size() ); #endif #if POINT_SPRITES // Passing same vertex array causes update. mGeom->setVertexArray( mVertexs.get() ); #endif } _______________________________________________ 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

