Skip to content

Commit edbcd45

Browse files
committed
August 2016
1 parent 550385d commit edbcd45

File tree

462 files changed

+50056
-24434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

462 files changed

+50056
-24434
lines changed

Kits/ATGTK/ControllerHelp.cpp

Lines changed: 130 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ using namespace SimpleMath;
2525

2626
namespace
2727
{
28+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
29+
enum Descriptors
30+
{
31+
Segoe18 = 0,
32+
Segoe22,
33+
Segoe36,
34+
CircleTex,
35+
GamepadTex,
36+
BackgroundTex,
37+
Count,
38+
};
39+
#endif
40+
2841
enum HelpFonts
2942
{
3043
SEGOE_UI_18PT = 0,
@@ -172,7 +185,12 @@ struct ATG::Help::CalloutBox
172185
if (type == CalloutType::LINE_TO_ANCHOR)
173186
{
174187
// callout circle is 12x12 so -6 from x and y to get top left coordinates
188+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
189+
batch->Draw(help.m_descriptorHeap->GetGpuHandle(Descriptors::CircleTex), help.m_circleTexSize,
190+
Vector2(calloutLine.x - 6, calloutLine.y - 6));
191+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
175192
batch->Draw(help.m_circleTex.Get(), Vector2(calloutLine.x - 6, calloutLine.y - 6));
193+
#endif
176194
}
177195

178196
SpriteFont* spriteFont = help.m_spriteFonts[font].get();
@@ -724,6 +742,57 @@ ATG::Help::~Help()
724742
}
725743
}
726744

745+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
746+
void ATG::Help::Render(ID3D12GraphicsCommandList* commandList)
747+
{
748+
// Set the descriptor heaps
749+
ID3D12DescriptorHeap* descriptorHeaps[] =
750+
{
751+
m_descriptorHeap->Heap()
752+
};
753+
commandList->SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
754+
755+
D3D12_VIEWPORT vp1{ 0.0f, 0.0f, static_cast<float>(m_screenSize.right), static_cast<float>(m_screenSize.bottom),
756+
D3D12_MIN_DEPTH, D3D12_MAX_DEPTH };
757+
758+
m_spriteBatch->SetViewport(vp1);
759+
m_spriteBatch->Begin(commandList, SpriteSortMode_Immediate);
760+
761+
// Draw background image
762+
m_spriteBatch->Draw(m_descriptorHeap->GetGpuHandle(Descriptors::BackgroundTex), m_backgroundTexSize, m_screenSize);
763+
764+
// Draw gamepad controller
765+
m_spriteBatch->Draw(m_descriptorHeap->GetGpuHandle(Descriptors::GamepadTex), m_gamepadTexSize, m_screenSize);
766+
767+
m_spriteBatch->End();
768+
769+
D3D12_VIEWPORT vp2{ 0.0f, 0.f, 1920.f, 1080.f, D3D12_MIN_DEPTH, D3D12_MAX_DEPTH };
770+
m_spriteBatch->SetViewport(vp2);
771+
m_spriteBatch->Begin(commandList, SpriteSortMode_Deferred);
772+
773+
// Process sprites
774+
for (size_t j = 0; j < m_calloutCount; ++j)
775+
{
776+
m_callouts[j].Render(*this, m_spriteBatch.get());
777+
}
778+
779+
m_spriteBatch->End();
780+
781+
XMMATRIX proj = XMMatrixOrthographicOffCenterRH(0.f, 1920.f, 1080.f, 0.f, 0.f, 1.f);
782+
m_lineEffect->SetProjection(proj);
783+
784+
m_lineEffect->Apply(commandList);
785+
786+
m_primBatch->Begin(commandList);
787+
788+
for (size_t j = 0; j < m_calloutCount; ++j)
789+
{
790+
m_callouts[j].Render(m_primBatch.get());
791+
}
792+
793+
m_primBatch->End();
794+
}
795+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
727796
void ATG::Help::Render()
728797
{
729798
CD3D11_VIEWPORT vp1(0.0f, 0.0f, static_cast<float>(m_screenSize.right), static_cast<float>(m_screenSize.bottom));
@@ -769,11 +838,11 @@ void ATG::Help::Render()
769838

770839
m_primBatch->End();
771840
}
841+
#endif
772842

773843
void ATG::Help::ReleaseDevice()
774844
{
775845
m_spriteBatch.reset();
776-
m_states.reset();
777846
m_primBatch.reset();
778847
m_lineEffect.reset();
779848

@@ -782,13 +851,71 @@ void ATG::Help::ReleaseDevice()
782851
m_spriteFonts[i].reset();
783852
}
784853

