void Constant::_validate(bool)
{
  // Set the user-selected channels, see if any are non-zero:
  bool non_zero = false;
  info_.channels(Mask_None);
  for (int z = 0; z < 4; z++) {
    info_.turn_on(channel[z]);
    if (color[z])
      non_zero = true;
  }
  // When used internally by other plugins they don't set formats,
  // they just put the format into the info_. Detect this and don't
  // write over the format they chose:
  if (formats.format()) {
    info_.format(*formats.format());
    info_.full_size_format(*formats.fullSizeFormat());
  }
  info_.black_outside(!non_zero);
#if 1
  // Use a bounding box the size of the image. This is what most file
  // readers would do if they read an image that was a solid color:
  info_.set(format());
#else
  // Use a 1x1 bounding box. This should be correct as the color is
  // replicated from the one pixel everywhere. However plenty of
  // operators have dependencies on the bounding box.  Some pre-4.8
  // versions of Nuke did this if and only if the constant was black,
  // but even that caused problems.
  info_.set(format().x(), format().y(), format().x() + 1, format().y() + 1);
#endif
  info_.first_frame(first_frame);
  info_.last_frame(last_frame);
}
        void _validate(bool for_real)
        {
            // TODO: create a new format from our m_buffer->width & m_buffer->height
            // and return that

            info_.full_size_format(*m_formats.fullSizeFormat());
            info_.format(*m_formats.format());
            info_.channels(Mask_RGBA);
            info_.set(format());
        }
Exemple #3
0
        void _validate(bool for_real)
        {
            // do we need to open a port?
            if ( m_server.isConnected()==false && !m_inError && m_legit )
                changePort(m_port);
            
            if (m_stat.progress > 0)
                status(m_stat.progress,
                       m_stat.ram,
                       m_stat.p_ram,
                       m_stat.time);
            
            // handle any connection error
            if ( m_inError )
                error(m_connectionError.c_str());

            // setup format etc
            info_.format(*m_fmtp.fullSizeFormat());
            info_.full_size_format(*m_fmtp.format());
            
            // add aovs as nuke channels
            std::string rgba = "RGBA";
            std::string z = "Z";
            std::string n = "N";
            std::string p = "P";
            
            for(std::vector<std::string>::iterator it = m_aovs.begin(); it != m_aovs.end(); ++it)
            {
                if (it->compare(rgba)==0)
                {
                    if (!m_channels.contains(Chan_Red))
                    {
                        m_channels.insert(Chan_Red);
                        m_channels.insert(Chan_Green);
                        m_channels.insert(Chan_Blue);
                        m_channels.insert(Chan_Alpha);
                    }
                }
                else if (it->compare(z)==0)
                {
                    if (!m_channels.contains(Chan_Z))
                        m_channels.insert( Chan_Z );
                }
                else if (it->compare(n)==0 || it->compare(p)==0)
                {
                    if (!m_channels.contains(channel((boost::format("%s.X")%it->c_str()).str().c_str())))
                    {
                        m_channels.insert( channel((boost::format("%s.X")%it->c_str()).str().c_str()) );
                        m_channels.insert( channel((boost::format("%s.Y")%it->c_str()).str().c_str()) );
                        m_channels.insert( channel((boost::format("%s.Z")%it->c_str()).str().c_str()) );
                    }
                }
                else
                {
                    if (!m_channels.contains( channel((boost::format("%s.red")%it->c_str()).str().c_str())))
                    {
                        m_channels.insert( channel((boost::format("%s.red")%it->c_str()).str().c_str()) );
                        m_channels.insert( channel((boost::format("%s.blue")%it->c_str()).str().c_str()) );
                        m_channels.insert( channel((boost::format("%s.green")%it->c_str()).str().c_str()) );
                    }
                }
            }
            
            info_.channels( m_channels );
            info_.set(info().format());
        }