---------------------------
function FltExportVisitor::writeExternalReference( const osg::ProxyNode& proxy ):
Line 423 in file expPrimaryRecords.cpp has to be changed from
const ParentPools* pp = static_cast<const ParentPools*>(proxy.getUserData() );
to
const ParentPools* pp = dynamic_cast<const ParentPools*>(proxy.getUserData() );
"
"Opcodes.h:
* Added INVALID_OP as -1 in the Opcodes enum. Note that INVALID_OP is not an actual opcode defined in the OpenFlight format. The purpose of INVALID_OP is to mark an opcode variable as invalid or uninitialized.
ReaderWriterFLT.cpp:
* The header node is returned if it exists, even if the file does not contain a node hierarchy. The old behaviour returned a ERROR_IN_READING_FILE error.
* Changed opcodes initialized to -1 to the new enum value INVALID_OP."
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."
It might seem odd that the change actually removes the stub apply(Billboard&) method, but it turns out Billboards are easily supported in subordinate routines of the existing apply(Geode&) method with s dynamic_cast, so there's no need for a separate apply(Billboard&)."
In essence, the FLT exporter was emitting a full set of Mesh records each time it encountered a PrimitiveSet.
Attached is a fix. The code now emits the Mesh set up records, then iterates over all PrimitiveSets and emits a Mesh Primitive record per PrimitiveSet.
It also loops over PrimitiveSets twice, first writing Face records according to the mode, the writing Mesh records (again according to the mode).
The final change included here is support for GL_POINTS as single-vertex Face records.
Billboards are still to come."
* Support for Vec4ubArray for color data
* Support for material transparency
Thanks to Neil Hughes, Jason Daly, yourself, and others for testing and reporting issues."
Changes to existing files:
ReaderWriter.cpp -- to support writeNode() of course.
ReaderWriterATTR.cpp -- to support writeObject -- we write .attr files for textures, if they don't already exist.
AttrData.cpp/.h -- Minor fixes.
CMakeLists.txt -- to include the new files in the build."
From Robert Osfield, port to non Windows platforms just required fixing of header capitilization errors
that windows lets through the net due to having a case insensitive file system.
The files are:
include/osgSim/ObjectRecordData -- The new class. Derives from Object to support .osg IO.
src/osgPlugins/OpenFlight/PrimaryRecords.cpp -- Reads data into that class.
src/osgPlugins/osgSim/IO_ObjectRecordData.cpp -- .osg IO support."
From Robert Osfield, made the OpenFlight read object record data optional via the -O readObjectRecordData ReaderWriter option.
last primary node inside a push-pop level would not get the dispose()
call. This would result in information from some ancillary records,
like the matrix (transform), being lost.
Changes are made to the latest version in the repository.
Thanks to Terry for the help to find and fix the bug and test the changes."
completed the new registration of the plugin-readerwriters
("REGISTER_OSGPLUGIN") according to your osgstaticviewer-example (see
attachment, based on today's svn)."
old loader, but appear very, very wrong with the new one. I traced the
problem to the handling of the palette override flags in the external
reference records. The current behavior for handling the palette
override flags for external references has different offsets for
different OpenFlight version (2 bytes for 14.2-15.1 and 4 bytes for 15.2
and later). However, I believe this behavior is incorrect.
I know that the original 14.2 OpenFlight spec (dated April 1995)
specifies 2 bytes between the filename and the override flags, and the
15.4 and later specs specify 4 bytes. However, I also found a 14.2.4
OpenFlight spec (dated January 1996) that changes the specification to 4
bytes. Also, the databases in question were created using an old IRIX
version of MultiGen II, which wrote OpenFlight 14.2 files natively.
These files also have 4 bytes between the filename and flags.
Furthermore, these databases have always worked properly under earlier
versions of OSG, under Performer, and in every MultiGen product we've used.
This leads me to believe that the original 14.2 spec was incorrect (the
14.2.4 spec corrected this error), and there should be 4 bytes between
the filename and flags for all OpenFlight files version 14.2 and later.
The attached fix modifies the OpenFlight loader to behave in this way."
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."
implements the LightPointSystem class to allow for the OpenFlight
plug-in to read and handle light point system nodes. The behavior is
very similar to the old plug-in in that a MultiSwitch node is created to
handle the "enabled" flag bit set in the node record. The code also
reverts the changes for the actualPixelSize as mentioned above. And
lastly, the code requires the previously submitted changes for the
plug-in.
As for the other changes, I've tested the code with Visual Studio 2005
and the files that I posted in the users forum.
With all of the submitted changes, the OpenFlight plug-in should now be
capable of loading files with light point system nodes and the use of
palletized light points and non-palletized light points.
"