在DX 12 VC ++中从图像创建纹理

时间:2015-12-28 13:35:55

标签: c++ visual-c++ directx managed-directx direct3d12

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

DX11是D3DX11CreateShaderResourceViewFromFile,DX9是D3DXCreateTextureFromFileEx和DX12?

4 个答案:

答案 0 :(得分:3)

现在事情好一点了。微软为DX12重写了他们的DDSTextureLoader,并在GitHub上将其作为MiniEngine的一部分发布 https://github.com/Microsoft/DirectX-Graphics-Samples/blob/master/MiniEngine/Core/DDSTextureLoader.cpp

您还可以查看我的衍生作品,该作品旨在使MiniEngine之外的DDSTextureLoader更容易使用。 https://github.com/ClemensX/ShadedPath12/blob/master/ShadedPath12/ShadedPath12/DDSTextureLoader.cpp

我将这个加载器用于所有纹理文件。它很好地解析了DDS(DirectDrawSurface)文件格式,包括mipmap。

答案 1 :(得分:1)

没有。

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

答案 2 :(得分:1)

Direct3D 12的官方“实用程序标题”为d3dx12.h。它是一个内联头,没有DLL或静态库,因此提供的功能仅限于真正的帮助程序。它没有等同于D3DX11CreateShaderResourceViewFromFile。它不作为Windows SDK的一部分包含在内,而是在MIT许可下提供,您只需将其复制到项目中 - 它包含在各种DirectX 12 Visual Studio模板中,包括我的Direct3D Game templates

您可以使用DirectX Tool Kit for DirectX 12中提供的DDSTextureLoaderWICTextureLoader模块为Direct3D 12提供一些现成的纹理加载器。请参阅this tutorial lesson

  

值得注意的是,D3DX9,D3DX10和D3DX11均已弃用,仅作为旧版{3}}的旧版DirectX SDK的一部分提供。换句话说,您不应该将D3DX11CreateShaderResourceViewFromFile用于Direct3D 11代码。有关D3DX9 / 10/11替换的完整列表,请参阅MSDN TL; DR:this blog post中使用DDSTextureLoaderWICTextureLoader

答案 3 :(得分:0)

关于 DX-12 和纹理的问题,Google 一直在参考这个主题,所以让我们更新。

1.管理

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

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

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

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

...但恕我直言,继续依赖好老 SharpDX 库并不是明智之举,因为该库是not maintained anymore。我无法为 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 上的一个已知总机是 vinjn on github,他的页面是

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

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

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

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

...伴随

https://github.com/jpvanoosten/LearningDirectX12