Checking the Availability of Needed Input Geometry Channels
A material method allows to query about the mesh channels it uses: RED::IMaterial::GetUsedChannels
.
This function returns a list of RED::MESH_CHANNEL
needed by the material shaders. The list data are grouped by RED::LayerSet
.
typedef RED::Vector< RED::MESH_CHANNEL > ChannelVector;
RED::Map< RED::LayerSet, ChannelVector > channels;
// Retrieve the mesh channel list from the material:
RC_TEST( imat->GetUsedChannels( channels ) );
// Get the channels for the 'all layer' layerset:
ChannelVector* chan = channels.find( RED::LayerSet::ALL_LAYERS );
bool usetex0 = false;
if( chan != NULL )
{
// Loop through the needed mesh channels and search for the RED::MCL_TEX0 channel:
for( int i = 0; i < chan->size(); ++i )
{
usetex0 = usetex0 || ( (*chan)[i] == RED::MCL_TEX0 );
}
}
if( usetex0 )
{
// Be sure this channel is filled in your geometry...
}
In this sample, the channel list was retrieved from the material. Then we looped through it to find if the material needs the RED::MCL_TEX0
channel.