Skip to content

Commit bae73e2

Browse files
author
unknown
committed
Added DDSTextureLoader wrapper.
Added DDSTextureLoader wrapper. Added new formats to ContainerFormat. Updated read-me. Renamed TextureHelper to WICTextureHelper. Updated sample program.
1 parent 551bb4d commit bae73e2

File tree

16 files changed

+291
-80
lines changed

16 files changed

+291
-80
lines changed

DirectXTK.NET/DirectXTK.NET.sln

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ VisualStudioVersion = 17.9.34728.123
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTK.NET", "DirectXTK.NET\DirectXTK.NET.vcxproj", "{7FD78022-FB2F-434F-9803-E4757E857776}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectXTKSample", "DirectXTKSample\DirectXTKSample.csproj", "{4D23C806-8D34-49CC-B6D9-214C2E4910C6}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DirectXTKSample", "DirectXTKSample\DirectXTKSample.csproj", "{4D23C806-8D34-49CC-B6D9-214C2E4910C6}"
99
EndProject
1010
Global
1111
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -31,8 +31,8 @@ Global
3131
{7FD78022-FB2F-434F-9803-E4757E857776}.Release|x86.Build.0 = Release|Win32
3232
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3333
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
34-
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x64.ActiveCfg = Debug|Any CPU
35-
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x64.Build.0 = Debug|Any CPU
34+
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x64.ActiveCfg = Debug|x64
35+
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x64.Build.0 = Debug|x64
3636
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x86.ActiveCfg = Debug|Any CPU
3737
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Debug|x86.Build.0 = Debug|Any CPU
3838
{4D23C806-8D34-49CC-B6D9-214C2E4910C6}.Release|Any CPU.ActiveCfg = Release|Any CPU

DirectXTK.NET/DirectXTK.NET/DirectXTK.NET.vcxproj

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,25 @@
1919
</ProjectConfiguration>
2020
</ItemGroup>
2121
<ItemGroup>
22+
<ClInclude Include="Source\DDSTextureHelper.h" />
2223
<ClInclude Include="resource.h" />
2324
<ClInclude Include="Source\Enums.h" />
24-
<ClInclude Include="Source\StdAfx.h" />
25-
<ClInclude Include="Source\TextureHelper.h" />
25+
<ClInclude Include="Source\WICTextureHelper.h" />
2626
</ItemGroup>
2727
<ItemGroup>
28-
<ClCompile Include="Source\StdAfx.cpp" />
29-
<ClCompile Include="Source\TextureHelper.cpp" />
28+
<ClCompile Include="Source\DDSTextureHelper.cpp" />
29+
<ClCompile Include="Source\WICTextureHelper.cpp" />
3030
</ItemGroup>
3131
<ItemGroup>
3232
<Reference Include="Silk.NET.Direct3D11">
3333
<HintPath>..\DirectXTKSample\bin\Debug\net8.0\Silk.NET.Direct3D11.dll</HintPath>
3434
</Reference>
3535
</ItemGroup>
3636
<ItemGroup>
37-
<None Include="packages.config" />
37+
<ResourceCompile Include="DirectXTK.NET.rc" />
3838
</ItemGroup>
3939
<ItemGroup>
40-
<ResourceCompile Include="DirectXTK.NET.rc" />
40+
<None Include="packages.config" />
4141
</ItemGroup>
4242
<PropertyGroup Label="Globals">
4343
<VCProjectVersion>17.0</VCProjectVersion>
@@ -48,7 +48,7 @@
4848
<TargetFrameworkVersion>
4949
</TargetFrameworkVersion>
5050
<TargetFramework>net80</TargetFramework>
51-
<WindowsTargetPlatformMinVersion>7.0</WindowsTargetPlatformMinVersion>
51+
<WindowsTargetPlatformMinVersion>8.0</WindowsTargetPlatformMinVersion>
5252
</PropertyGroup>
5353
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
5454
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -139,7 +139,7 @@
139139
<SDLCheck>true</SDLCheck>
140140
<PreprocessorDefinitions>_DEBUG;DIRECTXTKNET_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
141141
<ConformanceMode>true</ConformanceMode>
142-
<PrecompiledHeader>Create</PrecompiledHeader>
142+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
143143
<PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>
144144
</ClCompile>
145145
<Link>
@@ -170,11 +170,13 @@
170170
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
171171
<ImportGroup Label="ExtensionTargets">
172172
<Import Project="packages\directxtk_uwp.2024.6.5.1\build\native\directxtk_uwp.targets" Condition="Exists('packages\directxtk_uwp.2024.6.5.1\build\native\directxtk_uwp.targets')" />
173+
<Import Project="..\packages\directxtk_uwp.2024.10.29.1\build\native\directxtk_uwp.targets" Condition="Exists('..\packages\directxtk_uwp.2024.10.29.1\build\native\directxtk_uwp.targets')" />
173174
</ImportGroup>
174175
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
175176
<PropertyGroup>
176177
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
177178
</PropertyGroup>
178179
<Error Condition="!Exists('packages\directxtk_uwp.2024.6.5.1\build\native\directxtk_uwp.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\directxtk_uwp.2024.6.5.1\build\native\directxtk_uwp.targets'))" />
180+
<Error Condition="!Exists('..\packages\directxtk_uwp.2024.10.29.1\build\native\directxtk_uwp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\directxtk_uwp.2024.10.29.1\build\native\directxtk_uwp.targets'))" />
179181
</Target>
180182
</Project>

