Ejemplo n.º 1
0
void RenderingQueue::build_output_list( std::vector<RenderingNode*>& p_input_list )
{
    Renderer* renderer = SingletonPlugin<Renderer>::GetInstance()->m_interface;

    void* fx_data;
    void* tx_data;
    void* meshe_data;

    m_tx_datas.clear();
    m_fx_datas.clear();
    m_meshe_datas.clear();

    for( size_t i = 0; i < p_input_list.size(); i++ )
    {
        RenderingNode* node = p_input_list[i];

        Fx* current_fx = node->GetFx();

        if( false == renderer->CreateFx( current_fx, &fx_data ) )
        {
            _DSEXCEPTION( "Cannot create FX" )
        }
        m_fx_datas[node] = fx_data;

        for( long j = 0; j < node->GetTextureListSize(); j++ )
        {
            Texture* current_tx = node->GetTexture( j );

            if( NULL != current_tx )
            {
                if( false == renderer->CreateTexture( current_tx, &tx_data ) )
                {
                    dsstring path;
                    current_tx->GetPath( path );

                    dsstring excp_msg = "Cannot create Texture ";
                    excp_msg += path;
                    _DSEXCEPTION( excp_msg  )
                }
                m_tx_datas[node].push_back( tx_data );
            }
        }

        Meshe* current_meshe = node->GetMeshe();

        if( NULL != current_meshe )
        {
            if( false == renderer->CreateMeshe( current_meshe, &meshe_data ) )
            {
                _DSEXCEPTION( "Cannot create Meshe" )
            }
            m_meshe_datas[node] = meshe_data;
        }
    }