EffectSpecSharedPtr EffectLibraryImpl::registerSpec( const EffectSpecSharedPtr& effectSpec, EffectLoader* effectLoader )
    {
      DP_ASSERT( effectSpec );
      EffectSpecs::iterator it = m_effectSpecs.find( effectSpec->getName() );
      if ( it != m_effectSpecs.end() )
      {
        DP_ASSERT( it->second.effectLoader == effectLoader );
        DP_ASSERT( it->second.effectSpec->isEquivalent( effectSpec, false, false ) );
        DP_ASSERT( !m_currentFile.empty() && ( it->second.effectFile == m_currentFile.top() ) );
        return it->second.effectSpec;
      }
      else
      {
        m_effectSpecs[ effectSpec->getName()] = EffectSpecInfo( effectSpec, effectLoader, m_currentFile.top() );

        // create EffectData for default values of EffectSpec
        EffectDataPrivateSharedPtr effectData = EffectDataPrivate::create( effectSpec, effectSpec->getName() );
        for ( EffectSpec::iterator it = effectSpec->beginParameterGroupSpecs(); it != effectSpec->endParameterGroupSpecs(); ++it )
        {
          effectData->setParameterGroupData( it, getParameterGroupData( (*it)->getName() ) );
        }
        registerEffectData( effectData );

        return effectSpec;
      }
    }
Beispiel #2
0
 EffectData::EffectData( const EffectSpecSharedPtr& effectSpec, const std::string& name )
   : m_effectSpec( effectSpec)
   , m_name( name )
   , m_transparent( effectSpec->getTransparent() )
 {
   DP_ASSERT( m_effectSpec ); // actually should be an exception
   m_parameterGroupDatas.reset( new ParameterGroupDataSharedPtr[ effectSpec->getNumberOfParameterGroupSpecs() ] );
 }
      ParameterGroupDataSharedPtr createStandardBumpmapParameterData( const SamplerSharedPtr & sampler )
      {
        EffectSpecSharedPtr materialSpec = dp::fx::EffectLibrary::instance()->getEffectSpec("standardMaterialEffectBumped");
        EffectSpec::iterator groupSpecIt = materialSpec->findParameterGroupSpec( std::string( "standardBumpmapParameters" ) );
        DP_ASSERT( groupSpecIt != materialSpec->endParameterGroupSpecs() );

        ParameterGroupDataSharedPtr parameterData = ParameterGroupData::create( *groupSpecIt );
        DP_VERIFY( parameterData->setParameter( "bumpmapSampler", sampler ) );
        DP_VERIFY( parameterData->setParameter<bool>( "bumpmapEnable", !!sampler ) );
        return( parameterData );
      }
      ParameterGroupDataSharedPtr createStandardTextureParameterData( const SamplerSharedPtr & sampler )
      {
        EffectSpecSharedPtr materialSpec = getStandardMaterialSpec();
        EffectSpec::iterator groupSpecIt = materialSpec->findParameterGroupSpec( std::string( "standardTextureParameters" ) );
        DP_ASSERT( groupSpecIt != materialSpec->endParameterGroupSpecs() );

        ParameterGroupDataSharedPtr parameterData = ParameterGroupData::create( *groupSpecIt );
        DP_VERIFY( parameterData->setParameter( "sampler", sampler ) );
        DP_VERIFY( parameterData->setParameter<bool>( "textureEnable", !!sampler ) );
        return( parameterData );
      }
Beispiel #5
0
 void ShaderPipelineConfiguration::addEffectSpec( Domain domain, EffectSpecSharedPtr const& effectSpec, EffectSpecSharedPtr const& systemSpec )
 {
   DP_ASSERT( !effectSpec || ( effectSpec->getType() != EffectSpec::Type::PIPELINE ) );
   if ( effectSpec || systemSpec )
   {
     m_effectSpecPerDomain[domain] = SpecInfo( effectSpec, systemSpec );
   }
 }
 bool EffectLibraryImpl::effectHasTechnique( EffectSpecSharedPtr const& effectSpec, std::string const& techniqueName, bool rasterizer ) const
 {
   EffectSpecs::const_iterator it = m_effectSpecs.find( effectSpec->getName() );
   if ( it != m_effectSpecs.end() )
   {
     return( it->second.effectLoader->effectHasTechnique( effectSpec, techniqueName, rasterizer ) );
   }
   return( false );
 }
Beispiel #7
0
    bool EffectSpec::isEquivalent( const EffectSpecSharedPtr & p, bool ignoreNames, bool deepCompare ) const
    {
      if ( p.get() == this )
      {
        return( true );
      }

      bool equi =   ( ignoreNames ? true : m_name == p->m_name )
                &&  ( m_type == p->m_type )
                &&  ( m_transparent == p->m_transparent )
                &&  ( m_specs.size() == p->m_specs.size() );
      if ( equi )
      {
        for ( iterator it = m_specs.begin(), jt = p->m_specs.begin()
            ; equi && it != m_specs.end() ; ++it, ++jt )
        {
          DP_ASSERT( jt != p->m_specs.end() );
          equi = deepCompare ? (*it)->isEquivalent( *jt, ignoreNames, true ) : ( *it == *jt );
        }
      }
      return( equi );
    }