1
0
mirror of https://github.com/microsoft/DirectXTex synced 2024-11-21 12:00:06 +00:00

Added WIC_USE_FACTORY_PROXY build option to use entry-point in WindowsCodecs.dll rather than CoCreateInstance for the WIC factory

This commit is contained in:
walbourn_cp 2013-02-03 16:06:01 -08:00
parent 891bcda9a7
commit 2bdd90ddfc
3 changed files with 120 additions and 0 deletions

View File

@ -144,7 +144,47 @@ IWICImagingFactory* _GetWIC()
if ( s_Factory )
return s_Factory;
#ifdef WIC_USE_FACTORY_PROXY
HINSTANCE hInst = LoadLibraryEx( TEXT("WindowsCodecs.dll"), nullptr, 0 );
if ( !hInst )
return nullptr;
typedef HRESULT (WINAPI *WICCREATEFACTORY)(UINT, IWICImagingFactory**);
WICCREATEFACTORY pFactory = (WICCREATEFACTORY) GetProcAddress(hInst, "WICCreateImagingFactory_Proxy");
if ( !pFactory )
{
FreeLibrary( hInst );
return nullptr;
}
#if(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = pFactory( WINCODEC_SDK_VERSION2, &s_Factory );
if ( SUCCEEDED(hr) )
{
// WIC2 is available on Windows 8 and Windows 7 SP1 with KB 2670838 installed
g_WIC2 = true;
}
else
{
hr = pFactory( WINCODEC_SDK_VERSION1, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
}
#else
HRESULT hr = pFactory( WINCODEC_SDK_VERSION, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
#endif
#elif(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory2,
nullptr,

View File

@ -633,7 +633,47 @@ static IWICImagingFactory* _GetWIC()
if ( s_Factory )
return s_Factory;
#ifdef WIC_USE_FACTORY_PROXY
HINSTANCE hInst = LoadLibraryEx( TEXT("WindowsCodecs.dll"), nullptr, 0 );
if ( !hInst )
return nullptr;
typedef HRESULT (WINAPI *WICCREATEFACTORY)(UINT, IWICImagingFactory**);
WICCREATEFACTORY pFactory = (WICCREATEFACTORY) GetProcAddress(hInst, "WICCreateImagingFactory_Proxy");
if ( !pFactory )
{
FreeLibrary( hInst );
return nullptr;
}
#if(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = pFactory( WINCODEC_SDK_VERSION2, &s_Factory );
if ( SUCCEEDED(hr) )
{
// WIC2 is available on Windows 8 and Windows 7 SP1 with KB 2670838 installed
g_WIC2 = true;
}
else
{
hr = pFactory( WINCODEC_SDK_VERSION1, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
}
#else
HRESULT hr = pFactory( WINCODEC_SDK_VERSION, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
#endif
#elif(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory2,
nullptr,

View File

@ -217,7 +217,47 @@ static IWICImagingFactory* _GetWIC()
if ( s_Factory )
return s_Factory;
#ifdef WIC_USE_FACTORY_PROXY
HINSTANCE hInst = LoadLibraryEx( TEXT("WindowsCodecs.dll"), nullptr, 0 );
if ( !hInst )
return nullptr;
typedef HRESULT (WINAPI *WICCREATEFACTORY)(UINT, IWICImagingFactory**);
WICCREATEFACTORY pFactory = (WICCREATEFACTORY) GetProcAddress(hInst, "WICCreateImagingFactory_Proxy");
if ( !pFactory )
{
FreeLibrary( hInst );
return nullptr;
}
#if(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = pFactory( WINCODEC_SDK_VERSION2, &s_Factory );
if ( SUCCEEDED(hr) )
{
// WIC2 is available on Windows 8 and Windows 7 SP1 with KB 2670838 installed
g_WIC2 = true;
}
else
{
hr = pFactory( WINCODEC_SDK_VERSION1, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
}
#else
HRESULT hr = pFactory( WINCODEC_SDK_VERSION, &s_Factory );
if ( FAILED(hr) )
{
FreeLibrary( hInst );
s_Factory = nullptr;
return nullptr;
}
#endif
#elif(_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory2,
nullptr,