Author: Carsten Rohn
State: Implemented in svn
Overview
This feature allows Equalizer to disable rendering resources automatically when they don't support given and dynamically changing requirements.
Requirements
- The application can define supported capabilities of each channel at the start of the client
- The application can define required capabilities for a view at runtime
- Equalizer has to handle sufficient or insufficient capabilities automatically
- Equalizer has to disable or freeze channels which do not support the required capabilities
- Equalizer has to enable or unfreeze clients when required capabilities change and client supports them
Design
The application can define a set of supported capabilities for each
channel by using the new Channel::setCapabilities( const uint64_t
bitmask )
. The given bitmask defines the capabilities of this
channel. If the application sets the supported capabilities on a client
channel, Equalizer has to use the (de)serialization mechanisms to
propagate the change to the appropriate server channel.
Additionally, the application can set minimum and maximum capabilities
in a view, using the new View::setMinimumCapabilites( const uint64_t
bitmask )
and setMaximumCapabilities
anytime at runtime. The
given bitmask defines the required and desired capabilities of the view.
When the application changes the required capabilities of the view, the
number of channels rendering is likely to have changed, so the load and view
equalizers have to consider this when balancing the new frame. The load
equalizer and view equalizer will exclude non-capable channels when
balancing resources by asking the Compound::isRunning()
function,
which now compares the channels capability with those of its view and
considers this when returning the compounds running state. Furthermore,
in Compound::_updateInheritData
, the draw tasks of those channels
which do not fulfill the View's requirement are set to none.
In addition to the required capabilities the application can define a
set of desired capabilities in the view. Equalizer computes the union of
desired capabilities of all channels for this view supporting the
minimum capabilities. This can be used to unify the rendering output of all
channels of a view with different capabilities. The capability consensus
can be retrieved by the new View::getCapabilities()
function.
API
New functions:
void eq::Channel::setCapabilities( const uin64t_t bitmask )
uint64_t eq::Channel::getCapabilities() const
void eq::View::setMinimumCapabilites( const uint64_t bitmask )
uint64_t eq::View::getMinimumCapabilities() const
void eq::View::setMaximumCapabilities( const uint64_t bitmask )
uint64_t eq::View::getMaximumCapabilities() const
uint64_t eq::View::getCapabilities() const
File Format
No changes.
Restrictions
If no channel is capable of fulfilling the required capabilities of the view, the view will not be updates. It is in the responsibility of the application to avoid this state. If a static decomposition is used, the regions updated by disabled channels will not be updated.