[osg-users] How to reduce the cache size limit of OSG ?

OpenSceneGraph Users osg-users at lists.openscenegraph.org
Mon Jun 1 00:04:49 PDT 2020


Hi Hui,

On Monday, 1 June 2020 02:28:04 UTC+1, Hui Li wrote:
>
> Hi Robert,
>
> Sorry for the late reply. The codes of CreateGeometryNode looks like this: 
> osg::ref_ptr<osg::MatrixTransform> CreateGeometryNode() {
>     std::vector<float> xyzs = RandomPoints(); ///< Create ramdon number of 
> points 
>     osg::Vec3Array vs = new osg::Vec3Array(xyzs.size()/3, (const osg::Vec3 
> *)(xyzs.data()));
>     osg::ref_ptr<osg::Geometry> geo = new osg::Geometry;
>     geo->setVertexArray(vs.get());
>     geo->setColorArray(osg::Vec3(0.5,0.5,0.5));
>     geo->setColorBinding(osg::Geometry::BIND_OVERALL);
>     geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS, 0, 
> numpt));
>     geo->getOrCreateStateSet()->setMode(GL_LIGHTING, 
> osg::StateAttribute::OFF);
>     geo->getOrCreateStateSet()->setAttribute(new osg::Point(size), 
> osg::StateAttribute::ON);
>     osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
>     osg::ref_ptr<osg::Geode> geode = new osg::Geode;
>     geode->addDrawable(geo.get());
>     mt->addChild(geode);
>     return mt; 
> }
>
>
Adding and removing data continuously is least efficient way to implement 
this type of functionality, it's not just an OpenGL/OSG thing, it applies 
pretty well to all computing.

If you have a stream of data coming in then the best way to manage it is to 
allocated fixed size data and then fill it in dynamically.  So no adding 
and removing, no new and delete on every frame.

If you have a really large dataset then chunk the data into blocks, 10,000 
vertices per osg::Gemetry in a good place to start, but make this variable 
so you can figure what is the sweet spot for your system.

To vary th enumber of points draw using single DrawArrays per osg::Geometry 
and simply change the count to match the number of vertices you want to 
render.

If your data stream suddenly needs more points to represent it and your 
don't have enough available in your bricks then that is the time to 
allocate new bricks.

As for the cache, well the OSG does have cache for reusing GL objects but 
it intended to be used for the types of usage you are pushing it through.  
Follow the above steps and your application will work perfectly.

Cheers,
Robert.
 

-- 
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+unsubscribe at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/df2eb7ed-2790-4212-bb25-3935326d8edf%40googlegroups.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20200601/89863d1a/attachment.html>


More information about the osg-users mailing list