diff --git a/Texassemble/Texassemble_Desktop_2010.sln b/Texassemble/Texassemble_Desktop_2010.sln new file mode 100644 index 0000000..37f35f9 --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8F18CBD7-4116-4956-BCD8-20D688A4CBD1}") = "texassemble", "Texassemble_Desktop_2010.vcxproj", "{C3A65381-8FD3-4F69-B29E-654B4B0ED136}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTex", "..\DirectXTex\DirectXTex_Desktop_2010.vcxproj", "{371B9FA9-4C90-4AC6-A123-ACED756D6C77}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Profile|Win32 = Profile|Win32 + Profile|x64 = Profile|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|Win32.Build.0 = Debug|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|x64.ActiveCfg = Debug|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|x64.Build.0 = Debug|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|Win32.ActiveCfg = Profile|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|Win32.Build.0 = Profile|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|x64.ActiveCfg = Profile|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|x64.Build.0 = Profile|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|Win32.ActiveCfg = Release|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|Win32.Build.0 = Release|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|x64.ActiveCfg = Release|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|x64.Build.0 = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.ActiveCfg = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.Build.0 = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.ActiveCfg = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.Build.0 = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.ActiveCfg = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.Build.0 = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.ActiveCfg = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.Build.0 = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.ActiveCfg = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.Build.0 = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.ActiveCfg = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Texassemble/Texassemble_Desktop_2010.vcxproj b/Texassemble/Texassemble_Desktop_2010.vcxproj new file mode 100644 index 0000000..a3c8a37 --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010.vcxproj @@ -0,0 +1,382 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Profile + Win32 + + + Profile + x64 + + + Release + Win32 + + + Release + x64 + + + + texassemble + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1} + texassemble + Win32Proj + + + + Application + Unicode + + + Application + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + true + true + $(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + + + true + true + $(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath) + + + false + true + $(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + + + false + true + $(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath) + + + false + true + $(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + + + false + true + $(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath) + $(DXSDK_DIR)Include;$(IncludePath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath) + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + StreamingSIMDExtensions2 + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + EditAndContinue + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\XNAMath;..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;USE_XNAMATH;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + + + + + + + {371b9fa9-4c90-4ac6-a123-aced756d6c77} + + + + + + + \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2010.vcxproj.filters b/Texassemble/Texassemble_Desktop_2010.vcxproj.filters new file mode 100644 index 0000000..71d78bd --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {8e114980-c1a3-4ada-ad7c-83caadf5daeb} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2010_SDK80.sln b/Texassemble/Texassemble_Desktop_2010_SDK80.sln new file mode 100644 index 0000000..b4cd942 --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010_SDK80.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8F18CBD7-4116-4956-BCD8-20D688A4CBD1}") = "texassemble", "Texassemble_Desktop_2010_SDK80.vcxproj", "{C3A65381-8FD3-4F69-B29E-654B4B0ED136}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTex", "..\DirectXTex\DirectXTex_Desktop_2010_SDK80.vcxproj", "{371B9FA9-4C90-4AC6-A123-ACED756D6C77}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Profile|Win32 = Profile|Win32 + Profile|x64 = Profile|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|Win32.Build.0 = Debug|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|x64.ActiveCfg = Debug|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Debug|x64.Build.0 = Debug|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|Win32.ActiveCfg = Profile|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|Win32.Build.0 = Profile|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|x64.ActiveCfg = Profile|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Profile|x64.Build.0 = Profile|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|Win32.ActiveCfg = Release|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|Win32.Build.0 = Release|Win32 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|x64.ActiveCfg = Release|x64 + {C3A65381-8FD3-4F69-B29E-654B4B0ED136}.Release|x64.Build.0 = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.ActiveCfg = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.Build.0 = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.ActiveCfg = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.Build.0 = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.ActiveCfg = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.Build.0 = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.ActiveCfg = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.Build.0 = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.ActiveCfg = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.Build.0 = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.ActiveCfg = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj b/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj new file mode 100644 index 0000000..d5cae5f --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj @@ -0,0 +1,370 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Profile + Win32 + + + Profile + x64 + + + Release + Win32 + + + Release + x64 + + + + texassemble + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1} + texassemble + Win32Proj + + + + Application + Unicode + + + Application + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + Application + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + true + true + + + false + true + + + false + true + + + false + true + + + false + true + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + EditAndContinue + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + + + + + + + {371b9fa9-4c90-4ac6-a123-aced756d6c77} + + + + + + + \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj.filters b/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj.filters new file mode 100644 index 0000000..71d78bd --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2010_SDK80.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {8e114980-c1a3-4ada-ad7c-83caadf5daeb} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2012.sln b/Texassemble/Texassemble_Desktop_2012.sln new file mode 100644 index 0000000..1ea65f2 --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2012.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "texassemble", "Texassemble_Desktop_2012.vcxproj", "{8F18CBD7-4116-4956-BCD8-20D688A4CBD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTex", "..\DirectXTex\DirectXTex_Desktop_2012.vcxproj", "{371B9FA9-4C90-4AC6-A123-ACED756D6C77}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Profile|Win32 = Profile|Win32 + Profile|x64 = Profile|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Debug|Win32.Build.0 = Debug|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Debug|x64.ActiveCfg = Debug|x64 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Debug|x64.Build.0 = Debug|x64 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Profile|Win32.ActiveCfg = Profile|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Profile|Win32.Build.0 = Profile|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Profile|x64.ActiveCfg = Profile|x64 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Profile|x64.Build.0 = Profile|x64 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Release|Win32.ActiveCfg = Release|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Release|Win32.Build.0 = Release|Win32 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Release|x64.ActiveCfg = Release|x64 + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1}.Release|x64.Build.0 = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.ActiveCfg = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|Win32.Build.0 = Debug|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.ActiveCfg = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.Build.0 = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.ActiveCfg = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|Win32.Build.0 = Profile|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.ActiveCfg = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.Build.0 = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.ActiveCfg = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|Win32.Build.0 = Release|Win32 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.ActiveCfg = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Texassemble/Texassemble_Desktop_2012.vcxproj b/Texassemble/Texassemble_Desktop_2012.vcxproj new file mode 100644 index 0000000..97e5ad2 --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2012.vcxproj @@ -0,0 +1,389 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Profile + Win32 + + + Profile + x64 + + + Release + Win32 + + + Release + x64 + + + + texassemble + {8F18CBD7-4116-4956-BCD8-20D688A4CBD1} + texassemble + Win32Proj + $(VCTargetsPath11) + + + + Application + Unicode + v110 + + + Application + Unicode + v110 + + + Application + true + Unicode + v110 + + + Application + true + Unicode + v110 + + + Application + true + Unicode + v110 + + + Application + true + Unicode + v110 + + + + + + + + + + + + + + + + + + + + + + + + true + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + true + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + false + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + false + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + false + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + false + true + $(ExecutablePath) + $(IncludePath) + $(LibraryPath) + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + EditAndContinue + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + Disabled + MultiThreadedDebugDLL + false + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;_DEBUG;DEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + EnableFastChecks + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + Console + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + StreamingSIMDExtensions2 + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX86 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + Level4 + MaxSpeed + MultiThreadedDLL + false + true + true + Fast + Sync + ..\DirectXTex;%(AdditionalIncludeDirectories) + %(AdditionalOptions) + WIN32;NDEBUG;PROFILE;_CONSOLE;D3DXFX_LARGEADDRESS_HANDLE;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions) + + + %(AdditionalOptions) + ole32.lib;windowscodecs.lib;uuid.lib;%(AdditionalDependencies) + true + Console + true + true + true + true + true + MachineX64 + AsInvoker + %(DelayLoadDLLs) + + + false + + + + + + + + + + + + + + + + + + + {371b9fa9-4c90-4ac6-a123-aced756d6c77} + + + + + + + \ No newline at end of file diff --git a/Texassemble/Texassemble_Desktop_2012.vcxproj.filters b/Texassemble/Texassemble_Desktop_2012.vcxproj.filters new file mode 100644 index 0000000..71d78bd --- /dev/null +++ b/Texassemble/Texassemble_Desktop_2012.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {8e114980-c1a3-4ada-ad7c-83caadf5daeb} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/Texassemble/directx.ico b/Texassemble/directx.ico new file mode 100644 index 0000000..bc43c1b Binary files /dev/null and b/Texassemble/directx.ico differ diff --git a/Texassemble/texassemble.cpp b/Texassemble/texassemble.cpp new file mode 100644 index 0000000..5d3220f --- /dev/null +++ b/Texassemble/texassemble.cpp @@ -0,0 +1,756 @@ +//-------------------------------------------------------------------------------------- +// File: Texassemble.cpp +// +// DirectX 11 Texture assembler for cube maps, volume maps, and arrays +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +#include +#include +#include + +#include + +#include "directxtex.h" + +#include + +using namespace DirectX; + +enum OPTIONS // Note: dwOptions below assumes 32 or less options. +{ + OPT_CUBE = 1, + OPT_VOLUME, + OPT_ARRAY, + OPT_CUBEARRAY, + OPT_FORMAT, + OPT_FILTER, + OPT_OUTPUTFILE, + OPT_USE_DX10, + OPT_NOLOGO, + OPT_SEPALPHA, +}; + +struct SConversion +{ + WCHAR szSrc [MAX_PATH]; + + SConversion *pNext; +}; + +struct SValue +{ + LPCWSTR pName; + DWORD dwValue; +}; + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +SValue g_pOptions[] = +{ + { L"cube", OPT_CUBE }, + { L"volume", OPT_VOLUME }, + { L"array", OPT_ARRAY }, + { L"cubearray", OPT_CUBEARRAY }, + { L"f", OPT_FORMAT }, + { L"if", OPT_FILTER }, + { L"o", OPT_OUTPUTFILE }, + { L"dx10", OPT_USE_DX10 }, + { L"nologo", OPT_NOLOGO }, + { L"sepalpha", OPT_SEPALPHA }, + { nullptr, 0 } +}; + +#define DEFFMT(fmt) { L#fmt, DXGI_FORMAT_ ## fmt } + +SValue g_pFormats[] = +{ + // List does not include _TYPELESS or depth/stencil formats + DEFFMT(R32G32B32A32_FLOAT), + DEFFMT(R32G32B32A32_UINT), + DEFFMT(R32G32B32A32_SINT), + DEFFMT(R32G32B32_FLOAT), + DEFFMT(R32G32B32_UINT), + DEFFMT(R32G32B32_SINT), + DEFFMT(R16G16B16A16_FLOAT), + DEFFMT(R16G16B16A16_UNORM), + DEFFMT(R16G16B16A16_UINT), + DEFFMT(R16G16B16A16_SNORM), + DEFFMT(R16G16B16A16_SINT), + DEFFMT(R32G32_FLOAT), + DEFFMT(R32G32_UINT), + DEFFMT(R32G32_SINT), + DEFFMT(R10G10B10A2_UNORM), + DEFFMT(R10G10B10A2_UINT), + DEFFMT(R11G11B10_FLOAT), + DEFFMT(R8G8B8A8_UNORM), + DEFFMT(R8G8B8A8_UNORM_SRGB), + DEFFMT(R8G8B8A8_UINT), + DEFFMT(R8G8B8A8_SNORM), + DEFFMT(R8G8B8A8_SINT), + DEFFMT(R16G16_FLOAT), + DEFFMT(R16G16_UNORM), + DEFFMT(R16G16_UINT), + DEFFMT(R16G16_SNORM), + DEFFMT(R16G16_SINT), + DEFFMT(R32_FLOAT), + DEFFMT(R32_UINT), + DEFFMT(R32_SINT), + DEFFMT(R8G8_UNORM), + DEFFMT(R8G8_UINT), + DEFFMT(R8G8_SNORM), + DEFFMT(R8G8_SINT), + DEFFMT(R16_FLOAT), + DEFFMT(R16_UNORM), + DEFFMT(R16_UINT), + DEFFMT(R16_SNORM), + DEFFMT(R16_SINT), + DEFFMT(R8_UNORM), + DEFFMT(R8_UINT), + DEFFMT(R8_SNORM), + DEFFMT(R8_SINT), + DEFFMT(A8_UNORM), + //DEFFMT(R1_UNORM) + DEFFMT(R9G9B9E5_SHAREDEXP), + DEFFMT(R8G8_B8G8_UNORM), + DEFFMT(G8R8_G8B8_UNORM), + DEFFMT(BC1_UNORM), + DEFFMT(BC1_UNORM_SRGB), + DEFFMT(BC2_UNORM), + DEFFMT(BC2_UNORM_SRGB), + DEFFMT(BC3_UNORM), + DEFFMT(BC3_UNORM_SRGB), + DEFFMT(BC4_UNORM), + DEFFMT(BC4_SNORM), + DEFFMT(BC5_UNORM), + DEFFMT(BC5_SNORM), + DEFFMT(B5G6R5_UNORM), + DEFFMT(B5G5R5A1_UNORM), + + // DXGI 1.1 formats + DEFFMT(B8G8R8A8_UNORM), + DEFFMT(B8G8R8X8_UNORM), + DEFFMT(R10G10B10_XR_BIAS_A2_UNORM), + DEFFMT(B8G8R8A8_UNORM_SRGB), + DEFFMT(B8G8R8X8_UNORM_SRGB), + DEFFMT(BC6H_UF16), + DEFFMT(BC6H_SF16), + DEFFMT(BC7_UNORM), + DEFFMT(BC7_UNORM_SRGB), + +#ifdef DXGI_1_2_FORMATS + // DXGI 1.2 formats + DEFFMT(B4G4R4A4_UNORM), +#endif + + { nullptr, DXGI_FORMAT_UNKNOWN } +}; + +SValue g_pFilters[] = +{ + { L"POINT", TEX_FILTER_POINT }, + { L"LINEAR", TEX_FILTER_LINEAR }, + { L"CUBIC", TEX_FILTER_CUBIC }, + { L"FANT", TEX_FILTER_FANT }, + { L"BOX", TEX_FILTER_BOX }, + { L"TRIANGLE", TEX_FILTER_TRIANGLE }, + { L"POINT_DITHER", TEX_FILTER_POINT | TEX_FILTER_DITHER }, + { L"LINEAR_DITHER", TEX_FILTER_LINEAR | TEX_FILTER_DITHER }, + { L"CUBIC_DITHER", TEX_FILTER_CUBIC | TEX_FILTER_DITHER }, + { L"FANT_DITHER", TEX_FILTER_FANT | TEX_FILTER_DITHER }, + { L"BOX_DITHER", TEX_FILTER_BOX | TEX_FILTER_DITHER }, + { L"TRIANGLE_DITHER", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER }, + { L"POINT_DITHER_DIFFUSION", TEX_FILTER_POINT | TEX_FILTER_DITHER_DIFFUSION }, + { L"LINEAR_DITHER_DIFFUSION", TEX_FILTER_LINEAR | TEX_FILTER_DITHER_DIFFUSION }, + { L"CUBIC_DITHER_DIFFUSION", TEX_FILTER_CUBIC | TEX_FILTER_DITHER_DIFFUSION }, + { L"FANT_DITHER_DIFFUSION", TEX_FILTER_FANT | TEX_FILTER_DITHER_DIFFUSION }, + { L"BOX_DITHER_DIFFUSION", TEX_FILTER_BOX | TEX_FILTER_DITHER_DIFFUSION }, + { L"TRIANGLE_DITHER_DIFFUSION", TEX_FILTER_TRIANGLE | TEX_FILTER_DITHER_DIFFUSION }, + { nullptr, TEX_FILTER_DEFAULT } +}; + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#pragma prefast(disable : 26018, "Only used with static internal arrays") + +DWORD LookupByName(const WCHAR *pName, const SValue *pArray) +{ + while(pArray->pName) + { + if(!_wcsicmp(pName, pArray->pName)) + return pArray->dwValue; + + pArray++; + } + + return 0; +} + +const WCHAR* LookupByValue(DWORD pValue, const SValue *pArray) +{ + while(pArray->pName) + { + if(pValue == pArray->dwValue) + return pArray->pName; + + pArray++; + } + + return L""; +} + +void PrintFormat(DXGI_FORMAT Format) +{ + for(SValue *pFormat = g_pFormats; pFormat->pName; pFormat++) + { + if((DXGI_FORMAT) pFormat->dwValue == Format) + { + wprintf( pFormat->pName ); + break; + } + } +} + +void PrintInfo( const TexMetadata& info ) +{ + wprintf( L" (%Iux%Iu", info.width, info.height); + + if ( TEX_DIMENSION_TEXTURE3D == info.dimension ) + wprintf( L"x%Iu", info.depth); + + if ( info.mipLevels > 1 ) + wprintf( L",%Iu", info.mipLevels); + + wprintf( L" "); + PrintFormat( info.format ); + + switch ( info.dimension ) + { + case TEX_DIMENSION_TEXTURE1D: + wprintf( (info.arraySize > 1) ? L" 1DArray" : L" 1D" ); + break; + + case TEX_DIMENSION_TEXTURE2D: + if ( info.IsCubemap() ) + { + wprintf( (info.arraySize > 6) ? L" CubeArray" : L" Cube" ); + } + else + { + wprintf( (info.arraySize > 1) ? L" 2DArray" : L" 2D" ); + } + break; + + case TEX_DIMENSION_TEXTURE3D: + wprintf( L" 3D"); + break; + } + + wprintf( L")"); +} + + +void PrintList(size_t cch, SValue *pValue) +{ + while(pValue->pName) + { + size_t cchName = wcslen(pValue->pName); + + if(cch + cchName + 2>= 80) + { + wprintf( L"\n "); + cch = 6; + } + + wprintf( L"%s ", pValue->pName ); + cch += cchName + 2; + pValue++; + } + + wprintf( L"\n"); +} + + +void PrintLogo() +{ + wprintf( L"Microsoft (R) DirectX 11 Texture Assembler (DirectXTex version)\n"); + wprintf( L"Copyright (C) Microsoft Corp. All rights reserved.\n"); + wprintf( L"\n"); +} + + +void PrintUsage() +{ + PrintLogo(); + + wprintf( L"Usage: texassemble [-cube | - volume | -array | -cubearray] \n"); + wprintf( L"\n"); + wprintf( L" -cube create cubemap\n"); + wprintf( L" -volume create volume map\n"); + wprintf( L" -array create texture array\n"); + wprintf( L" -cubearray create cubemap array\n"); + wprintf( L" -f format\n"); + wprintf( L" -if image filtering\n"); + wprintf( L" -o output filename\n"); + wprintf( L" -sepalpha resize/generate mips alpha channel separately\n"); + wprintf( L" from color channels\n"); + wprintf( L" -dx10 Force use of 'DX10' extended header\n"); + wprintf( L" -nologo suppress copyright message\n"); + + wprintf( L"\n"); + wprintf( L" : "); + PrintList(13, g_pFormats); + + wprintf( L"\n"); + wprintf( L" : "); + PrintList(13, g_pFilters); +} + + +//-------------------------------------------------------------------------------------- +// Entry-point +//-------------------------------------------------------------------------------------- +#pragma prefast(disable : 28198, "Command-line tool, frees all memory on exit") + +int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[]) +{ + // Parameters and defaults + HRESULT hr; + INT nReturn; + + DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; + DWORD dwFilter = TEX_FILTER_DEFAULT; + DWORD dwFilterOpts = 0; + + WCHAR szOutputFile[MAX_PATH] = { 0 }; + + // Initialize COM (needed for WIC) + if( FAILED( hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED) ) ) + { + wprintf( L"Failed to initialize COM (%08X)\n", hr); + return 1; + } + + // Process command line + DWORD dwOptions = 0; + SConversion *pConversion = nullptr; + SConversion **ppConversion = &pConversion; + + size_t images = 0; + + for(int iArg = 1; iArg < argc; iArg++) + { + PWSTR pArg = argv[iArg]; + + if(('-' == pArg[0]) || ('/' == pArg[0])) + { + pArg++; + PWSTR pValue; + + for(pValue = pArg; *pValue && (':' != *pValue); pValue++); + + if(*pValue) + *pValue++ = 0; + + DWORD dwOption = LookupByName(pArg, g_pOptions); + + if(!dwOption || (dwOptions & (1 << dwOption))) + { + PrintUsage(); + return 1; + } + + dwOptions |= 1 << dwOption; + + if( (OPT_NOLOGO != dwOption) && (OPT_SEPALPHA != dwOption) && (OPT_USE_DX10 != dwOption) + && (OPT_CUBE != dwOption) && (OPT_VOLUME != dwOption) && (OPT_ARRAY != dwOption) && (OPT_CUBEARRAY != dwOption) ) + { + if(!*pValue) + { + if((iArg + 1 >= argc)) + { + PrintUsage(); + return 1; + } + + iArg++; + pValue = argv[iArg]; + } + } + + switch(dwOption) + { + case OPT_FORMAT: + format = (DXGI_FORMAT) LookupByName(pValue, g_pFormats); + if ( !format ) + { + wprintf( L"Invalid value specified with -f (%s)\n", pValue); + return 1; + } + break; + + case OPT_FILTER: + dwFilter = LookupByName(pValue, g_pFilters); + if ( !dwFilter ) + { + wprintf( L"Invalid value specified with -if (%s)\n", pValue); + return 1; + } + break; + + case OPT_SEPALPHA: + dwFilterOpts |= TEX_FILTER_SEPARATE_ALPHA; + break; + + case OPT_OUTPUTFILE: + wcscpy_s(szOutputFile, MAX_PATH, pValue); + break; + } + } + else + { + SConversion *pConv = new SConversion; + if ( !pConv ) + return 1; + + wcscpy_s(pConv->szSrc, MAX_PATH, pArg); + + pConv->pNext = nullptr; + + *ppConversion = pConv; + ppConversion = &pConv->pNext; + + ++images; + } + } + + if( !pConversion || images < 2 ) + { + wprintf( L"ERROR: Need at least 2 images to assemble\n\n"); + PrintUsage(); + return 0; + } + + switch( dwOptions & ( (1 << OPT_CUBE) | (1 << OPT_VOLUME) | (1 << OPT_ARRAY) | (1 << OPT_CUBEARRAY) ) ) + { + case (1 << OPT_VOLUME): + case (1 << OPT_ARRAY): + break; + + case (1 << OPT_CUBE): + if ( images != 6 ) + { + wprintf( L"ERROR: -cube requires six images to form the faces of the cubemap\n"); + return 1; + } + break; + + case (1 << OPT_CUBEARRAY): + if ( ( images < 6) || ( images % 6 ) != 0 ) + { + wprintf( L"-cubearray requires a multiple of 6 images to form the faces of the cubemaps\n"); + return 1; + } + break; + + default: + wprintf( L"Must use one of: -cube, -volume, -array, or -cubearray\n\n" ); + return 1; + } + + if(~dwOptions & (1 << OPT_NOLOGO)) + PrintLogo(); + + // Convert images + size_t width = 0; + size_t height = 0; + + std::vector loadedImages; + + for( SConversion *pConv = pConversion; pConv; pConv = pConv->pNext ) + { + WCHAR ext[_MAX_EXT]; + WCHAR fname[_MAX_FNAME]; + _wsplitpath_s( pConv->szSrc, nullptr, 0, nullptr, 0, fname, _MAX_FNAME, ext, _MAX_EXT ); + + // Load source image + if( pConv != pConversion ) + wprintf( L"\n"); + else if ( !*szOutputFile ) + { + if ( _wcsicmp( ext, L".dds" ) == 0 ) + { + wprintf( L"ERROR: Need to specify output file via -o\n"); + return 1; + } + + _wmakepath_s( szOutputFile, nullptr, nullptr, fname, L".dds" ); + } + + wprintf( L"reading %s", pConv->szSrc ); + fflush(stdout); + + TexMetadata info; + ScratchImage *image = new ScratchImage; + + if ( !image ) + { + wprintf( L" ERROR: Memory allocation failed\n" ); + goto LError; + } + + if ( _wcsicmp( ext, L".dds" ) == 0 ) + { + hr = LoadFromDDSFile( pConv->szSrc, DDS_FLAGS_NONE, &info, *image ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED (%x)\n", hr); + return 1; + } + + if ( info.arraySize > 1 + || info.depth > 1 + || info.mipLevels > 1 + || info.IsCubemap() ) + { + wprintf( L"ERROR: Can't assemble complex surfaces\n" ); + return 1; + } + } + else if ( _wcsicmp( ext, L".tga" ) == 0 ) + { + hr = LoadFromTGAFile( pConv->szSrc, &info, *image ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED (%x)\n", hr); + return 1; + } + } + else + { + // WIC shares the same filter values for mode and dither + static_assert( WIC_FLAGS_DITHER == TEX_FILTER_DITHER, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + static_assert( WIC_FLAGS_DITHER_DIFFUSION == TEX_FILTER_DITHER_DIFFUSION, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + static_assert( WIC_FLAGS_FILTER_POINT == TEX_FILTER_POINT, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + static_assert( WIC_FLAGS_FILTER_LINEAR == TEX_FILTER_LINEAR, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + static_assert( WIC_FLAGS_FILTER_CUBIC == TEX_FILTER_CUBIC, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + static_assert( WIC_FLAGS_FILTER_FANT == TEX_FILTER_FANT, "WIC_FLAGS_* & TEX_FILTER_* should match" ); + + hr = LoadFromWICFile( pConv->szSrc, dwFilter, &info, *image ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED (%x)\n", hr); + return 1; + } + } + + PrintInfo( info ); + + // Convert texture + fflush(stdout); + + // --- Decompress -------------------------------------------------------------- + if ( IsCompressed( info.format ) ) + { + const Image* img = image->GetImage(0,0,0); + assert( img ); + size_t nimg = image->GetImageCount(); + + ScratchImage *timage = new ScratchImage; + if ( !timage ) + { + wprintf( L" ERROR: Memory allocation failed\n" ); + delete image; + goto LError; + } + + hr = Decompress( img, nimg, info, DXGI_FORMAT_UNKNOWN /* picks good default */, *timage ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED [decompress] (%x)\n", hr); + delete timage; + delete image; + continue; + } + + const TexMetadata& tinfo = timage->GetMetadata(); + + info.format = tinfo.format; + + assert( info.width == tinfo.width ); + assert( info.height == tinfo.height ); + assert( info.depth == tinfo.depth ); + assert( info.arraySize == tinfo.arraySize ); + assert( info.mipLevels == tinfo.mipLevels ); + assert( info.miscFlags == tinfo.miscFlags ); + assert( info.miscFlags2 == tinfo.miscFlags2 ); + assert( info.dimension == tinfo.dimension ); + + delete image; + image = timage; + } + + // --- Resize ------------------------------------------------------------------ + if ( !width && !height ) + { + width = info.width; + height = info.height; + } + else if ( info.width != width || info.height != height ) + { + ScratchImage *timage = new ScratchImage; + if ( !timage ) + { + wprintf( L" ERROR: Memory allocation failed\n" ); + delete image; + goto LError; + } + + hr = Resize( image->GetImages(), image->GetImageCount(), image->GetMetadata(), width, height, dwFilter | dwFilterOpts, *timage ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED [resize] (%x)\n", hr); + delete timage; + delete image; + goto LError; + } + + const TexMetadata& tinfo = timage->GetMetadata(); + + assert( tinfo.width == width && tinfo.height == height && tinfo.mipLevels == 1 ); + info.width = tinfo.width; + info.height = tinfo.height; + info.mipLevels = 1; + + assert( info.depth == tinfo.depth ); + assert( info.arraySize == tinfo.arraySize ); + assert( info.miscFlags == tinfo.miscFlags ); + assert( info.miscFlags2 == tinfo.miscFlags2 ); + assert( info.format == tinfo.format ); + assert( info.dimension == tinfo.dimension ); + + delete image; + image = timage; + } + + // --- Convert ----------------------------------------------------------------- + if ( format == DXGI_FORMAT_UNKNOWN ) + { + format = info.format; + } + else if ( info.format != format && !IsCompressed( format ) ) + { + ScratchImage *timage = new ScratchImage; + if ( !timage ) + { + wprintf( L" ERROR: Memory allocation failed\n" ); + delete image; + goto LError; + } + + hr = Convert( image->GetImages(), image->GetImageCount(), image->GetMetadata(), format, dwFilter | dwFilterOpts, 0.5f, *timage ); + if ( FAILED(hr) ) + { + wprintf( L" FAILED [convert] (%x)\n", hr); + delete timage; + delete image; + goto LError; + } + + const TexMetadata& tinfo = timage->GetMetadata(); + + assert( tinfo.format == format ); + info.format = tinfo.format; + + assert( info.width == tinfo.width ); + assert( info.height == tinfo.height ); + assert( info.depth == tinfo.depth ); + assert( info.arraySize == tinfo.arraySize ); + assert( info.mipLevels == tinfo.mipLevels ); + assert( info.miscFlags == tinfo.miscFlags ); + assert( info.miscFlags2 == tinfo.miscFlags2 ); + assert( info.dimension == tinfo.dimension ); + + delete image; + image = timage; + } + + loadedImages.push_back( image ); + } + + // --- Create result --------------------------------------------------------------- + { + std::vector imageArray; + imageArray.reserve( images ); + + for( auto it = loadedImages.cbegin(); it != loadedImages.cend(); ++it ) + { + const Image* img = (*it)->GetImage(0,0,0); + assert( img != 0 ); + imageArray.push_back( *img ); + } + + ScratchImage result; + switch( dwOptions & ( (1 << OPT_CUBE) | (1 << OPT_VOLUME) | (1 << OPT_ARRAY) | (1 << OPT_CUBEARRAY) ) ) + { + case (1 << OPT_VOLUME): + hr = result.Initialize3DFromImages( &imageArray[0], imageArray.size() ); + break; + + case (1 << OPT_ARRAY): + hr = result.InitializeArrayFromImages( &imageArray[0], imageArray.size(), (dwOptions & (1 << OPT_USE_DX10)) != 0 ); + break; + + case (1 << OPT_CUBE): + case (1 << OPT_CUBEARRAY): + hr = result.InitializeCubeFromImages( &imageArray[0], imageArray.size() ); + break; + } + + if ( FAILED(hr ) ) + { + wprintf( L"FAILED building result image (%x)\n", hr); + goto LError; + } + + + // Write texture + wprintf( L"\nWriting %s ", szOutputFile); + PrintInfo( result.GetMetadata() ); + wprintf( L"\n" ); + fflush(stdout); + + hr = SaveToDDSFile( result.GetImages(), result.GetImageCount(), result.GetMetadata(), + (dwOptions & (1 << OPT_USE_DX10) ) ? (DDS_FLAGS_FORCE_DX10_EXT|DDS_FLAGS_FORCE_DX10_EXT_MISC2) : DDS_FLAGS_NONE, + szOutputFile ); + if(FAILED(hr)) + { + wprintf( L"\nFAILED (%x)\n", hr); + return 1; + } + wprintf( L"\n"); + } + + nReturn = 0; + + goto LDone; + +LError: + nReturn = 1; + +LDone: + + while(pConversion) + { + auto pConv = pConversion; + pConversion = pConversion->pNext; + delete pConv; + } + + return nReturn; +} diff --git a/Texassemble/texassemble.rc b/Texassemble/texassemble.rc new file mode 100644 index 0000000..ea1409e --- /dev/null +++ b/Texassemble/texassemble.rc @@ -0,0 +1,76 @@ +// Microsoft Visual C++ generated resource script. +// +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define IDC_STATIC -1 +#include + + + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_MAIN_ICON ICON "directx.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define IDC_STATIC -1\r\n" + "#include \r\n" + "\r\n" + "\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED +