Defining .red File Policy
-------------------------

The streaming policy controls various aspects of the saving (loading) of .red files.

Here is how you inform HOOPS Luminate of a custom geometry channel data binding (this is needed in order for HOOPS Luminate to use the right compression code regarding to the type of the data being processed: for example, the compressor used is not the same for indices or vertices):

.. code:: cpp 

    RED::StreamingPolicy policy;

    // Here is an example of a custom geometry channels binding:
    //
    // Vertices are stored in RED::MCL_VERTEX, normals in RED::MCL_USER0 and texture coordinates
    // in RED::MCL_COLOR and RED::MCL_USER1.
    //
    // Detailing the custom binding used lets the engine use the appropriate compressor for the
    // channel data and leads to better compression ratio.
    //
    policy.SetChannelBinding( RED::MCL_VERTEX, RED::StreamingPolicy::DAK_VERTICES );
    policy.SetChannelBinding( RED::MCL_USER0, RED::StreamingPolicy::DAK_NORMALS );
    policy.SetChannelBinding( RED::MCL_COLOR, RED::StreamingPolicy::DAK_TEXCOORD );
    policy.SetChannelBinding( RED::MCL_USER1, RED::StreamingPolicy::DAK_TEXCOORD );

The streaming policy can also be used to filter objects from saving:

.. code:: cpp

    // Here, two RED objects are added to the policy filter to be sure they are not saved to a file
    // when calling a recursive saving method like RED::IREDFile::WriteDAG.

    policy.AddToFilter( collision_mesh );
    policy.AddToFilter( hidden_camera );

Finally, the policy can define various behaviours:

Force the loaded images to stay in main memory (no transfer to the video memory)

.. code:: cpp 

    policy.SetLocalImages( true );

Force the hardware compressed images to be decompressed before saving (to allow usage of the texture on machines without graphics hardware support)

.. code:: cpp 
        
    policy.SetForceHWImageDecompression( true );

Disable the automatic saving of material controllers along with the materials

.. code:: cpp 

    policy.SetMaterialControllerAutoSaving( false );
