我只想知道 Directx 12 API 从图像创建纹理。
对于 DX11,它是 D3DX11CreateShaderResourceViewFromFile,对于 DX9,它是 D3DXCreateTextureFromFileEx,对于 DX12?
我只想知道 Directx 12 API 从图像创建纹理。
对于 DX11,它是 D3DX11CreateShaderResourceViewFromFile,对于 DX9,它是 D3DXCreateTextureFromFileEx,对于 DX12?
现在情况稍微好一点了。微软为 DX12 重写了他们的 DDSTextureLoader,并将其作为 MiniEngine 的一部分发布在 GitHub https://github.com/Microsoft/DirectX-Graphics-Samples/blob/master/MiniEngine/Core/DDSTextureLoader.cpp
您可能还想看看我的衍生作品,它旨在使 DDSTextureLoader 在 MiniEngine 之外更容易使用。 https://github.com/ClemensX/ShadedPath12/blob/master/ShadedPath12/ShadedPath12/DDSTextureLoader.cpp
我将这个加载器用于我所有的纹理文件。它可以很好地解析 DDS (DirectDrawSurface) 文件格式,包括 mipmap。
Direct3D 12 的官方“实用程序标头”是d3dx12.h。它是一个内联头文件,没有 DLL 或静态库,因此提供的功能仅限于真正的帮助程序。它没有等价于D3DX11CreateShaderResourceViewFromFile
。它不作为 Windows SDK 的一部分包含在内,而是在 MIT 许可下提供,您只需将其复制到您的项目中——它包含在各种 DirectX 12 Visual Studio 模板中,包括我的Direct3D 游戏模板。
您可以使用DirectX Tool Kit for DirectX 12DDSTextureLoader
中提供的和WICTextureLoader
模块来获取 Direct3D 12 的一些即用型纹理加载器。请参阅本教程课程。
值得注意的是,D3DX9、D3DX10 和 D3DX11 都已弃用,并且仅作为MSDN的旧版 DirectX SDK 的一部分提供。换句话说,您不应该使用
D3DX11CreateShaderResourceViewFromFile
Direct3D 11 代码。有关D3DX9/10/11 替代品的完整列表,请参阅此博客文章。TL;DR:在DirectX 11 的 DirectX 工具包中使用DDSTextureLoader
和。WICTextureLoader
没有一个。
Direct3D 12 是一个低级 API。一个非常底层的 API。它不具备仅从文件名从整块布料中创建纹理的便捷功能。如果你想创建一个纹理,你必须为它工作。您必须加载文件,确定您想要的格式,通过询问系统需要多少内存来为其分配内存,然后通过一系列复杂的步骤将加载的图像传输到该内存中。
谷歌一直在参考这个主题来解决有关 DX-12 和纹理的问题,所以让我们更新一下。
1. 托管
如果您坚持“托管”,请查看最新版本 SharpDX (2019) 的示例
https://github.com/discosultan/dx12-game-programming
它为 DX-12 native 提供了一个 C# 接口并且它可以工作,有很多非常好的示例,包括纹理,
.. 但恕我直言,继续依赖旧的SharpDX 库并不是非常可取的,因为该库不再维护。我不能为 C# atm 提供好的替代方案,我不是 Unity 和 Vulkan 方面的专家。
2. 非托管
正如本主题前面提到的,DX-12 有所改进。他们仍然这样做。在这里查看 Chuck Walbourn 的当前样本,
https://github.com/microsoft/Xbox-ATG-Samples
对于直接 PC/x64,你会发现这个,
https://github.com/microsoft/Xbox-ATG-Samples/tree/master/PCSamples
对于 PC/UWP,你会发现这个,
https://github.com/microsoft/Xbox-ATG-Samples/tree/master/UWPSamples
这些是非常好的 x64 非托管 C++ 14.0 示例,将 DirectXtk 用于 DirectX-12。Master的最后一次更新是3个月前。涉及纹理的示例,还有直位图纹理
这些项目是为 VS2017 配置的,但是在 VS2019 中加载它们时它们会立即转换,并且它们可以编译和运行。
其他来源
DX-12 上的一个已知交换机是github 上的 vinjn,他的页面是
http://www.vinjn.com/awesome-d3d12/
从那里导航以研究文章并找到各种其他示例。
3dgep.com 上有一个关于 DX12 纹理主题的教程,即
https://www.3dgep.com/learning-directx-12-4/
.. 伴随着