ResourceWeakPtr IResourceManager::CloneResource(const Resources::IResource* pSrcRes, xst_castring& strNewName, bool bFullClone)
    {
        m_ssTmpName.str( "" );
        if( strNewName.empty() )
            m_ssTmpName << XST::CTime::GetQPerfTickCount() << "_cloned";
        else
            m_ssTmpName << strNewName;

        GroupWeakPtr pGroup = this->GetGroup( pSrcRes->GetResourceGroupHandle() );
        xst_assert( pGroup != xst_null, "(IResourceManager::CloneResource)" );
        ResourcePtr pNewRes = CreateResource( m_ssTmpName.str(), pGroup );
        if( pNewRes == xst_null )
        {
            return pNewRes; 
        }

        /*if( XST_FAILED( PrepareResource( pNewRes ) ) )
        {
            this->DestroyResource( pNewRes->GetResourceGroupHandle() );
            return ResourcePtr();
        }*/

        Resources::IResource* pTmp = pNewRes.GetPtr();
        if( XST_FAILED( _CloneResource( &pTmp, pSrcRes, bFullClone ) ) )
        {
            this->DestroyResource( pNewRes->GetResourceGroupHandle() );
            return ResourceWeakPtr();
        }

        return pNewRes;
    }