diff --git a/deps/TextureWrappers/Release/linux-x64/DxtWrapper.so b/deps/TextureWrappers/Release/linux-x64/DxtWrapper.so new file mode 100755 index 0000000000..ba9dcf7e95 --- /dev/null +++ b/deps/TextureWrappers/Release/linux-x64/DxtWrapper.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccbef484862a90f89c08cbf247bd4e6ba3c126637b6e08e902512427ba6e44e2 +size 2389936 diff --git a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/.gitignore b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/.gitignore new file mode 100644 index 0000000000..378eac25d3 --- /dev/null +++ b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/.gitignore @@ -0,0 +1 @@ +build diff --git a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/CMakeLists.txt b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/CMakeLists.txt new file mode 100644 index 0000000000..cc3e8cfcea --- /dev/null +++ b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/CMakeLists.txt @@ -0,0 +1,12 @@ +project(DxtWrapper) +cmake_minimum_required(VERSION 3.10) +file(GLOB SRCS *.cpp *.h) + +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../../../../deps/TextureWrappers/Release/linux-x64) + +find_package(directxtex CONFIG REQUIRED) + +add_library(${PROJECT_NAME} SHARED ${SRCS} ) +set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") + +target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft::DirectXTex) \ No newline at end of file diff --git a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/build.ps1 b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/build.ps1 new file mode 100644 index 0000000000..c4242dcca0 --- /dev/null +++ b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/build.ps1 @@ -0,0 +1,16 @@ +# Make sure to install package required packages : vcpkg install directxtex + +param ( + [string]$vcpkg_dir +) + +if(!$vcpkg_dir) +{ + Write-Error "Please provide vpckg directory path" + return; +} + +cmake -B "build" -S . -DCMAKE_TOOLCHAIN_FILE="$vcpkg_dir/scripts/buildsystems/vcpkg.cmake"; +cd build; +make; +cd ..; \ No newline at end of file diff --git a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.cpp b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.cpp index fa83571ccd..8914e303b9 100644 --- a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.cpp +++ b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.cpp @@ -1,9 +1,10 @@ // Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. #include "dxt_wrapper.h" +#include // Utilities functions -void dxtComputePitch( DXGI_FORMAT fmt, int width, int height, int& rowPitch, int& slicePitch, int flags = DirectX::CP_FLAGS_NONE ) +void dxtComputePitch( DXGI_FORMAT fmt, int width, int height, int& rowPitch, int& slicePitch, DirectX::CP_FLAGS flags = DirectX::CP_FLAGS_NONE ) { size_t rowPitchT, slicePitchT; DirectX::ComputePitch(fmt, width, height, rowPitchT, slicePitchT, flags); @@ -11,24 +12,35 @@ void dxtComputePitch( DXGI_FORMAT fmt, int width, int height, int& rowPitch, int slicePitch = slicePitchT; } +// For handling different encodings +const wchar_t* narrowToWideString(const char* szFile) +{ + std::string nstr(szFile); + std::wstring wstr = std::wstring(nstr.begin(), nstr.end()); + wchar_t* filePath = new wchar_t[wstr.size() + 1]; + std::copy(wstr.begin(), wstr.end(), filePath); + filePath[wstr.size()] = L'\0'; // Null-terminate the wide string + return filePath; +} + bool dxtIsCompressed(DXGI_FORMAT fmt) { return DirectX::IsCompressed(fmt); } -HRESULT dxtConvert( const DirectX::Image& srcImage, DXGI_FORMAT format, int filter, float threshold, DirectX::ScratchImage& cImage ) +HRESULT dxtConvert( const DirectX::Image& srcImage, DXGI_FORMAT format, DirectX::TEX_FILTER_FLAGS filter, float threshold, DirectX::ScratchImage& cImage ) { return DirectX::Convert(srcImage, format, filter, threshold, cImage); } -HRESULT dxtConvertArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, int filter, float threshold, DirectX::ScratchImage& cImage ) +HRESULT dxtConvertArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, DirectX::TEX_FILTER_FLAGS filter, float threshold, DirectX::ScratchImage& cImage ) { return DirectX::Convert(srcImages, nimages, metadata, format, filter, threshold, cImage); } -HRESULT dxtCompress( const DirectX::Image& srcImage, DXGI_FORMAT format, int compress, float alphaRef, DirectX::ScratchImage& cImage ) +HRESULT dxtCompress( const DirectX::Image& srcImage, DXGI_FORMAT format, DirectX::TEX_COMPRESS_FLAGS compress, float alphaRef, DirectX::ScratchImage& cImage ) { return DirectX::Compress(srcImage, format, compress, alphaRef, cImage); } -HRESULT dxtCompressArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, int compress, float alphaRef, DirectX::ScratchImage& cImages ) +HRESULT dxtCompressArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, DirectX::TEX_COMPRESS_FLAGS compress, float alphaRef, DirectX::ScratchImage& cImages ) { return DirectX::Compress(srcImages, nimages, metadata, format, compress, alphaRef, cImages); } @@ -43,66 +55,74 @@ HRESULT dxtDecompressArray( const DirectX::Image* cImages, int nimages, const Di return DirectX::Decompress(cImages, nimages, metadata, format, images); } -HRESULT dxtGenerateMipMaps( const DirectX::Image& baseImage, int filter, int levels, DirectX::ScratchImage& mipChain, bool allow1D = false) +HRESULT dxtGenerateMipMaps( const DirectX::Image& baseImage, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain, bool allow1D = false) { return DirectX::GenerateMipMaps(baseImage, filter, levels, mipChain, allow1D); } -HRESULT dxtGenerateMipMapsArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int filter, int levels, DirectX::ScratchImage& mipChain ) +HRESULT dxtGenerateMipMapsArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ) { return DirectX::GenerateMipMaps(srcImages, nimages, metadata, filter, levels, mipChain); } -HRESULT dxtGenerateMipMaps3D( const DirectX::Image* baseImages, int depth, int filter, int levels, DirectX::ScratchImage& mipChain ) +HRESULT dxtGenerateMipMaps3D( const DirectX::Image* baseImages, int depth, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ) { return DirectX::GenerateMipMaps3D(baseImages, depth, filter, levels, mipChain); } -HRESULT dxtGenerateMipMaps3DArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int filter, int levels, DirectX::ScratchImage& mipChain ) +HRESULT dxtGenerateMipMaps3DArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ) { return DirectX::GenerateMipMaps3D(srcImages, nimages, metadata, filter, levels, mipChain); } -HRESULT dxtResize(const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int width, int height, int filter, DirectX::ScratchImage& result ) +HRESULT dxtResize( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int width, int height, DirectX::TEX_FILTER_FLAGS filter, DirectX::ScratchImage& result ) { return DirectX::Resize(srcImages, nimages, metadata, width, height, filter, result); } -HRESULT dxtComputeNormalMap( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int flags, float amplitude, DXGI_FORMAT format, DirectX::ScratchImage& normalMaps ) +HRESULT dxtComputeNormalMap( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::CNMAP_FLAGS flags, float amplitude, DXGI_FORMAT format, DirectX::ScratchImage& normalMaps ) { return DirectX::ComputeNormalMap(srcImages, nimages, metadata, flags, amplitude, format, normalMaps); } -HRESULT dxtPremultiplyAlpha( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int flags, DirectX::ScratchImage& result ) +HRESULT dxtPremultiplyAlpha( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_PMALPHA_FLAGS flags, DirectX::ScratchImage& result ) { return DirectX::PremultiplyAlpha(srcImages, nimages, metadata, flags, result); } // I/O functions -HRESULT dxtLoadDDSFile(LPCWSTR szFile, int flags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image) +HRESULT dxtLoadDDSFile( const char* szFile, DirectX::DDS_FLAGS flags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image) { - return DirectX::LoadFromDDSFile(szFile, flags, metadata, image); + const wchar_t* filePath = narrowToWideString(szFile); + auto result = DirectX::LoadFromDDSFile(filePath, flags, metadata, image); + delete[] filePath; + return result; } -HRESULT dxtLoadTGAFile(LPCWSTR szFile, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image) -{ - return DirectX::LoadFromTGAFile(szFile, metadata, image); -} -HRESULT dxtLoadWICFile(LPCWSTR szFile, int flags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image) +HRESULT dxtLoadTGAFile( const char* szFile, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image) { - return DirectX::LoadFromWICFile(szFile, flags, metadata, image); + const wchar_t* filePath = narrowToWideString(szFile); + auto result = DirectX::LoadFromTGAFile(filePath, metadata, image); + delete[] filePath; + return result; } -HRESULT dxtSaveToDDSFile( const DirectX::Image& image, int flags, LPCWSTR szFile ) +HRESULT dxtSaveToDDSFile( const DirectX::Image& image, DirectX::DDS_FLAGS flags, const char* szFile ) { - return DirectX::SaveToDDSFile(image, flags, szFile); + const wchar_t* filePath = narrowToWideString(szFile); + auto result = DirectX::SaveToDDSFile(image, flags, filePath); + delete[] filePath; + return result; } -HRESULT dxtSaveToDDSFileArray( const DirectX::Image* images, int nimages, const DirectX::TexMetadata& metadata, int flags, LPCWSTR szFile ) +HRESULT dxtSaveToDDSFileArray( const DirectX::Image* images, int nimages, const DirectX::TexMetadata& metadata, DirectX::DDS_FLAGS flags, const char* szFile ) { - return DirectX::SaveToDDSFile(images, nimages, metadata, flags, szFile); + const wchar_t* filePath = narrowToWideString(szFile); + auto result = DirectX::SaveToDDSFile(images, nimages, metadata, flags, filePath); + delete[] filePath; + return result; } // Scratch Image diff --git a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.h b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.h index 0f8eb9004b..8d45521650 100644 --- a/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.h +++ b/sources/tools/Stride.TextureConverter.Wrappers/DxtWrapper/dxt_wrapper.h @@ -3,35 +3,43 @@ #ifndef DXT_WRAPPER_H #define DXT_WRAPPER_H +#ifdef _MSC_VER #define DXT_API __declspec(dllexport) +#else +#if __GNUC__ >= 4 + #define DXT_API __attribute__ ((visibility("default"))) +#else + #define DXT_API +#endif +#endif #include "DirectXTex.h" +#include extern "C" { // Utilities functions - DXT_API void dxtComputePitch( DXGI_FORMAT fmt, int width, int height, int& rowPitch, int& slicePitch, int flags ); + DXT_API void dxtComputePitch( DXGI_FORMAT fmt, int width, int height, int& rowPitch, int& slicePitch, DirectX::CP_FLAGS flags ); DXT_API bool dxtIsCompressed(DXGI_FORMAT fmt); - DXT_API HRESULT dxtConvert( const DirectX::Image& srcImage, DXGI_FORMAT format, int filter, float threshold, DirectX::ScratchImage& cImage ); - DXT_API HRESULT dxtConvertArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, int filter, float threshold, DirectX::ScratchImage& cImage ); - DXT_API HRESULT dxtCompress( const DirectX::Image& srcImage, DXGI_FORMAT format, int compress, float alphaRef, DirectX::ScratchImage& cImage ); - DXT_API HRESULT dxtCompressArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, int compress, float alphaRef, DirectX::ScratchImage& cImages ); - DXT_API HRESULT dxtDecompress( const DirectX::Image& cImage, DXGI_FORMAT format, DirectX::ScratchImage& image ); + DXT_API HRESULT dxtConvert( const DirectX::Image& srcImage, DXGI_FORMAT format, DirectX::TEX_FILTER_FLAGS filter, float threshold, DirectX::ScratchImage& cImage ); + DXT_API HRESULT dxtConvertArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, DirectX::TEX_FILTER_FLAGS filter, float threshold, DirectX::ScratchImage& cImage ); + DXT_API HRESULT dxtCompress( const DirectX::Image& srcImage, DXGI_FORMAT format, DirectX::TEX_COMPRESS_FLAGS compress, float alphaRef, DirectX::ScratchImage& cImage ); + DXT_API HRESULT dxtCompressArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, DirectX::TEX_COMPRESS_FLAGS compress, float alphaRef, DirectX::ScratchImage& cImages ); + DXT_API HRESULT dxtDecompress( const DirectX::Image& cImage, DXGI_FORMAT format, DirectX::ScratchImage& image ); DXT_API HRESULT dxtDecompressArray( const DirectX::Image* cImages, int nimages, const DirectX::TexMetadata& metadata, DXGI_FORMAT format, DirectX::ScratchImage& images ); - DXT_API HRESULT dxtGenerateMipMaps( const DirectX::Image& baseImage, int filter, int levels, DirectX::ScratchImage& mipChain, bool allow1D); - DXT_API HRESULT dxtGenerateMipMapsArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int filter, int levels, DirectX::ScratchImage& mipChain ); - DXT_API HRESULT dxtGenerateMipMaps3D( const DirectX::Image* baseImages, int depth, int filter, int levels, DirectX::ScratchImage& mipChain ); - DXT_API HRESULT dxtGenerateMipMaps3DArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int filter, int levels, DirectX::ScratchImage& mipChain ); - DXT_API HRESULT dxtResize(const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int width, int height, int filter, DirectX::ScratchImage& result ); - DXT_API HRESULT dxtComputeNormalMap( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int flags, float amplitude, DXGI_FORMAT format, DirectX::ScratchImage& normalMaps ); - DXT_API HRESULT dxtPremultiplyAlpha( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int flags, DirectX::ScratchImage& result ); + DXT_API HRESULT dxtGenerateMipMaps( const DirectX::Image& baseImage, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain, bool allow1D); + DXT_API HRESULT dxtGenerateMipMapsArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ); + DXT_API HRESULT dxtGenerateMipMaps3D( const DirectX::Image* baseImages, int depth, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ); + DXT_API HRESULT dxtGenerateMipMaps3DArray( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_FILTER_FLAGS filter, int levels, DirectX::ScratchImage& mipChain ); + DXT_API HRESULT dxtResize(const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, int width, int height, DirectX::TEX_FILTER_FLAGS filter, DirectX::ScratchImage& result ); + DXT_API HRESULT dxtComputeNormalMap( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::CNMAP_FLAGS flags, float amplitude, DXGI_FORMAT format, DirectX::ScratchImage& normalMaps ); + DXT_API HRESULT dxtPremultiplyAlpha( const DirectX::Image* srcImages, int nimages, const DirectX::TexMetadata& metadata, DirectX::TEX_PMALPHA_FLAGS flags, DirectX::ScratchImage& result ); // I/O functions - DXT_API HRESULT dxtLoadTGAFile(LPCWSTR szFile, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image); - DXT_API HRESULT dxtLoadWICFile(LPCWSTR szFile, int wicflags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image); - DXT_API HRESULT dxtLoadDDSFile(LPCWSTR szFile, int ddsflags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image); - DXT_API HRESULT dxtSaveToDDSFile( const DirectX::Image& image, int flags, LPCWSTR szFile ); - DXT_API HRESULT dxtSaveToDDSFileArray( const DirectX::Image* images, int nimages, const DirectX::TexMetadata& metadata, int flags, LPCWSTR szFile ); + DXT_API HRESULT dxtLoadTGAFile(const char* szFile, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image); + DXT_API HRESULT dxtLoadDDSFile(const char* szFile, DirectX::DDS_FLAGS flags, DirectX::TexMetadata* metadata, DirectX::ScratchImage& image); + DXT_API HRESULT dxtSaveToDDSFile( const DirectX::Image& image, DirectX::DDS_FLAGS flags, const char* szFile ); + DXT_API HRESULT dxtSaveToDDSFileArray( const DirectX::Image* images, int nimages, const DirectX::TexMetadata& metadata, DirectX::DDS_FLAGS flags, const char* szFile ); // Scratch Image DXT_API DirectX::ScratchImage * dxtCreateScratchImage(); diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/DxtNetWrapper.cs b/sources/tools/Stride.TextureConverter/Backend/Wrappers/DxtNetWrapper.cs index dcbf5de6c9..257c56ccc8 100644 --- a/sources/tools/Stride.TextureConverter/Backend/Wrappers/DxtNetWrapper.cs +++ b/sources/tools/Stride.TextureConverter/Backend/Wrappers/DxtNetWrapper.cs @@ -516,13 +516,10 @@ internal class Utilities private extern static void dxtComputePitch(DXGI_FORMAT fmt, int width, int height, out int rowPitch, out int slicePitch, CP_FLAGS flags); [DllImport("DxtWrapper", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - private extern static uint dxtLoadDDSFile(String filePath, DDS_FLAGS flags, out TexMetadata metadata, IntPtr image); + private extern static uint dxtLoadDDSFile(string filePath, DDS_FLAGS flags, out TexMetadata metadata, IntPtr image); [DllImport("DxtWrapper", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - private extern static uint dxtLoadTGAFile(String filePath, out TexMetadata metadata, IntPtr image); - - [DllImport("DxtWrapper", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] - private extern static uint dxtLoadWICFile(String filePath, WIC_FLAGS flags, out TexMetadata metadata, IntPtr image); + private extern static uint dxtLoadTGAFile(string filePath, out TexMetadata metadata, IntPtr image); [DllImport("DxtWrapper", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity] private extern static bool dxtIsCompressed(DXGI_FORMAT fmt); @@ -577,21 +574,16 @@ public static void ComputePitch(DXGI_FORMAT fmt, int width, int height, out int dxtComputePitch(fmt, width, height, out rowPitch, out slicePitch, flags); } - public static HRESULT LoadDDSFile(String filePath, DDS_FLAGS flags, out TexMetadata metadata, ScratchImage image) + public static HRESULT LoadDDSFile(string filePath, DDS_FLAGS flags, out TexMetadata metadata, ScratchImage image) { return HandleHRESULT(dxtLoadDDSFile(filePath, flags, out metadata, image.ptr)); } - public static HRESULT LoadTGAFile(String filePath, out TexMetadata metadata, ScratchImage image) + public static HRESULT LoadTGAFile(string filePath, out TexMetadata metadata, ScratchImage image) { return HandleHRESULT(dxtLoadTGAFile(filePath, out metadata, image.ptr)); } - public static HRESULT LoadWICFile(String filePath, WIC_FLAGS flags, out TexMetadata metadata, ScratchImage image) - { - return HandleHRESULT(dxtLoadWICFile(filePath, flags, out metadata, image.ptr)); - } - public static HRESULT SaveToDDSFile(ref DxtImage dxtImage, DDS_FLAGS flags, string szFile) { return HandleHRESULT(dxtSaveToDDSFile(ref dxtImage, flags, szFile)); diff --git a/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj b/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj index a751182c83..f016c74287 100644 --- a/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj +++ b/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj @@ -16,7 +16,7 @@ runtimes\%(RecursiveDir)native\%(Filename)%(Extension) - + runtimes\%(RecursiveDir)native\%(Filename)%(Extension)