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 );
      }
 ParameterGroupDataSharedPtr EffectLibraryImpl::registerParameterGroupData( const ParameterGroupDataSharedPtr& parameterGroupData )
 {
   DP_ASSERT( parameterGroupData );
   ParameterGroupDatas::const_iterator it = m_parameterGroupDatas.find( parameterGroupData->getName() );
   if ( it != m_parameterGroupDatas.end() )
   {
     DP_ASSERT( *(it->second) == *parameterGroupData );
     return it->second;
   }
   else
   {
     m_parameterGroupDatas[ parameterGroupData->getName() ] = parameterGroupData;
     return parameterGroupData;
   }
 }
Exemple #4
0
ExtractGeometryTraverser::ExtractGeometryTraverser()
{
    m_transformStack.setWorldToView( cIdentity44f, cIdentity44f );

    // construct a material to extract defaults
    const dp::fx::EffectSpecSharedPtr & standardSpec = getStandardMaterialSpec();
    dp::fx:: EffectSpec::iterator groupSpecIt = standardSpec->findParameterGroupSpec( string( "standardMaterialParameters" ) );
    DP_ASSERT( groupSpecIt != standardSpec->endParameterGroupSpecs() );
    ParameterGroupDataSharedPtr material = ParameterGroupData::create( *groupSpecIt );
    dp::fx::ParameterGroupSpecSharedPtr pgs = material->getParameterGroupSpec();

    m_material.isTexture = false;
    m_material.isMaterial = false;
    m_material.ambient  = material->getParameter<Vec3f>( pgs->findParameterSpec( "frontAmbientColor" ) );
    m_material.diffuse  = material->getParameter<Vec3f>( pgs->findParameterSpec( "frontDiffuseColor" ) );
    m_material.specular = material->getParameter<Vec3f>( pgs->findParameterSpec( "frontSpecularColor" ) );
    m_material.exponent = material->getParameter<float>( pgs->findParameterSpec( "frontSpecularExponent" ) );
    m_material.opacity  = material->getParameter<float>( pgs->findParameterSpec( "frontOpacity" ) );
}
bool CommandReplaceItem::doReplace( SceneTreeItem * oldChild, SceneTreeItem * newChild )
{
  switch( m_parent->getObject()->getObjectCode() )
  {
    case ObjectCode::GEO_NODE :
      DP_ASSERT(std::static_pointer_cast<GeoNode>(m_parent->getObject())->getMaterialPipeline() == std::static_pointer_cast<dp::sg::core::PipelineData>(oldChild->getObject()));
      if ( std::dynamic_pointer_cast<dp::sg::core::PipelineData>(newChild->getObject()) )
      {
        std::static_pointer_cast<GeoNode>(m_parent->getObject())->setMaterialPipeline(std::static_pointer_cast<dp::sg::core::PipelineData>(newChild->getObject()));
      }
      else
      {
        DP_ASSERT( std::dynamic_pointer_cast<Primitive>(m_newChild->getObject()) );
        std::static_pointer_cast<GeoNode>(m_parent->getObject())->setPrimitive(std::static_pointer_cast<Primitive>(newChild->getObject()));
      }
      break;
    case ObjectCode::GROUP :
    case ObjectCode::LOD :
    case ObjectCode::SWITCH :
    case ObjectCode::TRANSFORM :
    case ObjectCode::BILLBOARD :
      {
        GroupSharedPtr g = std::static_pointer_cast<Group>(m_parent->getObject());
        if ( std::dynamic_pointer_cast<Node>(newChild->getObject()) )
        {
          DP_ASSERT(g->findChild(g->beginChildren(), std::static_pointer_cast<Node>(oldChild->getObject())) != g->endChildren());
          g->replaceChild(std::static_pointer_cast<Node>(newChild->getObject()), std::static_pointer_cast<Node>(oldChild->getObject()));
        }
        else
        {
          DP_ASSERT( std::dynamic_pointer_cast<ClipPlane>(newChild->getObject()) );
          DP_ASSERT( g->findClipPlane( std::static_pointer_cast<ClipPlane>(oldChild->getObject()) ) != g->endClipPlanes() );
          g->removeClipPlane(std::static_pointer_cast<ClipPlane>(oldChild->getObject()));
          g->addClipPlane(std::static_pointer_cast<ClipPlane>(newChild->getObject()));
        }
      }
      break;
    case ObjectCode::PRIMITIVE :
      if ( std::dynamic_pointer_cast<IndexSet>(newChild->getObject()) )
      {
        std::static_pointer_cast<Primitive>(m_parent->getObject())->setIndexSet(std::static_pointer_cast<IndexSet>(newChild->getObject()));
      }
      else
      {
        DP_ASSERT( std::dynamic_pointer_cast<VertexAttributeSet>(newChild->getObject()) );
        std::static_pointer_cast<Primitive>(m_parent->getObject())->setVertexAttributeSet(std::static_pointer_cast<VertexAttributeSet>(newChild->getObject()));
      }
      break;
    case ObjectCode::PARAMETER_GROUP_DATA :
      DP_ASSERT( newChild->getObject()->getObjectCode() == ObjectCode::SAMPLER );
      {
        ParameterGroupDataSharedPtr pgd = std::static_pointer_cast<ParameterGroupData>(m_parent->getObject());
        const dp::fx::ParameterGroupSpecSharedPtr & pgs = pgd->getParameterGroupSpec();
        dp::fx::ParameterGroupSpec::iterator it = pgs->findParameterSpec(std::static_pointer_cast<Sampler>(newChild->getObject())->getName());
        DP_ASSERT( it != pgs->endParameterSpecs() );
        DP_ASSERT(pgs->findParameterSpec(std::static_pointer_cast<Sampler>(oldChild->getObject())->getName()) == it);
        pgd->setParameter(it, std::static_pointer_cast<Sampler>(newChild->getObject()));
      }
      break;
    case ObjectCode::PARALLEL_CAMERA :
    case ObjectCode::PERSPECTIVE_CAMERA :
    case ObjectCode::MATRIX_CAMERA :
      DP_ASSERT( m_newChild->getObject()->getObjectCode() == ObjectCode::LIGHT_SOURCE );
      std::static_pointer_cast<Camera>(m_parent->getObject())->replaceHeadLight(std::static_pointer_cast<LightSource>(newChild->getObject()), std::static_pointer_cast<LightSource>(oldChild->getObject()));
      break;
    case ObjectCode::PIPELINE_DATA :
      DP_ASSERT( std::dynamic_pointer_cast<ParameterGroupData>(newChild->getObject()) );
      DP_ASSERT(std::static_pointer_cast<ParameterGroupData>(newChild->getObject())->getParameterGroupSpec() == std::static_pointer_cast<ParameterGroupData>(oldChild->getObject())->getParameterGroupSpec());
      std::static_pointer_cast<dp::sg::core::PipelineData>(m_parent->getObject())->setParameterGroupData(std::static_pointer_cast<ParameterGroupData>(newChild->getObject()));
      break;
    case ObjectCode::SCENE :
      if ( std::dynamic_pointer_cast<Camera>(m_newChild->getObject()) )
      {
        SceneSharedPtr s = std::static_pointer_cast<Scene>(m_parent->getObject());
        s->removeCamera(std::static_pointer_cast<Camera>(oldChild->getObject()));
        s->addCamera(std::static_pointer_cast<Camera>(newChild->getObject()));
      }
      else
      {
        DP_ASSERT( std::dynamic_pointer_cast<Node>(newChild->getObject()) );
        std::static_pointer_cast<Scene>(m_parent->getObject())->setRootNode(std::static_pointer_cast<Node>(newChild->getObject()));
      }
      break;
    default :
      DP_ASSERT( false );
      break;
  }

  if ( m_parent->isExpanded() )
  {
    int index = m_parent->indexOfChild( oldChild );
    DP_ASSERT( 0 <= index );
    m_parent->takeChild( index );
    m_parent->insertChild( index, newChild );
    m_holdsOldChild = !m_holdsOldChild;
  }
  m_parent->setChildIndicatorPolicy();
  GetApp()->outputStatistics();

  ObjectSharedPtr s = std::static_pointer_cast<Object>(oldChild->getObject());
  if ( s->isAttached( m_observer ) )
  {
    s->detach( m_observer );
    std::static_pointer_cast<Object>(newChild->getObject())->attach(m_observer);
  }

  return true;
}