-1

我只想知道 Directx 12 API 从图像创建纹理。

对于 DX11,它是 D3DX11CreateShaderResourceViewFromFile,对于 DX9,它是 D3DXCreateTextureFromFileEx,对于 DX12?

4

4 回答 4

3

现在情况稍微好一点了。微软为 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。

于 2016-02-08T13:32:20.210 回答
1

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 的一部分提供。换句话说,您不应该使用D3DX11CreateShaderResourceViewFromFileDirect3D 11 代码。有关D3DX9/10/11 替代品的完整列表,请参阅此博客文章。TL;DR:DirectX 11 的 DirectX 工具包中使用DDSTextureLoader和。WICTextureLoader

于 2016-07-26T17:41:24.760 回答
1

没有一个。

Direct3D 12 是一个低级 API。一个非常底层的 API。它不具备仅从文件名从整块布料中创建纹理的便捷功能。如果你想创建一个纹理,你必须为它工作。您必须加载文件,确定您想要的格式,通过询问系统需要多少内存来为其分配内存,然后通过一系列复杂的步骤将加载的图像传输到该内存中。

于 2015-12-28T14:43:23.070 回答
0

谷歌一直在参考这个主题来解决有关 DX-12 和纹理的问题,所以让我们更新一下。

1. 托管

如果您坚持“托管”,请查看最新版本 SharpDX (2019) 的示例

https://github.com/discosultan/dx12-game-programming

它为 DX-12 native 提供了一个 C# 接口并且它可以工作,有很多非常好的示例,包括纹理,

  • 09-Crate 加载单个 DDS 纹理并将其显示在立方体上
  • 09-TexColumns 显示各种形状的基本 UV 坐标操作

.. 但恕我直言,继续依赖旧的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个月前。涉及纹理的示例,还有直位图纹理

  • SimpleTexturePC12 加载单个 .jpg 纹理并将其显示在前视图中
  • DirectXTKSimpleSample12 加载多个纹理
  • Graphics\VideoTexturePC12 显示从 .mp4 视频读取的动态纹理

这些项目是为 VS2017 配置的,但是在 VS2019 中加载它们时它们会立即转换,并且它们可以编译和运行。

其他来源

DX-12 上的一个已知交换机是github 上的 vinjn,他的页面是

http://www.vinjn.com/awesome-d3d12/

从那里导航以研究文章并找到各种其他示例。

3dgep.com 上有一个关于 DX12 纹理主题的教程,即

https://www.3dgep.com/learning-directx-12-4/

.. 伴随着

https://github.com/jpvanoosten/LearningDirectX12

于 2021-05-21T23:18:53.093 回答