Hi,

At this point, I would recommend to use a debugger and enter into the
OSG code with it. It may not be a bug in the OSG code, but maybe by
looking at what OSG is doing you can find how to fix your own code.

As a hint on where to look. The dirty() call should be forcing a new
compileBuffer() call in the next draw stage, and this should mean a
glBufferSubData call uploading the new vertex data to the GPU. If this
is OK, then I would look at the geometry draw() call, to see if it is
using the VBO path or another one.

Maybe Robert can help you a bit more with this when he is back next
week.

Regards.
Rubén

El vie, 08-02-2008 a las 11:17 +0100, lucas Grijander escribió:
> Hi!
> 
> I add the vbo->dirty() but it doesn't change anything. I had a look to
> the vbo data and it's fine, it changes, but the render is not
> updated.... any idea??
> 
> regards,
> 
> Crisalix.
> 
> 
> 
> 
> 
> ______________________________________________________________________
> > From: [EMAIL PROTECTED]
> > To: osg-users@lists.openscenegraph.org
> > Date: Thu, 7 Feb 2008 23:38:00 +0100
> > Subject: Re: [osg-users] How to modify the array of vertex from a
> Geometry object
> > 
> > Hi,
> > 
> > I think that the only thing missing is a vbo->dirty()
> > 
> > Regards
> > 
> > El jue, 07-02-2008 a las 19:31 +0100, lucas Grijander escribió:
> > > Thanks Rubén,
> > > 
> > > I'm trying to use VBO, but I think something is missing... I added
> > > this to the creation of my geometry:
> > > 
> > > myGeom->setSupportsDisplayList(false);
> > > myGeom->setUseDisplayList(false);
> > > myVertexBuffer = myGeom->getOrCreateVertexBufferObject();
> > > myVertexBuffer->setArray(0,&v);
> > > myVertexBuffer->setUsage(GL_STREAM_DRAW_ARB);
> > > myGeom->setUseVertexBufferObjects(true);
> > > 
> > > and then inside the callback I'm try to modify the vertex data:
> > > 
> > > osg::Vec3Array *test = dynamic_cast<osg::Vec3Array
> > > *>(testNx->myVertexBuffer->getArray(0));
> > > 
> > > for(int i = 0; i < numVertex; i++)
> > > {
> > > NxMat34 pose = listShapes.at(i)->shape->getGlobalPose(); 
> > > osg::Vec3f trans = osg::Vec3(pose.t.x,pose.t.y,pose.t.z);
> > > 
> > > test->at(i) = trans;
> > > } 
> > > 
> > > but nothing changes in the render.... the object does not move.
> Does
> > > anybody know what is missing??
> > > 
> > > thanks in advance
> > > 
> > > Crisalix.
> > > 
> > > 
> > > 
> > >
> ______________________________________________________________________
> > > > From: [EMAIL PROTECTED]
> > > > To: osg-users@lists.openscenegraph.org
> > > > Date: Wed, 6 Feb 2008 21:33:51 +0100
> > > > Subject: Re: [osg-users] How to modify the array of vertex from
> a
> > > Geometry object
> > > > 
> > > > Hi,
> > > > 
> > > > Some hints:
> > > > 
> > > > 1. Be sure that test->size() is equal to numVertex
> > > > 
> > > > 2. I don't know what the "at" method is, I couldn't find it
> either
> > > on
> > > > the TemplateArray class or the std::vector class. Try with the
> > > vector []
> > > > operator, ie: (*test)[i] = trans
> > > > 
> > > > 3. If you are updating the vertex data once per frame, don't use
> > > display
> > > > lists, it is the worst thing that you can ever do! It is cheaper
> > > even to
> > > > use direct mode. Use vertex buffer objects and configure the VBO
> > > > (getOrCreateVertexBufferObject) in streaming mode
> (GL_STREAM_DRAW).
> > > > 
> > > > Hope this helps.
> > > > 
> > > > Regards.
> > > > 
> > > > Rubén
> > > > 
> > > > El mié, 06-02-2008 a las 14:08 +0100, lucas Grijander escribió:
> > > > > Dear all,
> > > > > 
> > > > > I have to create a 3D surface, and then such surface will be
> > > modified during the application with several deformations. I've
> tried
> > > to create a Geometry object, then I set the VertexArray, and
> finally
> > > inside the render callback I update such vertex with the new ones.
> I
> > > got some errors during the rendering:
> > > > > 
> > > > > Warning: detected OpenGL error "value not valid" after
> > > RenderBin::draw(,)
> > > > > 
> > > > > Does anyone has an idea of such error? In addition, I'm sure
> the
> > > way I am accessing the vertex is not the right one, anybody knows
> the
> > > best way?
> > > > > 
> > > > > here is the code:
> > > > > 
> > > > > 
> > > > > //Create the 3D geometry
> > > > >
> > >
> -------------------------------------------------------------------------
> > > > > osg::Vec3Array(m*n));
> > > > > osg::Vec2Array& t = *(new osg::Vec2Array(m*n));
> > > > > osg::Vec4Array& col = *(new osg::Vec4Array(1));
> > > > > 
> > > > > col[0][0] = col[0][1] = col[0][2] = col[0][3] = 1.0f;
> > > > > 
> > > > > int index = 0;
> > > > > for( i = 0; i < m; i++ )
> > > > > {
> > > > > for(j = 0; j < n; j++)
> > > > > {
> > > > > v[index][0] = i;
> > > > > v[index][1] = 0;
> > > > > v[index][2] = j;
> > > > > 
> > > > > t[index][0] = (float)i/(m-1);
> > > > > t[index][1] = (float)j/(n-1);
> > > > > 
> > > > > index++;
> > > > > }
> > > > > }
> > > > > 
> > > > > myGeom = new osg::Geometry;
> > > > > 
> > > > > myGeom->setVertexArray( &v );
> > > > > myGeom->setTexCoordArray( 0, &t );
> > > > > 
> > > > > myGeom->setColorArray( &col );
> > > > > myGeom->setColorBinding( osg::Geometry::BIND_OVERALL );
> > > > > 
> > > > > for( i = 0; i < m-1; i++ )
> > > > > {
> > > > > osg::DrawElementsUShort* elements = new
> > > osg::DrawElementsUShort(osg::PrimitiveSet::TRIANGLE_STRIP);
> > > > > elements->reserve(m*2);
> > > > > for( j = 0; j < n; j++ )
> > > > > {
> > > > > elements->push_back((i+0)*n+j);
> > > > > elements->push_back((i+1)*n+j);
> > > > > }
> > > > > myGeom->addPrimitiveSet(elements);
> > > > > }
> > > > > 
> > > > > 
> > > > > osg::Texture2D *tex = new osg::Texture2D;
> > > > > 
> > > > > tex->setImage(osgDB::readImageFile("Images/breast.png"));
> > > > > 
> > > > > osg::StateSet *dstate = new osg::StateSet;
> > > > > dstate->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
> > > > > dstate->setTextureAttributeAndModes(0, tex,
> > > osg::StateAttribute::ON );
> > > > > dstate->setTextureAttribute(0, new osg::TexEnv );
> > > > > 
> > > > > myGeom->setStateSet( dstate );
> > > > > 
> > > > > osg::Geode *geode = new osg::Geode;
> > > > > geode->addDrawable( myGeom );
> > > > > 
> > > > > -------------------------------------------------------
> > > > > 
> > > > > //Accessing the elements
> > > > > -------------------------------------------
> > > > > 
> > > > > osg::Vec3Array *test =
> dynamic_cast(myGeom->getVertexArray()); 
> > > > > 
> > > > > for(int i = 0; i < numVertex; i++)
> > > > > {
> > > > > NxMat34 pose = listShapes.at(i)->shape->getGlobalPose(); 
> > > > > osg::Vec3f trans = osg::Vec3(pose.t.x,pose.t.y,pose.t.z);
> > > > > 
> > > > > test->at(i) = trans;
> > > > > 
> > > > > 
> > > > > 
> > > > > } 
> > > > > myGeom->dirtyDisplayList();
> > > > > myGeom->dirtyBound();
> > > > > --------------------------------------------
> > > > > 
> > > > > thank you very much for your help!!!
> > > > > 
> > > > > Crisalix.
> > > > > 
> > > > > 
> > > > >
> _________________________________________________________________
> > > > > Express yourself instantly with MSN Messenger! Download today
> it's
> > > FREE!
> > > > >
> http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
> > > > > _______________________________________________
> > > > > osg-users mailing list
> > > > > osg-users@lists.openscenegraph.org
> > > > >
> > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > > > > 
> > > > 
> > > > _______________________________________________
> > > > osg-users mailing list
> > > > osg-users@lists.openscenegraph.org
> > > >
> > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > > 
> > > 
> > >
> ______________________________________________________________________
> > > Express yourself instantly with MSN Messenger! MSN Messenger
> > > _______________________________________________
> > > osg-users mailing list
> > > osg-users@lists.openscenegraph.org
> > >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > 
> > _______________________________________________
> > osg-users mailing list
> > osg-users@lists.openscenegraph.org
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 
> 
> ______________________________________________________________________
> Express yourself instantly with MSN Messenger! MSN Messenger
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to