Over the last few days I've been checking in significant
implementation changes to osg::State and osg::Geometry to facilitate
the OpenGL ES 2.0 port, these have all gone smoothly, and the nightly
builds haven't yet complained.  The changes I've been making don't
change the public API or functionality of osg::Geometry, so client
apps "should" all just compile and run exactly as before.

I say "should" as despite all the functional and performance testing
I've been doing I can only cover a small portion of the type of app
usage then OSG users can push it through, I also just have linux to
compile against, and with so many internal changes to how data is
dispatched to OpenGL there is a chance of regressions.  Only testing
out in the community will really stress test my changes, so could
users please try out svn/trunk against their own apps.  If you spot
anything odd in behaviour or a performance regression please just
shout and I'll get on to it as soon as possible.

Other changes that are related to the changes in osg::State and
osg::Geometry are the introduction of two helper classes
osg::ArrayDispatchers and osg::GLBeginEndAdapter.  ArrayDispatchers is
primarily used in osg::Geometry to encapsulate the task of dispatching
osg::Array data as OpenGL attributes, and includes support for
automatically remapping glVertex,glColor, glNormal etc calls to
glVertexAttrib equivalents - something that is required for both
OpenGL ES 2.0 and OpenGL 3.0.  osg::GLBeginEndAdapter is also used in
osg::Geometry to dynamically replace all glBegin/glEnd usage with
vertex arrays/vertex attirb arrays, this is required for OpenGL ES
2.0, OpenGL 3.0 and OpenGL ES 1.x as these don't support the old
OpenGL slow paths.

The OSG also had glBegin/glEnd usage in osgText, osgSim and
osgParticle NodeKits, so these now have all their glBegin/glEnd code
replaced by the usage of the GLBeginEndAdapter.  Functionally and API
wise these NodeKits are essentially unchanged save for some minor
changes to osg::Particle that are just related to the implementation.

These changes are really about making a smooth transition between
different OpenGL targets, both for the OSG code base and client apps.
The changes also minimize the amount of separate code paths we'll need
for the different OpenGL targets, so we'll all be sharing the majority
of the OSG code base no matter what platform you target, which in turn
means we'll all be sharing the task of testing, debugging and
optimizing - improvements for one target will benefit the others.  The
public interface for the OSG will also be pretty consistent across the
different targets so less of your application code will need to be
OpenGL target specific.

So what to take away from all this?  The internal implementation of
how geometry data is dispatched to OpenGL is now done with almost
completely new code, but the public interfaces have not changed in any
way that should break the build of client apps.  Functionally the new
code is the same - it achieves the same result just with different,
and more flexible and future proofed, code paths.   If I've done my
job well we'll see few regressions due to these changes.  Fingers
crossed we won't see any ;-)

Robert.

ps. Hopefully you'll find the new code in
osg::Geometry::drawImplementation() more readable and efficient too
:-)
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to