Skip to content

Commit 305d59e

Browse files
committed
VTF 7.6
1 parent 777124f commit 305d59e

17 files changed

+401
-1858
lines changed

ThumbnailProvider/Common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#define GDIPVER 0x0110
4+
35
#include <windows.h>
46
#include <shlobj.h>
57
#include <shlwapi.h>

ThumbnailProvider/Main.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
#define INITGUID
22
#include "Common.h"
33

4-
static LONG g_cRef = 0;
4+
#ifdef _AMD64_
5+
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.Windows.GdiPlus' version='1.1.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
6+
#else
7+
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.Windows.GdiPlus' version='1.1.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'\"")
8+
#endif
9+
10+
static volatile LONG g_cRef = 0;
511

612
struct REGKEY_DELETEKEY
713
{
@@ -21,6 +27,7 @@ struct REGKEY_SUBKEY_AND_VALUE
2127
static HRESULT CreateRegistryKeys( REGKEY_SUBKEY_AND_VALUE* aKeys, ULONG cKeys );
2228
static HRESULT DeleteRegistryKeys( REGKEY_DELETEKEY* aKeys, ULONG cKeys );
2329

30+
_Use_decl_annotations_
2431
STDAPI DllCanUnloadNow()
2532
{
2633
return g_cRef ? S_FALSE : S_OK;

ThumbnailProvider/ThumbnailProvider.cpp

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
using namespace Gdiplus;
66
CThumbnailProvider::CThumbnailProvider()
77
{
8-
DllAddRef();
9-
m_cRef = 1;
10-
m_pSite = nullptr;
8+
DllAddRef();
9+
m_cRef = 1;
10+
m_pSite = nullptr;
1111
}
1212

1313
CThumbnailProvider::~CThumbnailProvider()
1414
{
1515
if ( m_pSite )
16-
{
17-
m_pSite->Release();
18-
m_pSite = nullptr;
19-
}
20-
DllRelease();
16+
{
17+
m_pSite->Release();
18+
m_pSite = nullptr;
19+
}
20+
DllRelease();
2121
}
2222

2323
STDMETHODIMP CThumbnailProvider::QueryInterface( REFIID riid, void** ppvObject )
@@ -28,26 +28,32 @@ STDMETHODIMP CThumbnailProvider::QueryInterface( REFIID riid, void** ppvObject )
2828
QITABENT( CThumbnailProvider, IThumbnailProvider ),
2929
QITABENT( CThumbnailProvider, IObjectWithSite ),
3030
{ nullptr, 0 }
31-
};
31+
};
3232
return QISearch( this, qit, riid, ppvObject );
3333
}
3434

3535
STDMETHODIMP_( ULONG ) CThumbnailProvider::AddRef()
3636
{
3737
const LONG cRef = InterlockedIncrement( &m_cRef );
38-
return cRef;
38+
return cRef;
3939
}
4040

4141
STDMETHODIMP_( ULONG ) CThumbnailProvider::Release()
4242
{
4343
const LONG cRef = InterlockedDecrement( &m_cRef );
4444
if ( 0 == cRef )
45-
delete this;
45+
delete this;
4646
return cRef;
4747
}
4848

