In the OSG OpenFlight plugin these names are ignored when reading, and
empty strings are written.
As we need these names in the OSG scene graph by our application, I
changed the plugin code, so the names are now stored in class
"osg::Material" (derived from "osg::Object") by
material->setName();
(see "PaletteRecords.cpp, line 195) when reading the file, and written
to file by
dos.writeString( m.Material->getName(), 12 );
(see MaterialPaletteManager.cpp, line 80).
As these names otherwise get lost when reading an OpenFlight file and
writing it again e.g. by
osgconv example.flt converted_example.flt
these changes make the plugin more complete.
The changes were made to OSG revision 8425, and were tested by
osgconv example.flt converted_example.flt
comparing the material palettes of both files inside Multigen Creator."
Currently, if the texture attribute file doesn't explicitly specify an
internal format, the loader will force it to use GL_RGB, which keeps
translucent textures (eg. GL_RGBA textures) from showing up properly.
This patch changes the default behavior to simply use the image's format
instead of forcing a particular format."
the specification. With these mods, blink sequences are now created for
flashing light point nodes, either palletized (v.15.8 and later) or
non-palletized (15.7 and earlier). Thanks to Brede for his
implementation of the palletized light point nodes.
There is still work to do on adding the capability to properly handle
light point system nodes, but this does add some capability that did not
previously exist. So, I wanted to at least submit this and I will
hopefully provide the additional capability in the near future.
I've tested the code modifications with Visual Studio 2005. I don't
have the means to test any other operating system, but I would suspect
that there shouldn't be any issue (famous last words). I used the test
files that I uploaded to the users forum to test the changes.
In addition to the added capability, I changed the light point node
radius to the "actualPixelSize" value in the file. Previously, the
radius was set to half the actual pixel size (see
LightPointRecords.cpp). Not sure why this was the case. But, it was
brought to my attention by a co-worker who created the OpenFlight files
and was testing them with different viewers. If there's some history
for setting the radius to half the size, then this change can be
omitted."
"Geometry.cpp
Make sure number of normals match number of vertices when lit or
vertex-normal pairs are separated when geometries are merged by the
optimizer.
Ancillary.cpp
Improved support for multitexture effect field and use texture
environment from .attr file.
PaletteRecords.cpp
Use search path when looking for shader files.
PrimaryRecords.cpp
Added preset uniforms "TextureUnit0", "TextureUnit1", "TextureUnit2"
and "TextureUnit3" for GLSL shaders."
The cache works for nested externals but is cleared before the master
flight file is returned. I implemented texture caching using the same
mechanism."
"Previously, the new OpenFlight plugin only allowed ext ref models to use
their own palettes. With this change, parent models can override child model
palettes with the parent palettes.
These changes are made against very current CVS (just updated about 1/2 hour
ago, eliminated conflicts, and retested before this posting).
To regurgitate what I did:
A new class, ParentPools (public osg::Referenced), is created when an ext
ref record is parsed, and it is populated with any parent model pools that
should override the child model pools (according to bits in the ext ref
record). The ParentPools object is then set as UserData on the ProxyNode
corresponding to the ext ref.
When the ReadExternalsVisitor hits the ProxyNode, it takes its UserData and
sets it as UserData in the Options parameter to the osgDB::ReadNode call,
which then read the ext ref model. In the course of parsing the Options
string, ReaderWriterFLT also looks at the Options UserData and sets the
parent pools in the Document class accordingly.
When palette records are encountered while loading a file, they are ignored
if the corresponding pool was set by the parent.
Thanks to Brede for consulting with me on the implementation.
"
From Robert Osfield, remapped Paul Martz's changes to Pools.h and PaletteRecords.cpp w.r.t texturePatternIndex being a in16, and converted a char* string to a std::string.
changes to this plugin that aren't in current CVS yet -- this change is
based on current CVS, not our changed files.)
This changes how shader palette records are parsed to support GLSL per the
OpenFlight 16.1 spec. Existing functionality for 16.0 files is preserved.
The change to Document.h simply adds an enum for VERSION_16_1."