Hi, everyone,
I applied by this way, does anyone have any more good idea? Code: class MyDrawable : public osg::Drawable { public: MyDrawable() {} /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ MySmokeDrawable(const MyDrawable& MyDrawable,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): osg::Drawable(MyDrawable,copyop) {} META_Object(MyApp,MyDrawable) virtual void drawImplementation(osg::RenderInfo& renderInfo) const { osg::State* state = renderInfo.getState(); state->disableAllVertexArrays(); const osg::Drawable::Extensions* glExt = osg::Drawable::getExtensions(state->getContextID(), true); //vbo create..... glExt->glGenBuffers(1, &vboID); glExt->glBindBuffer(GL_ARRAY_BUFFER_ARB, vboID); glExt->glBufferData(GL_ARRAY_BUFFER_ARB, sizeof(Vertex)*24, NULL, GL_DYNAMIC_DRAW ); glExt->glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, sizeof(Vertex)*24, verts); state->setTexCoordPointer(0, 2, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(12)); state->setNormalPointer(GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(20)); state->setColorPointer(4, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(32)); state->setVertexPointer(3, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(0)); glExt->glGenBuffers(1, &indexVBOID); glExt->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, indexVBOID); glExt->glBufferData(GL_ELEMENT_ARRAY_BUFFER_ARB, 36*sizeof(GLubyte), index, GL_STATIC_DRAW); // glGenBuffers(1, &vboID); // Create the buffer ID, this is basically the same as generating texture ID's // glBindBuffer(GL_ARRAY_BUFFER, vboID); // Bind the buffer (vertex array data) // // glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * 24, NULL, GL_DYNAMIC_DRAW); // glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Vertex) * 24, verts); // // // glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(12)); // glNormalPointer(GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(20)); // glColorPointer(4, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(32)); // glVertexPointer(3, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET(0)); // // // glGenBuffers(1, &indexVBOID); // Generate buffer // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBOID); // Bind the element array buffer // glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLubyte), index, GL_STATIC_DRAW); //create done........do anything you want ... ... } } such as :osg::geometry::useservertexbufferobject(true). and then specify the vbo no. or get the vbo no. from the geometry? thank you for any reply! ... Thank you! Cheers, Ivan Code: ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=39231#39231 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org