785-
m_lineLayout.Reset();
786854
m_circleTex.Reset();
787855
m_gamepadTex.Reset();
788856
m_backgroundTex.Reset();
857+
858+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
859+
m_descriptorHeap.reset();
860+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
861+
m_states.reset();
862+
m_lineLayout.Reset();
789863
m_context.Reset();
864+
#endif
790865
}
791866

867+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
868+
void ATG::Help::RestoreDevice(ID3D12Device* device, ResourceUploadBatch& uploadBatch, const RenderTargetState& rtState)
869+
{
870+
m_descriptorHeap = std::make_unique<DescriptorHeap>(device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE, Descriptors::Count);
871+
872+
SpriteBatchPipelineStateDescription sbPsoDesc(rtState, &CommonStates::AlphaBlend);
873+
m_spriteBatch = std::make_unique<SpriteBatch>(device, uploadBatch, sbPsoDesc);
874+
875+
m_primBatch = std::make_unique<PrimitiveBatch<VertexPositionColor>>(device);
876+
877+
EffectPipelineStateDescription fxPsoDesc(&VertexPositionColor::InputLayout, CommonStates::Opaque,
878+
CommonStates::DepthNone, CommonStates::CullNone, rtState, D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE);
879+
m_lineEffect = std::make_unique<BasicEffect>(device, EffectFlags::VertexColor, fxPsoDesc);
880+
881+
#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
882+
wchar_t buff[MAX_PATH];
883+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Fonts//SegoeUI_18.spritefont");
884+
m_spriteFonts[SEGOE_UI_18PT] = std::make_unique<SpriteFont>(device, uploadBatch, buff, m_descriptorHeap->GetCpuHandle(Descriptors::Segoe18), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe18));
885+
886+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Fonts//SegoeUI_22.spritefont");
887+
m_spriteFonts[SEGOE_UI_22PT] = std::make_unique<SpriteFont>(device, uploadBatch, buff, m_descriptorHeap->GetCpuHandle(Descriptors::Segoe22), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe22));
888+
889+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Fonts//SegoeUI_36.spritefont");
890+
m_spriteFonts[SEGOE_UI_36PT] = std::make_unique<SpriteFont>(device, uploadBatch, buff, m_descriptorHeap->GetCpuHandle(Descriptors::Segoe36), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe36));
891+
892+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Textures//callout_circle.dds");
893+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, buff, 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_circleTex.ReleaseAndGetAddressOf()));
894+
895+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Textures//gamepad.dds");
896+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, buff, 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_gamepadTex.ReleaseAndGetAddressOf()));
897+
898+
DX::FindMediaFile(buff, MAX_PATH, L"Media//Textures//ATGSampleBackground.DDS");
899+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, buff, 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_backgroundTex.ReleaseAndGetAddressOf()));
900+
#else
901+
m_spriteFonts[SEGOE_UI_18PT] = std::make_unique<SpriteFont>(device, uploadBatch, L"SegoeUI_18.spritefont", m_descriptorHeap->GetCpuHandle(Descriptors::Segoe18), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe18));
902+
m_spriteFonts[SEGOE_UI_22PT] = std::make_unique<SpriteFont>(device, uploadBatch, L"SegoeUI_22.spritefont", m_descriptorHeap->GetCpuHandle(Descriptors::Segoe22), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe22));
903+
m_spriteFonts[SEGOE_UI_36PT] = std::make_unique<SpriteFont>(device, uploadBatch, L"SegoeUI_36.spritefont", m_descriptorHeap->GetCpuHandle(Descriptors::Segoe36), m_descriptorHeap->GetGpuHandle(Descriptors::Segoe36));
904+
905+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, L"callout_circle.dds", 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_circleTex.ReleaseAndGetAddressOf()));
906+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, L"gamepad.dds", 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_gamepadTex.ReleaseAndGetAddressOf()));
907+
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device, uploadBatch, L"ATGSampleBackground.DDS", 0, D3D12_RESOURCE_FLAG_NONE, m_linearColors, false, m_backgroundTex.ReleaseAndGetAddressOf()));
908+
#endif
909+
910+
DirectX::CreateShaderResourceView(device, m_circleTex.Get(), m_descriptorHeap->GetCpuHandle(Descriptors::CircleTex), false);
911+
DirectX::CreateShaderResourceView(device, m_gamepadTex.Get(), m_descriptorHeap->GetCpuHandle(Descriptors::GamepadTex), false);
912+
DirectX::CreateShaderResourceView(device, m_backgroundTex.Get(), m_descriptorHeap->GetCpuHandle(Descriptors::BackgroundTex), false);
913+
914+
m_circleTexSize = XMUINT2(uint32_t(m_circleTex->GetDesc().Width), uint32_t(m_circleTex->GetDesc().Height));
915+
m_gamepadTexSize = XMUINT2(uint32_t(m_gamepadTex->GetDesc().Width), uint32_t(m_gamepadTex->GetDesc().Height));
916+
m_backgroundTexSize = XMUINT2(uint32_t(m_backgroundTex->GetDesc().Width), uint32_t(m_backgroundTex->GetDesc().Height));
917+
}
918+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
792919
void ATG::Help::RestoreDevice(ID3D11DeviceContext* context)
793920
{
794921
m_context = context;
@@ -847,6 +974,7 @@ void ATG::Help::RestoreDevice(ID3D11DeviceContext* context)
847974
DX::ThrowIfFailed(CreateDDSTextureFromFileEx(device.Get(), L"ATGSampleBackground.DDS", 0, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, m_linearColors, nullptr, m_backgroundTex.ReleaseAndGetAddressOf()));
848975
#endif
849976
}
977+
#endif
850978