DirectXTK.NET/DirectXTK.NET/DirectXTK.NET.vcxproj.filters

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,34 @@
55
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
66
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
77
</Filter>
8+
<Filter Include="TextureHelpers">
9+
<UniqueIdentifier>{a3d4dbcc-2d46-4c50-a6bc-e1487e70afa6}</UniqueIdentifier>
10+
</Filter>
811
</ItemGroup>
912
<ItemGroup>
10-
<ClInclude Include="Source\StdAfx.h" />
11-
<ClInclude Include="Source\TextureHelper.h" />
1213
<ClInclude Include="Source\Enums.h" />
1314
<ClInclude Include="resource.h" />
15+
<ClInclude Include="Source\WICTextureHelper.h">
16+
<Filter>TextureHelpers</Filter>
17+
</ClInclude>
18+
<ClInclude Include="Source\DDSTextureHelper.h">
19+
<Filter>TextureHelpers</Filter>
20+
</ClInclude>
1421
</ItemGroup>
1522
<ItemGroup>
16-
<ClCompile Include="Source\StdAfx.cpp" />
17-
<ClCompile Include="Source\TextureHelper.cpp" />
23+
<ResourceCompile Include="DirectXTK.NET.rc">
24+
<Filter>Ressourcendateien</Filter>
25+
</ResourceCompile>
1826
</ItemGroup>
1927
<ItemGroup>
20-
<None Include="packages.config" />
28+
<ClCompile Include="Source\WICTextureHelper.cpp">
29+
<Filter>TextureHelpers</Filter>
30+
</ClCompile>
31+
<ClCompile Include="Source\DDSTextureHelper.cpp">
32+
<Filter>TextureHelpers</Filter>
33+
</ClCompile>
2134
</ItemGroup>
2235
<ItemGroup>
23-
<ResourceCompile Include="DirectXTK.NET.rc">
24-
<Filter>Ressourcendateien</Filter>
25-
</ResourceCompile>
36+
<None Include="packages.config" />
2637
</ItemGroup>
2738
</Project>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include "DDSTextureHelper.h"
2+
3+
using namespace System;
4+
using namespace System::Runtime::InteropServices;
5+
6+
HRESULT DirectXTK::DDSTextureHelper::CreateDDSTextureFromFile(Silk::NET::Direct3D11::ID3D11Device* device, String^ filePath, Silk::NET::Direct3D11::ID3D11Resource** texture, Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView, UINT maxSize, DDSAlphaMode alphaMode)
7+
{
8+
auto chars = (wchar_t*)Marshal::StringToHGlobalUni(filePath).ToPointer();
9+
auto nativeAlphaMode = static_cast<DirectX::DDS_ALPHA_MODE>(alphaMode);
10+
11+
HRESULT result = DirectX::CreateDDSTextureFromFile((ID3D11Device*)device, chars, (ID3D11Resource**)texture, (ID3D11ShaderResourceView**)textureView, maxSize, &nativeAlphaMode);
12+
13+
Marshal::FreeHGlobal(IntPtr(chars));
14+
return result;
15+
}
16+
17+
HRESULT DirectXTK::DDSTextureHelper::CreateDDSTextureFromFile(Silk::NET::Direct3D11::ID3D11Device* device, Silk::NET::Direct3D11::ID3D11DeviceContext* deviceContext, String^ filePath, Silk::NET::Direct3D11::ID3D11Resource** texture, Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView, UINT maxSize, DDSAlphaMode alphaMode)
18+
{
19+
auto chars = (wchar_t*)Marshal::StringToHGlobalUni(filePath).ToPointer();
20+
auto nativeAlphaMode = static_cast<DirectX::DDS_ALPHA_MODE>(alphaMode);
21+
22+
HRESULT result = DirectX::CreateDDSTextureFromFile((ID3D11Device*)device, (ID3D11DeviceContext*)deviceContext, chars, (ID3D11Resource**)texture, (ID3D11ShaderResourceView**)textureView, maxSize, &nativeAlphaMode);
23+
24+
Marshal::FreeHGlobal(IntPtr(chars));
25+
return result;
26+
}
27+
28+
HRESULT DirectXTK::DDSTextureHelper::CreateDDSTextureFromFile(Silk::NET::Direct3D11::ID3D11Device* device, String^ filePath, UINT maxSize, Silk::NET::Direct3D11::Usage usage, UINT bindFlags, UINT cpuAccessFlags, Silk::NET::Direct3D11::ResourceMiscFlag miscFlags, DDSLoaderFlag loadFlags, Silk::NET::Direct3D11::ID3D11Resource** texture, Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView, DDSAlphaMode alphaMode)
29+
{
30+
auto chars = (wchar_t*)Marshal::StringToHGlobalUni(filePath).ToPointer();
31+
auto nativeAlphaMode = static_cast<DirectX::DDS_ALPHA_MODE>(alphaMode);
32+
auto nativeLoadFlags = static_cast<DirectX::DDS_LOADER_FLAGS>(loadFlags);
33+
34+
HRESULT result = DirectX::CreateDDSTextureFromFileEx((ID3D11Device*)device, chars, maxSize, (D3D11_USAGE)usage, bindFlags, cpuAccessFlags, (UINT)miscFlags, nativeLoadFlags, (ID3D11Resource**)texture, (ID3D11ShaderResourceView**)textureView, &nativeAlphaMode);
35+
36+
Marshal::FreeHGlobal(IntPtr(chars));
37+
return result;
38+
}
39+
40+
HRESULT DirectXTK::DDSTextureHelper::CreateDDSTextureFromFile(Silk::NET::Direct3D11::ID3D11Device* device, Silk::NET::Direct3D11::ID3D11DeviceContext* deviceContext, String^ filePath, UINT maxSize, Silk::NET::Direct3D11::Usage usage, UINT bindFlags, UINT cpuAccessFlags, Silk::NET::Direct3D11::ResourceMiscFlag miscFlags, DDSLoaderFlag loadFlags, Silk::NET::Direct3D11::ID3D11Resource** texture, Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView, DDSAlphaMode alphaMode)
41+
{
42+
auto chars = (wchar_t*)Marshal::StringToHGlobalUni(filePath).ToPointer();
43+
auto nativeAlphaMode = static_cast<DirectX::DDS_ALPHA_MODE>(alphaMode);
44+
auto nativeLoadFlags = static_cast<DirectX::DDS_LOADER_FLAGS>(loadFlags);
45+
46+
HRESULT result = DirectX::CreateDDSTextureFromFileEx((ID3D11Device*)device, (ID3D11DeviceContext*)deviceContext, chars, maxSize, (D3D11_USAGE)usage, bindFlags, cpuAccessFlags, (UINT)miscFlags, nativeLoadFlags, (ID3D11Resource**)texture, (ID3D11ShaderResourceView**)textureView, &nativeAlphaMode);
47+
48+
Marshal::FreeHGlobal(IntPtr(chars));
49+
return result;
50+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include "DDSTextureLoader.h"
2+
3+
using namespace System;
4+
5+
namespace DirectXTK
6+
{
7+
public enum class DDSAlphaMode {
8+
Unknown,
9+
Straight,
10+
Premltiplied,
11+
Opaque,
12+
Custom
13+
};
14+
15+
public enum class DDSLoaderFlag {
16+
Default = 0,
17+
ForceSRGB = 1,
18+
IgnoreSRGB = 2,
19+
};
20+
21+
public ref class DDSTextureHelper
22+
{
23+
public:
24+
static HRESULT CreateDDSTextureFromFile(
25+
Silk::NET::Direct3D11::ID3D11Device* device,
26+
String^ filePath,
27+
Silk::NET::Direct3D11::ID3D11Resource** texture,
28+
Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView,
29+
[Runtime::InteropServices::OptionalAttribute] UINT maxsize,
30+
[Runtime::InteropServices::OptionalAttribute] DDSAlphaMode alphaMode);
31+
32+
static HRESULT CreateDDSTextureFromFile(
33+
Silk::NET::Direct3D11::ID3D11Device* device,
34+
Silk::NET::Direct3D11::ID3D11DeviceContext* deviceContext,
35+
String^ filePath,
36+
Silk::NET::Direct3D11::ID3D11Resource** texture,
37+
Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView,
38+
[Runtime::InteropServices::OptionalAttribute] UINT maxSize,
39+
[Runtime::InteropServices::OptionalAttribute] DDSAlphaMode alphaMode);
40+
41+
static HRESULT CreateDDSTextureFromFile(
42+
Silk::NET::Direct3D11::ID3D11Device* device,
43+
String^ filePath,
44+
UINT maxsize,
45+
Silk::NET::Direct3D11::Usage usage,
46+
UINT bindFlags,
47+
UINT cpuAccessFlags,
48+
Silk::NET::Direct3D11::ResourceMiscFlag miscFlags,
49+
DDSLoaderFlag loadFlags,
50+
Silk::NET::Direct3D11::ID3D11Resource** texture,
51+
Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView,
52+
DDSAlphaMode alphaMode);
53+
54+
static HRESULT CreateDDSTextureFromFile(
55+
Silk::NET::Direct3D11::ID3D11Device* device,
56+
Silk::NET::Direct3D11::ID3D11DeviceContext* deviceContext,
57+
String^ filePath,
58+
UINT maxsize,
59+
Silk::NET::Direct3D11::Usage usage,
60+
UINT bindFlags,
61+
UINT cpuAccessFlags,
62+
Silk::NET::Direct3D11::ResourceMiscFlag miscFlags,
63+
DDSLoaderFlag loadFlags,
64+
Silk::NET::Direct3D11::ID3D11Resource** texture,
65+
Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView,
66+
DDSAlphaMode alphaMode);
67+
68+
//static HRESULT CreateDDSTextureFromFileEx(
69+
// Silk::NET::Direct3D11::ID3D11Device* d3dDevice,
70+
// Silk::NET::Direct3D11::ID3D11DeviceContext* d3dContext,
71+
// System::String^ filePath,
72+
// size_t maxsize,
73+
// D3D11_USAGE usage,
74+
// unsigned int bindFlags,
75+
// unsigned int cpuAccessFlags,
76+
// unsigned int miscFlags,
77+
// DDS_LOADER_FLAGS loadFlags,
78+
// Silk::NET::Direct3D11::ID3D11Resource** texture,
79+
// Silk::NET::Direct3D11::ID3D11ShaderResourceView** textureView,
80+
// DDS_ALPHA_MODE* alphaMode = nullptr);
81+
};
82+
}

DirectXTK.NET/DirectXTK.NET/Source/Enums.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@
22

33
#include <wincodec.h>
44

5+
using namespace System;
6+
57
namespace DirectXTK
68
{
79
public enum class ContainerFormat
810
{
9-
Bmp = 0,
10-
Png,
11+
Adng,
12+
Bmp,
13+
Dds,
14+
Gif,
15+
Heif,
1116
Ico,
1217
Jpeg,
18+
Png,
19+
Raw,
1320
Tiff,
14-
Gif,
21+
Webp,
1522
Wmp
1623
};
1724

@@ -113,14 +120,19 @@ namespace DirectXTK
113120
{
114121
switch (containerFormat)
115122
{
123+
case ContainerFormat::Adng: return GUID_ContainerFormatAdng;
116124
case ContainerFormat::Bmp: return GUID_ContainerFormatBmp;
117-
case ContainerFormat::Png: return GUID_ContainerFormatPng;
125+
case ContainerFormat::Dds: return GUID_ContainerFormatDds;
126+
case ContainerFormat::Gif: return GUID_ContainerFormatGif;
127+
case ContainerFormat::Heif: return GUID_ContainerFormatHeif;
118128
case ContainerFormat::Ico: return GUID_ContainerFormatIco;
119129
case ContainerFormat::Jpeg: return GUID_ContainerFormatJpeg;
130+
case ContainerFormat::Png: return GUID_ContainerFormatPng;
131+
case ContainerFormat::Raw: return GUID_ContainerFormatRaw;
120132
case ContainerFormat::Tiff: return GUID_ContainerFormatTiff;
121-
case ContainerFormat::Gif: return GUID_ContainerFormatGif;
133+
case ContainerFormat::Webp: return GUID_ContainerFormatWebp;
122134
case ContainerFormat::Wmp: return GUID_ContainerFormatWmp;
123-
default: throw gcnew System::ArgumentOutOfRangeException("containerFormat");
135+
default: throw gcnew ArgumentOutOfRangeException("containerFormat");
124136
}
125137
}
126138

@@ -218,7 +230,7 @@ namespace DirectXTK
218230
case PixelFormat::Format16bppYQuantizedDctCoefficients: return GUID_WICPixelFormat16bppYQuantizedDctCoefficients;
219231
case PixelFormat::Format16bppCbQuantizedDctCoefficients: return GUID_WICPixelFormat16bppCbQuantizedDctCoefficients;
220232
case PixelFormat::Format16bppCrQuantizedDctCoefficients: return GUID_WICPixelFormat16bppCrQuantizedDctCoefficients;
221-
default: throw gcnew System::ArgumentOutOfRangeException("pixelFormat");
233+
default: throw gcnew ArgumentOutOfRangeException("pixelFormat");
222234
}
223235
}
224236
}

DirectXTK.NET/DirectXTK.NET/Source/TextureHelper.cpp

Lines changed: 0 additions & 29 deletions
This file was deleted.

DirectXTK.NET/DirectXTK.NET/Source/TextureHelper.h

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)