void CreateTextureFromFile( const Diligent::Char *FilePath, 
                            const TextureLoadInfo& TexLoadInfo, 
                            IRenderDevice *pDevice, 
                            ITexture **ppTexture )
{
    RefCntAutoPtr<Image> pImage;
    RefCntAutoPtr<IDataBlob> pDDSData;
    CreateImageFromFile( FilePath, &pImage, &pDDSData );

    if( pImage )
        CreateTextureFromImage( pImage, TexLoadInfo, pDevice, ppTexture );
    else if(pDDSData)
        CreateTextureFromDDS( pDDSData, TexLoadInfo, pDevice, ppTexture );
}
//--------------------------------------------------------------------------------------
HRESULT CreateDDSTextureFromFile( ID3D10Device* pDev, WCHAR* szFileName, ID3D10ShaderResourceView** ppSRV, bool bSRGB )
{
    BYTE* pHeapData = NULL;
    DDS_HEADER* pHeader = NULL;
    BYTE* pBitData = NULL;
    UINT BitSize = 0;

    HRESULT hr = LoadTextureDataFromFile( szFileName, &pHeapData, &pHeader, &pBitData, &BitSize );
    if(FAILED(hr))
    {
        SAFE_DELETE_ARRAY( pHeapData );
        return hr;
    }

    hr = CreateTextureFromDDS( pDev, pHeader, pBitData, BitSize, ppSRV, bSRGB );
    SAFE_DELETE_ARRAY( pHeapData );
    return hr;
}
//--------------------------------------------------------------------------------------
HRESULT CreateDDSTextureFromFile( LPDIRECT3DDEVICE9 pDev, WCHAR* szFileName, LPDIRECT3DTEXTURE9* ppTex )
{
    BYTE* pHeapData = NULL;
    DDS_HEADER* pHeader= NULL;
    BYTE* pBitData = NULL;
    UINT BitSize = 0;

    HRESULT hr = LoadTextureDataFromFile( szFileName, &pHeapData, &pHeader, &pBitData, &BitSize );
    if(FAILED(hr))
    {
        SAFE_DELETE_ARRAY( pHeapData );
        return hr;
    }

    hr = CreateTextureFromDDS( pDev, pHeader, pBitData, BitSize, ppTex );
    SAFE_DELETE_ARRAY( pHeapData );
    return hr;
}