如何在SharpDX Toolkit中创建MipMaps(2.5)

时间:2013-11-07 17:54:44

标签: c# toolkit texture2d sharpdx mipmaps

我正在使用SharpDX-Toolkit,无法在Texture2D上创建mimaps。如果我通过内容管理器加载纹理并尝试调用GenerateMipMaps(),我会收到NotSupportedException:

  

无法为此纹理生成mipmap(必须为RenderTarget,ShaderResource和MipLevels> 1

代码(在游戏类的LoadContent-Method中):

Texture2D texture = this.Content.Load<Texture2D>("MyTexture");
texture.GenerateMipMaps(this.GraphicsDevice); <- Exception thrown in this line

我不知道该怎么做,我希望有人可以帮我解决这个问题。感谢。

1 个答案:

答案 0 :(得分:2)

使用:

 Texture2D texture = this.Content.Load<Texture2D>("MyTexture");

将默认纹理用法设置为“不可变”,并且仅允许绑定为着色器视图。

为了生成MipMaps,需要使用Default和Binding作为ShaderView / RenderView。

现在您有几个选择:

1 /使用mipmaps将纹理预处理为dds,加载器会考虑到这一点。

TexConv可以为您做到这一点。 (使用-m指定级别计数)。

2 /如上所述加载纹理,使用

创建第二个纹理
 Texture2D texturewithmips = Texture2D.New(device, texture.Width, texture.Height, MipMapCount.Auto, texture.Format,
 TextureFlags.ShaderResource | TextureFlags.RenderTarget,
 1,Direct3D11.ResourceUsage.Default);

现在你需要复制第一个mip,使用:

device.Copy(texture, 0, null, t2, 0);

您现在可以使用:

t2.GenerateMipMaps(this.GraphicsDevice);

3 /由于使用上述方法,您将失去内容管理器(使用自动缓存)。

您可以通过添加更多纹理加载选项来修改TextureContentReader类来为您执行此操作。

如果您需要更多帮助,请随意。