851979
void ATG::Help::SetWindow(const RECT& output)
852980
{

Kits/ATGTK/ControllerHelp.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
#include "PrimitiveBatch.h"
2121
#include "VertexTypes.h"
2222

23+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
24+
#include "DescriptorHeap.h"
25+
#include "ResourceUploadBatch.h"
26+
#elif !defined(__d3d11_h__) && !defined(__d3d11_x_h__)
27+
# error Please #include <d3d11.h> or <d3d12.h>
28+
#endif
29+
2330

2431
namespace ATG
2532
{
@@ -62,26 +69,47 @@ namespace ATG
6269
_In_count_(buttonCount) const HelpButtonAssignment* buttons, size_t buttonCount, bool linearColors = false);
6370
~Help();
6471

72+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
73+
void Render(ID3D12GraphicsCommandList* commandList);
74+
75+
void RestoreDevice(ID3D12Device* device, DirectX::ResourceUploadBatch& uploadBatch, const DirectX::RenderTargetState& rtState);
76+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
6577
void Render();
6678

67-
void ReleaseDevice();
6879
void RestoreDevice(ID3D11DeviceContext* context);
80+
#endif
81+
82+
void ReleaseDevice();
6983

7084
void SetWindow(const RECT& output);
7185

7286
struct CalloutBox;
7387

7488
private:
7589
std::unique_ptr<DirectX::SpriteBatch> m_spriteBatch;
76-
std::unique_ptr<DirectX::CommonStates> m_states;
7790
std::unique_ptr<DirectX::PrimitiveBatch<DirectX::VertexPositionColor>> m_primBatch;
7891
std::unique_ptr<DirectX::BasicEffect> m_lineEffect;
7992
std::unique_ptr<DirectX::SpriteFont> m_spriteFonts[3];
93+
94+
#if defined(__d3d12_h__) || defined(__d3d12_x_h__)
95+
std::unique_ptr<DirectX::DescriptorHeap> m_descriptorHeap;
96+
97+
Microsoft::WRL::ComPtr<ID3D12Resource> m_circleTex;
98+
Microsoft::WRL::ComPtr<ID3D12Resource> m_gamepadTex;
99+
Microsoft::WRL::ComPtr<ID3D12Resource> m_backgroundTex;
100+
101+
DirectX::XMUINT2 m_circleTexSize;
102+
DirectX::XMUINT2 m_gamepadTexSize;
103+
DirectX::XMUINT2 m_backgroundTexSize;
104+
#elif defined(__d3d11_h__) || defined(__d3d11_x_h__)
105+
std::unique_ptr<DirectX::CommonStates> m_states;
106+
80107
Microsoft::WRL::ComPtr<ID3D11InputLayout> m_lineLayout;
81108
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_circleTex;
82109
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_gamepadTex;
83110
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_backgroundTex;
84111
Microsoft::WRL::ComPtr<ID3D11DeviceContext> m_context;
112+
#endif
85113

86114
bool m_linearColors;
87115
RECT m_screenSize;

Kits/DirectXTK/DirectXTK_Windows10.vcxproj

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,23 @@
132132
<None Include="Src\Shaders\Compiled\DualTextureEffect_VSDualTextureVcNoFog.inc" />
133133
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMap.inc" />
134134
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapNoFog.inc" />
135+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLighting.inc" />
136+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingFresnel.inc" />
137+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingFresnelNoFog.inc" />
138+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingNoFog.inc" />
135139
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapSpecular.inc" />
136140
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapSpecularNoFog.inc" />
137141
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMap.inc" />
138142
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMapFresnel.inc" />
139143
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMapOneLight.inc" />
140144
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMapOneLightFresnel.inc" />
145+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMapPixelLighting.inc" />
146+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTx.inc" />
147+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoFog.inc" />
148+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoFogSpec.inc" />
149+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoSpec.inc" />
150+
<None Include="Src\Shaders\Compiled\NormalMapEffect_VSNormalPixelLightingTx.inc" />
151+
<None Include="Src\Shaders\Compiled\NormalMapEffect_VSNormalPixelLightingTxVc.inc" />
141152
<None Include="Src\Shaders\Compiled\SkinnedEffect_PSSkinnedPixelLighting.inc" />
142153
<None Include="Src\Shaders\Compiled\SkinnedEffect_PSSkinnedVertexLighting.inc" />
143154
<None Include="Src\Shaders\Compiled\SkinnedEffect_PSSkinnedVertexLightingNoFog.inc" />
@@ -187,6 +198,7 @@
187198
<ClCompile Include="Src\ModelLoadSDKMESH.cpp" />
188199
<ClCompile Include="Src\ModelLoadVBO.cpp" />
189200
<ClCompile Include="Src\Mouse.cpp" />
201+
<ClCompile Include="Src\NormalMapEffect.cpp" />
190202
<ClCompile Include="Src\pch.cpp">
191203
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
192204
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
@@ -239,6 +251,11 @@
239251
<ItemGroup>
240252
<Text Include="Readme.txt" />
241253
</ItemGroup>
254+
<ItemGroup>
255+
<None Include="Src\Shaders\NormalMapEffect.fx">
256+
<FileType>Document</FileType>
257+
</None>
258+
</ItemGroup>
242259
<PropertyGroup Label="Globals">
243260
<ProjectGuid>{f4776924-619c-42c7-88b2-82c947ccc9e7}</ProjectGuid>
244261
<Keyword>StaticLibrary</Keyword>
@@ -248,8 +265,8 @@
248265
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
249266
<AppContainerApplication>true</AppContainerApplication>
250267
<ApplicationType>Windows Store</ApplicationType>
251-
<WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
252-
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
268+
<WindowsTargetPlatformVersion>10.0.14393.0</WindowsTargetPlatformVersion>
269+
<WindowsTargetPlatformMinVersion>10.0.10586.0</WindowsTargetPlatformMinVersion>
253270
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
254271
</PropertyGroup>
255272
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

Kits/DirectXTK/DirectXTK_Windows10.vcxproj.filters

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,42 @@
440440
<None Include="Src\Shaders\Structures.fxh">
441441
<Filter>Src\Shaders\Shared</Filter>
442442
</None>
443+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTx.inc">
444+
<Filter>Src\Shaders\Compiled</Filter>
445+
</None>
446+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoFog.inc">
447+
<Filter>Src\Shaders\Compiled</Filter>
448+
</None>
449+
<None Include="Src\Shaders\Compiled\NormalMapEffect_VSNormalPixelLightingTx.inc">
450+
<Filter>Src\Shaders\Compiled</Filter>
451+
</None>
452+
<None Include="Src\Shaders\Compiled\NormalMapEffect_VSNormalPixelLightingTxVc.inc">
453+
<Filter>Src\Shaders\Compiled</Filter>
454+
</None>
455+
<None Include="Src\Shaders\NormalMapEffect.fx">
456+
<Filter>Src\Shaders</Filter>
457+
</None>
458+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLighting.inc">
459+
<Filter>Src\Shaders\Compiled</Filter>
460+
</None>
461+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingFresnel.inc">
462+
<Filter>Src\Shaders\Compiled</Filter>
463+
</None>
464+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingFresnelNoFog.inc">
465+
<Filter>Src\Shaders\Compiled</Filter>
466+
</None>
467+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_PSEnvMapPixelLightingNoFog.inc">
468+
<Filter>Src\Shaders\Compiled</Filter>
469+
</None>
470+
<None Include="Src\Shaders\Compiled\EnvironmentMapEffect_VSEnvMapPixelLighting.inc">
471+
<Filter>Src\Shaders\Compiled</Filter>
472+
</None>
473+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoFogSpec.inc">
474+
<Filter>Src\Shaders\Compiled</Filter>
475+
</None>
476+
<None Include="Src\Shaders\Compiled\NormalMapEffect_PSNormalPixelLightingTxNoSpec.inc">
477+
<Filter>Src\Shaders\Compiled</Filter>
478+
</None>
443479
</ItemGroup>
444480
<ItemGroup>
445481
<ClCompile Include="Src\AlphaTestEffect.cpp">
@@ -556,6 +592,9 @@
556592
<ClCompile Include="Src\Geometry.cpp">
557593
<Filter>Src\Shared</Filter>
558594
</ClCompile>
595+
<ClCompile Include="Src\NormalMapEffect.cpp">
596+
<Filter>Src</Filter>
597+
</ClCompile>
559598
</ItemGroup>
560599
<ItemGroup>
561600
<Text Include="Readme.txt" />

0 commit comments

Comments
 (0)