从DX11.1文件中加载纹理?

时间:2014-01-02 00:36:25

标签: directx textures directx-11 texture2d sharpdx

在11.1及更高版本中,Microsoft删除了许多用于加载纹理的帮助程序(fromfile,fromstream等)。

我正在尝试将代码移植到11.2,除了这一行,一切正常:

var texture = Texture2D.FromFile<Texture2D>(device, @"C:\Texture.png");

现在所有我能找到的指导告诉我使用WIC,但我似乎无法找到任何为我提供几乎多功能的Texture2D(我发现的所有样本都需要传递像素格式等等) )。

我正在寻找一种可以让我加载文件的解决方案(不需要事先知道它们的格式或布局),并且像FromFile允许的那样从中获取Texture2D。有没有这样的甚至是关闭?我假设必须有“某些东西”,因为如果不是多余的话,他们不会弃用这样的功能。

非常感谢任何帮助。

编辑:我也想避免使用SharpDX.Toolkit,我正在寻找原始的DirectX / WIC等解决方案,因为我不想在Toolkit上添加依赖项。然而,我完全可以将任何.net Framework 4.0或4.5程序集添加为依赖项。

2 个答案:

答案 0 :(得分:3)

除了自己编写整个WIC互操作之外,没有简单的解决方案。即使您不想使用Toolkit,也可以使用源代码,负责解码图像的类WicHelper.cs非常容易适应。

如果你想要一个不能处理所有WIC案例的非常简单的解决方案(格式映射等等),你可以查看TextureLoader.cs

答案 1 :(得分:1)

如果您同时拥有Texture2D和WPF BitmapImage,这样的内容会有所帮助:

  var map = device.ImmediateContext.MapSubresource(texture, 0, MapMode.WriteDiscard, MapFlags.None);
  bitmap.CopyPixels(Int32Rect.Empty, map.DataPointer, bitmap.PixelWidth * bitmap.PixelHeight * 4, bitmap.PixelWidth * 4);
  device.ImmediateContext.UnmapSubresource(source, 0);

你提到的功能可能在引擎盖下非常相似。

如果您不确定位图是否为Bgra,则必须先将其转换。