我正在使用SharpDx-ToolKit,无法在纹理上创建MIMAP。如果我通过内容管理器加载纹理并尝试调用generatemipmaps(),我会收到一个notsupportedexception:

无法生成此纹理的mipmap

代码(在游戏类的LoadContent方法中):

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

我不知道该怎么办,希望任何人都可以帮助我解决这个问题。谢谢。

有帮助吗?

解决方案

使用:

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

将默认纹理使用到“不可变”,并且只能作为着色器视图绑定。

为了生成MIPMAP,需要默认和绑定为Shaderview/Renderview。

现在您有一些选择:

1/将您的纹理作为带有MIPMAP的DD的预处理,加载程序将考虑到这一点。

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类为您做到这一点。

如果您需要更多的帮助,请自由。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top