Hi.
I'm not sure I follow the discussion, since each post is starting to become
a separate article, but I'll try to tell what I think.
I don't know the policy on OSG ABI, but if it's to keep ABI compatible
between some releases, I would:
* add compile flag to select between old and new Geometry (defaults to old
one);
* warn during compile time and during running (into the log) that using the
old Geometry is deprecated and will be removed in the following stable
release;
* warn in changelog about the coming ABI breakage;

If the policy is only to keep API compatibility with some minor changes
like obsoleting unused functions, then Geometry could be removed.

2013/6/15 Robert Osfield <robert.osfi...@gmail.com>

> Hi Mattias et. al,
>
> On 14 June 2013 14:23, Mathias Fröhlich <mathias.froehl...@gmx.net> wrote:
> > I really like the idea of GeometryDeprecated. It takes somehow more work
> to
> > make this happen for users. But at very first it's just about changing a
> single
> > datatype. Once it compiles with osg::Geometry again you know that you
> will
> > nowhere have a slow path geometry anymore. You do not need to rely on
> your
> > test coverage and an exception then.
> > I know, this is against what you usually do with your api.
>
> My clean up work today has focused on sliming down
> osg::ArrayDispatchers and as a knock on effect implementing
> GeometryDeprecated has become a bit more complicated as it'll need to
> take on more of the work that ArrayDispatchers used to handle.  I
> don't think it's right for us to bloat the core OSG just to maintain
> deprecated functionality so my current inclination is to perhaps even
> go further and not provide GeometryDeprecated at all.
>
> I'm currently toying with the idea of leaving the deprecated slow path
> methods in osg::Geometry and have flag that gets set to declare this
> osg::Geometry in invalid condition that can't be rendered or handled
> in any osg::Geometry processing, to make this osg::Geometry usable
> you'd then call an optimize method that converts all the indices and
> per primitive usage into OpenGL fast path compliant usage.  My current
> implementation has the valid fast path version of this osg::Geometry
> nested within the invalid one and used in it's place when rendering,
> but this feels a bit cludgy and potentially inefficient when it comes
> to updates.  The awkwardness with this nested osg::Geometry is why I'm
> starting to wonder if just labelling these problem osg::Geometry as
> invalid and let them be ignored unless the uses runs the optimize
> method.
>
> For the .osg, .ive loaders and new serilizers and thinking that by
> default we could automatically run the optimizer on the any problem
> osg::Geometry that have been loaded.
>
>
>
> > If we really start to optimize geometries under the hood, when would you
> do
> > this then? You cannot rely on anything in osgDB since you have to
> account for
> > in application generated geometries. The only non concurrent opportunity
> is
> > the update stage so far. Ok, let's assume that happens there.
> > But then we at least have *huge* geometries. Processing them with this
> kind of
> > optimization to get rid of the indices and that can take a long time.
>
> It can, so I'm inclined to push this back to user and do a one time
> convert after they have created the osg::Geometry.  When could
> possible have a contains invalid osg::Geometry flag in the whole scene
> graph so that the update traversal knows it needs to hunt down and
> convert them, this does add complexity though.  The other alternative
> might be to have a linked list of invalid osg::Geometry that need to
> be dealt with.
>
> Having this invalid/deprecated osg::Geometry be updated each frame
> would be very costly, but then they are any way.  What we really want
> users to do is migrate away from ever creating these bad osg::Geometry
> in the first place, so having to jump through an extra hoop or two to
> make it explicit about what is happening might be the best way, even
> if it does mean that end users can't just recompile and run with the
> latest OSG and expect everything including there old deprecated usage
> to still work.
>
> Offically array Indices and BIND_PER_PRIMTIVE have been deprecated for
> several releases, every time the topic is mentioned I try to persuade
> users to use fast paths. The inline docs have long been clear that
> they are deprecated so perhaps I needn't be so accommodating.
>
>
> >  We
> > experience this as of today with non fast path geometries where the
> driver is
> > doing this work under the hood. And in contrast to osg these drivers
> have a
> > long histroy of optimizing this code paths and are well optimized.
>
> OpenGL drivers have been better at replicating the glBegin/glEnd than
> the OSG equivalent found in the osg::GLBeginEndAdapter, as much as I
> tried to optimize the later I could never get the same performance as
> what the OpenGL driver was doing.  By contrast fast path osg::Geometry
> are relatively easy to just push out to OpenGL without a big CPU
> overhead.
>
>
> > Also update is currently empty. And for applications that do not need an
> > additional graph traversal this should stay like that IMO. Depending on
> the
> > structure of your graph - most probably for viz sim applications - you
> might
> > need to traverse way more nodes in update than you need for cull, since
> you
> > might have loaded much more geometry than you currently have in the
> current
> > view. So having update walk the whole present tree can itself take a
> noticable
> > time.
>
> If we did an update traversal then one would have to limit it to just
> the slow path geometry that is being updated on that frame.  If you
> don't have much slow path geometry this needn't be too slow.  If you
> have lots of slow path geometry then well perhaps you deserve to do
> the work to correct or suffer a slow app...
>
>
> > Rather than that I would prefer to have this explicitly stated in the
> API what
> > is sensible to use and what not.
> > At least a compile switch which only allows me to use fast path stuff
> would be
> > helpful IMO.
> >
> > So I would vote for GeometryDeprecated. May be you can call the two
> classes
> > also FastGeometry vs. Geometry indstead of Geometry vs.
> DeprecatedGemetry.
>
> The clean version has to be the standard osg::Geometry, otherwise we
> end up with practically no one using the new clean and faster version,
> while the majority would be stuck on the old one that has all the
> cruft to handle the few cases where users do have osg::Geometry with
> deprecated slow path usage.
>
> So I want as many people to move across directly to the new
> osg::Geometry with just a recompile and no other changes to their
> application.  It's the minority of users who have been using
> deprecated functionality against long standing advice that need will
> need to do the extra work.  How much extra work, and how easy it'll be
> is the question I'm playing with right now.
>
> How easy and how much work they will need to do will depend upon how I
> get on with my experiments and feedback from the community.  My
> current favourite approach is to just keep the old deprecated
> osg::Geometry for OSG-3.2 but automatically make the osg::Geometry
> that they are used on as invalid and in need of conversion by an
> explicit optimize/fix method call.  Loading of models with deprecated
> usage would be by default automatically converted to the efficient
> form.  This approach wouldn't support automatic updates or any clever
> update traversal mechansim, if the user sticks now invalid
> osg::Geometry in the scene graph without convert them then they'll
> just see holes in the scene and an error on the console, or
> potentially see an exception thrown - the later configured via CMake
> rather as default.
>
> Compiling with the deprecated methods #ifdef'd out is also something
> I'm thinking of providing, but for 3.2 this would be off by default,
> but perhaps we should have them not compiled in by default...
>
> Robert.
> _______________________________________________
> 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