4949
STDMETHODIMP CThumbnailProvider::Initialize( IStream* pstm, DWORD grfMode )
5050
{
51+
if ( m_texture.IsLoaded() )
52+
return HRESULT_FROM_WIN32( ERROR_ALREADY_INITIALIZED );
53+
54+
if ( grfMode & STGM_READWRITE )
55+
return STG_E_ACCESSDENIED;
56+
5157
STATSTG stat;
5258
if ( pstm->Stat( &stat, STATFLAG_NONAME ) != S_OK )
5359
return S_FALSE;
@@ -72,11 +78,16 @@ STDMETHODIMP CThumbnailProvider::GetThumbnail( UINT cx, HBITMAP* phbmp, WTS_ALPH
7278
*pdwAlpha = WTSAT_UNKNOWN;
7379
ULONG_PTR token;
7480
GdiplusStartupInput input;
75-
if ( Ok == GdiplusStartup( &token, &input, nullptr ) )
81+
if ( GdiplusStartup( &token, &input, nullptr ) == Ok )
7682
{
83+
vlUInt32 compressedSize = 0;
84+
if ( vlUInt size; auto res = static_cast<byte*>( m_texture.GetResourceData( VTF_RSRC_AUX_COMPRESSION_INFO, size ) ) )
85+
{
86+
compressedSize = size > sizeof( AuxCompressionInfoHeader_t ) && reinterpret_cast<AuxCompressionInfoHeader_t*>( res )->m_CompressionLevel != 0 ? reinterpret_cast<AuxCompressionInfoEntry_t*>( res + m_texture.GetAuxInfoOffset( 0, 0, 0 ) )->m_CompressedSize : 0;
87+
}
7788
const vlUInt w = m_texture.GetWidth(), h = m_texture.GetHeight();
7889
byte* pConverted = new byte[CVTFFile::ComputeImageSize( w, h, 1, IMAGE_FORMAT_BGRA8888 )];
79-
CVTFFile::Convert( m_texture.GetData(), pConverted, w, h, m_texture.GetFormat(), IMAGE_FORMAT_BGRA8888 );
90+
CVTFFile::Convert( m_texture.GetData(), pConverted, w, h, m_texture.GetFormat(), IMAGE_FORMAT_BGRA8888, compressedSize );
8091
Bitmap* pBitmap = new Bitmap( w, h, w * 4, PixelFormat32bppARGB, pConverted ); // delete?
8192
if ( pBitmap )
8293
{
@@ -85,10 +96,11 @@ STDMETHODIMP CThumbnailProvider::GetThumbnail( UINT cx, HBITMAP* phbmp, WTS_ALPH
8596
pBitmap->GetHBITMAP( color, phbmp );
8697
*pdwAlpha = WTSAT_ARGB;
8798
}
99+
delete pBitmap;
88100
delete[] pConverted;
89101
}
90-
GdiplusShutdown(token);
91-
if( *phbmp != nullptr )
102+
GdiplusShutdown( token );
103+
if ( *phbmp != nullptr )
92104
return NOERROR;
93105
return E_NOTIMPL;
94106

@@ -104,26 +116,26 @@ STDMETHODIMP CThumbnailProvider::GetSite( REFIID riid, void** ppvSite )
104116
STDMETHODIMP CThumbnailProvider::SetSite( IUnknown* pUnkSite )
105117
{
106118
if ( m_pSite )
107-
{
108-
m_pSite->Release();
109-
m_pSite = nullptr;
110-
}
119+
{
120+
m_pSite->Release();
121+
m_pSite = nullptr;
122+
}
111123

112-
m_pSite = pUnkSite;
124+
m_pSite = pUnkSite;
113125
if ( m_pSite )
114126
m_pSite->AddRef();
115127
return S_OK;
116128
}
117129

118130
STDAPI CThumbnailProvider_CreateInstance( REFIID riid, void** ppvObject )
119131
{
120-
*ppvObject = nullptr;
132+
*ppvObject = nullptr;
121133

122-
CThumbnailProvider* ptp = new CThumbnailProvider();
134+
CThumbnailProvider* ptp = new CThumbnailProvider();
123135
if ( !ptp )
124136
return E_OUTOFMEMORY;
125137

126138
const HRESULT hr = ptp->QueryInterface( riid, ppvObject );
127-
ptp->Release();
128-
return hr;
139+
ptp->Release();
140+
return hr;
129141
}

ThumbnailProvider/ThumbnailProvider.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,29 @@
44

55
class CThumbnailProvider : public IThumbnailProvider, IObjectWithSite, IInitializeWithStream
66
{
7-
private:
8-
LONG m_cRef;
9-
IUnknown* m_pSite;
10-
CVTFFile m_texture;
11-
12-
~CThumbnailProvider();
7+
~CThumbnailProvider();
138

149
public:
15-
CThumbnailProvider();
10+
CThumbnailProvider();
1611

17-
// IUnknown methods
12+
// IUnknown methods
1813
STDMETHOD( QueryInterface )( REFIID, void** ) override;
1914
STDMETHOD_( ULONG, AddRef )() override;
2015
STDMETHOD_( ULONG, Release )() override;
2116

22-
// IInitializeWithSteam methods
17+
// IInitializeWithSteam methods
2318
STDMETHOD( Initialize )( IStream*, DWORD ) override;
2419

25-
// IThumbnailProvider methods
20+
// IThumbnailProvider methods
2621
STDMETHOD( GetThumbnail )( UINT, HBITMAP*, WTS_ALPHATYPE* ) override;
2722

28-
// IObjectWithSite methods
23+
// IObjectWithSite methods
2924
STDMETHOD( GetSite )( REFIID, void** ) override;
3025
STDMETHOD( SetSite )( IUnknown* ) override;
26+
27+
private:
28+
volatile LONG m_cRef;
29+
30+
IUnknown* m_pSite;
31+
CVTFFile m_texture;
3132
};

ThumbnailProvider/ThumbnailProvider.vcxproj

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,24 @@
2727
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
2828
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
2929
<ConfigurationType>DynamicLibrary</ConfigurationType>
30-
<PlatformToolset>v142</PlatformToolset>
30+
<PlatformToolset>v143</PlatformToolset>
3131
<CharacterSet>Unicode</CharacterSet>
3232
<WholeProgramOptimization>true</WholeProgramOptimization>
3333
</PropertyGroup>
3434
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
3535
<ConfigurationType>DynamicLibrary</ConfigurationType>
36-
<PlatformToolset>v142</PlatformToolset>
36+
<PlatformToolset>v143</PlatformToolset>
3737
<CharacterSet>Unicode</CharacterSet>
3838
</PropertyGroup>
3939
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
4040
<ConfigurationType>DynamicLibrary</ConfigurationType>
41-
<PlatformToolset>v142</PlatformToolset>
41+
<PlatformToolset>v143</PlatformToolset>
4242
<CharacterSet>Unicode</CharacterSet>
4343
<WholeProgramOptimization>true</WholeProgramOptimization>
4444
</PropertyGroup>
4545
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
4646
<ConfigurationType>DynamicLibrary</ConfigurationType>
47-
<PlatformToolset>v142</PlatformToolset>
47+
<PlatformToolset>v143</PlatformToolset>
4848
<CharacterSet>Unicode</CharacterSet>
4949
</PropertyGroup>
5050
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -90,6 +90,18 @@
9090
<LinkIncremental>false</LinkIncremental>
9191
<TargetName>VTFThumbnailProvider64</TargetName>
9292
</PropertyGroup>
93+
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
94+
<VcpkgUseStatic>true</VcpkgUseStatic>
95+
</PropertyGroup>
96+
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
97+
<VcpkgUseStatic>true</VcpkgUseStatic>
98+
</PropertyGroup>
99+
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
100+
<VcpkgUseStatic>true</VcpkgUseStatic>
101+
</PropertyGroup>
102+
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
103+
<VcpkgUseStatic>true</VcpkgUseStatic>
104+
</PropertyGroup>
93105
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
94106
<ClCompile>
95107
<Optimization>Disabled</Optimization>
@@ -142,7 +154,7 @@
142154
<Optimization>Full</Optimization>
143155
<IntrinsicFunctions>true</IntrinsicFunctions>
144156
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;THUMBNAILPROVIDER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
145-
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
157+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
146158
<FunctionLevelLinking>true</FunctionLevelLinking>
147159
<PrecompiledHeader />
148160
<WarningLevel>Level3</WarningLevel>
@@ -169,7 +181,7 @@
169181
<Optimization>Full</Optimization>
170182
<IntrinsicFunctions>true</IntrinsicFunctions>
171183
<PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;THUMBNAILPROVIDER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
172-
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
184+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
173185
<FunctionLevelLinking>true</FunctionLevelLinking>
174186
<PrecompiledHeader />
175187
<WarningLevel>Level3</WarningLevel>

0 commit comments

Comments
 (0)