【问题标题】:UWP CreateDDSTextureFromFile unable to loard .dds fileUWP CreateDDSTextureFromFile 无法加载 .dds 文件
【发布时间】:2018-09-04 22:23:32
【问题描述】:

我目前正在尝试将 .dds 文件添加到多维数据集上,但在加载文件时遇到了问题。

我正在使用来自 nuget 的 DirectXTK 库,更具体地说是 DDSTextureLoader。

CreateDDSTextureFromFile(m_deviceResources->GetD3DDevice(), L"..\Assests\rocks.DDS", nullptr, &cubeStoneRV);

出现的错误:

错误 LNK2019 未解析的外部符号 __imp__CreateFileW@28 在函数“long __cdecl DirectX::LoaderHelpers::LoadTextureDataFromFile(wchar_t const *,class std::unique_ptr > &,struct DirectX::DDS_HEADER const * *,unsigned char const * *,unsigned int *)" (?LoadTextureDataFromFile@LoaderHelpers@DirectX@@YAJPB_WAAV?$unique_ptr@$$BY0A@EU?$default_delete@$$BY0A@E@std@@@std@@PAPBUDDS_HEADER@2@PAPBEPAI@Z )

我认为问题在于尝试获取 D3DDevice,但我尝试的一切都没有奏效。

工作从基本的 UWP DirectX11 模板和 Sample3DSceneRenderer/phc 外部开始,没有其他任何变化。

编辑:如果有更好的方法,我愿意征求意见/建议

【问题讨论】:

  • 仔细检查 MSDN,但我认为您不能从 UWP 中的文件加载纹理。我认为您必须将其编译到二进制文件的资源中。
  • @Mgetz 唯一的限制是如果您尝试从包外部加载文件,例如从需要使用文件代理的用户的文档或图片库中加载文件。您仍然可以在此类文件上使用 DDSTextureLoader,但必须先将其复制到临时位置。详情请参阅wiki

标签: c++ uwp directx-11


【解决方案1】:

对于 UWP,您不能使用 CreateFile。您必须使用CreateFile2

    #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
        ScopedHandle hFile(safe_handle(CreateFile2(fileName,
                           GENERIC_READ,
                           FILE_SHARE_READ,
                           OPEN_EXISTING,
                           nullptr)));
    #else
        ScopedHandle hFile(safe_handle(CreateFileW(fileName,
                           GENERIC_READ,
                           FILE_SHARE_READ,
                           nullptr,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           nullptr)));
    #endif

我已经在DirectX Tool Kit 中执行此操作,但您需要使用库的正确构建配置。您可能使用的是desktop NuGet 版本,而不是UWP NuGet 版本。

【讨论】:

  • 感谢提醒,我确实使用的是桌面版本而不是 UWP,更改它让我再次编译!
猜你喜欢
  • 2016-08-30
  • 2015-03-13
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多