Class BinaryExporter

java.lang.Object
org.web3d.vrml.export.Exporter
org.web3d.vrml.export.BinaryExporter
All Implemented Interfaces:
Comparator<Object>, ContentHandler, ProtoHandler, RouteHandler, ScriptHandler, StringContentHandler

public class BinaryExporter extends Exporter implements Comparator<Object>
An experimental binary format writer.
 Format:
      table describing compression method per fieldType
         # of table entries(8)
         fieldType(8), compression method(8)

      table describing compression method for individual nodes
         # of table entries(16)
         nodeNumber(16), compression method(8)

      scene graph structure
         PROTO definitions
         Nodes
             NodeNumber(8 or 16)
             DEF #(16) or 0(8) for no DEF name.  1st bit(0 = no def)
             Fields
                 fieldNumber(8) 0=end of node  (Internal Xj3D index + 1)
                 field encoding by type

 Compression method numbers:
    Separate set of assigned numbers for fieldType and node
    Consortium assigned numbers are 0-127, the rest are locally definable

 FieldType Compression methods implemented
      All field types  0  Straight IEEE Encoding
      MFInt32          1  Squash Range
      MFFloat          1  Convert to Int, squash range

 Goals:
    Enable experimentation with compression methods.
    Avoid having experimenters change this file
    Enable app writers to choose different compression methods.

 Design:
    Have a properties file saying what class implements the compression method
    fieldType, method, class
    nodeNumber, method, class

 Each compressor class must implement either the FieldCompressor or NodeCompressor interface

 ----------------------------------
 Proposed New Structure

 Header
   Binary spec version
   Profile
      length(8)
      data
   Component
      number of components(8)
         length(8)
         data
   Number of Bits used for Node Number(max 16)
   Number of Bits used for DEF lookup(max 32)
   Number of Bits used for field name

   Node Dictionary Table
      num entries(32)
      values(UTF8)
   DEF Dictionary Table
      num entries(32)
      values(UTF8)
   Field Table
      num entries(32)   -- Number of field table entries
      num fields for this node
      values(UTF8)

   Table describing compression method per fieldType
         # of table entries(8)
         fieldType(8),
         number of methods(8)  Cannot exceed 8 entries
            compression method(8)  -- Indexed into X3D Binary Spec

   Table describing compression method for individual nodes
         # of table entries(16)
         nodeNumber(16), compression method(8)


   Proto Definitions, assign NodeNum to each Prototype.  Retain nested structures.
      Structure TBD

   Import/Export Statements
      Structure TBD

 Main File

 Sequence of OP Codes and Data
 OpCode(2 bits, 00 = Node, 01=USE, 10 = Comment, 11 = ROUTE

 Node
   NodeNum(variable)
   Def lookup(variable)  --> Byte Alignment(OP+NodeNum+DEF divisible by 8)
   Field Name Id(variable)  --> Look for end of fields marker
   Field Method used(3 bits) --> Byte Alignment(FieldNameID+FieldMethod)
      Field Method Params  --> Byte Aligned
   Field Data --> Byte Aligned

 USE
   Def lookup(variable)  --> Byte Aligned(OP+DEF)

 Comment
    length(14) -->  Byte Aligned(OP+length)
    data

 ROUTE
    fromNode(Def Lookup, variable)
    fromField(FieldNameID,variable)
    toNode(Def Lookup, variable)
    toField(FieldNameID, variable)  --> Byte Alignment(OP+fromNode+fromField+toNode+toField)

 NodeNum 0 is reserved as end of fields marker.
 NodeNum 1 is reserved for Script nodes.  They will have their own format.
 FieldNum 0 is reserved for end of fields marker
 
Version:
$Revision: 1.18 $
Author:
Alan Hudson